《疯狂Java讲义》学习笔记(十)数据库与JDBC编程

1、JDBC基础
  • JDBC的全程是Java Database Connectivity,即Java数据库连接,它是一种可以执行SQL语句的Java API;JDBC为数据库开发提供了标准的API,所以使用JDBC开发的数据库应用可以跨平台运行,而且可以跨数据
  • JDBC可以完成三个基本工作:
    建立与数据库的连接
    执行SQL语句
    获得SQL语句的执行结果
  • JDBC驱动的4中类型:
    ->JDBC-ODBC桥,这种驱动将JDBC API映射到ODBC API,已经在Java8中被删除
    ->直接将JDBC API映射成数据库特定的客户端API,这种驱动包含了特定数据库的本地代码,用于访问特定数据库客户端
    ->支持三层结构的JDBC访问方式,主要用于Applet阶段,通过Applet访问数据库
    ->纯Java的,直接与数据库实例交互,它知道数据库使用的底层协议,也是目前推荐的JDBC驱动
2、Sql语句
  • 数据库类型
    网状型数据库
    层次性数据库
    关系数据库
    面向对象数据库
  • 关系数据库是理论最成熟、应用最广泛的数据库,它最基本的数据存储单元就是数据表,可以简单把数据库想象成大量数据表的集合
  • 面向对象数据库则是由面向对象编程语言催生的新型数据库,但面向对象数据库还没有大规模地商业应用
3、Sql语句的几种类型:

DML(Data Manipulation Language,数据操作语言):主要由insert、update和delete三个关键字完成
DDL(Data Definition Language,数据定义语言):主要由create、alter、drop和truncate四个关键字完成
DCL(Data Control Language,数据控制语言):主要由grant和revoke两个关键字完成
事务控制语句:主要由commit、rollback和savepoint三个关键字完成

4、标识符在Sql中的使用

标识符可以用于定义表名、列名,也可以用于定义变量等
标识符通常必须以字母开头
标识符包括字母、数字和三个特殊字符(#_$)
不要使用当前数据库的关键字、保留字,通常建议使用多个单词连缀而成,单词之间使用_分隔
同一个模式下的对象不应该同名,同一个库中的不同表或同一张表中的不同字段

5、数据库约束
  • 所有的关系数据库都支持对数据表使用约束,通过约束可以更好地保证数据表里数据的完成行:
    NOT NULL:非空约束,指定某列不能为空
    UNIQUE:唯一约束,指定某列或者几列组合不能重复
    PRIMARY KEY:主键,指定该列的值可以唯一地标识该条记录
    CHECK:检查,指定一个布尔表达式,用于指定对应列的值必须满足该表达式
  • 约束分类
    单列约束:每个约束只约束一列
    多列约束:每个约束可以约束多个数据列
  • 为数据表指定约束的两个时机:
    建表的同事为相应的数据列指定约束
    建表后创建,以修改表的方式来增加约束
6、索引
  • 索引是存放在模式(schema)中的一个数据库对象,虽然索引总是从属于数据库,但它也和数据表一样属于数据库对象;创建索引的唯一作用就是加速对标的查询,索引通过使用快速路径访问方法来快速定位数据,从而减少磁盘的I/O
  • 创建索引的两种方式:
    自动:当在表上定义主键约束、唯一约束和外键约束时,系统会为该数据列自动创建对应的索引
    手动:用户可以通过create index…语句来创建索引
  • 删除索引的两种方式:
    自动:数据表被删除时,该表上的索引自动被删除
    手动:用户可以通过drop index…语句来删除指定数据表上的指定索引
7、视图
  • 视图看上去非常像一个数据表,但它不是数据表,不能存储数据;视图只是一个或多个数据表中数据的逻辑显示
  • 使用视图的好处:
    可以限制对数据的访问
    可以使复杂的查询变得简单
    提供了数据的独立性
    提供了对相同数据的不同显示
8、JDBC编程步骤
  • 加载数据库驱动
    Class.forName(driveClass);
  • 通过DriverManager获取数据库连接
    DriverManager.getConnection(String url,String user,String psw);
  • 通过Connection对象创建Statement对象的方法:
    createStatement():创建基本的Statement对象
    prepareStatement(String sql):根据传入的Sql语句创建预编译的Statement对象
    prepareCall(Sring ql):根据传入的Sql语句创建CallableStatement对象(存储过程)
  • 使用Statement执行Sql语句
    execute():可以执行任何Sql语句,但比较麻烦
    executeUpdate():主要用于执行DML和DDL语句,执行DML语句返回受Sql语句影响的行数,执行DDL语句返回0
    executeQuery():只能执行查询语句,执行后返回代表查询结果的ResultSet对象
  • 操作结果集,如果执行Sql语句是查询语句,则返回一个ResultSet对象,提供如下方法:
    next()、previous()、first()、last()、beforeFirst()、afterLast()、absolute()等移动记录指针的方法
    getXxx()方法获取记录指针指向行、特定列的值,该方法既可以使用列索引作为参数,也可以使用列名作为参数
  • 回收数据库资源,包括关闭ResultSet、Statement和Connection等资源
9、ResultSetMetaData分析结果集

ResultSet里包含一个getMetaData()方法,该方法返回该ResultSet对应的ResultSetMetaData对象:
int getColumnCount():返回该ResultSet的列数量
String getColumnName(int column):返回指定索引的列名
int getColumnType(int column):返回指定索引的列类型

10、事务处理
  • 事务时由一步或几步数据库操作序列组成的逻辑执行单元,这系列操作要么全部执行,要么全部放弃
  • 事务具备4个特性:
    原子性(Atomicity)
    一致性(Consistency)
    隔离性(Isolation)
    持续性(Durability)
    1#### 1、DBCP数据源
  • jar
    commons-dbcp.jar
    commons-pool.jar
  • 连接代码
    BasicDataSource ds = new BasicDataSource();
    ds.setDriverClassName();
    ds.setUrl();
    ds.setUserName();
    ds.setPassword();
    // 初始连接数
    ds.setInitialSize();
    // 最多有多少个活动连接数
    ds.setMaxAcive();
    // 最小有多小个空闲连接
    ds.setMinIdle();
    Connection conn = ds.getConnection();
    conn.close();
    1#### 2、C3P0数据源
  • jar
    c3p0-0.9.1.2.jar
  • 连接代码
    ComboPooledDataSource ds = new ComboPooledDataSource();
    ds.setDriverClass();
    ds.setJdbcUrl();
    ds.setUser();
    ds.setPassword();
    // 最大连接数
    ds.setMaxPoolSize();
    // 最小连接数
    ds.setMinPoolSize();
    // 初始连接数
    ds.setInitialPoolSize();
    // 连接池的缓存Statement的最大数
    ds.setMaxStatements();
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值