JDBC
JDBC(Java DataBase Connection),主要由三个部分组成:驱动管理器(DriverManager)、会话管理(Statement)和结果集管理(ResultSet)
DriverManager
DriverManager 主要有两个功能:管理驱动和处理特定驱动与数据库连接。
管理驱动
Java 与 DB 之间的关系的建立需要一个“中间人”的指引,这里的中间人(即中间件)为 Driver。既然为中间层,它应该有属于 DB 的抽象部分和属于 Java 的抽象部分。属于 Java 的抽象部分即为 DriverManager。
DriverManager 中可以注册多种驱动,注册驱动的方法有两种:
/** * 两种方法的区别:forName的方式,要保证 Driver 在运行时可用,registerDriver 的方式,需要保证 Driver 在编译时可用 */ Class.forName("com.mysql.jdbc.Driver"); DriverManager.registerDriver(new com.mysql.jdbc.Driver);
DriverManager 中的方法全部为静态方法。既然是驱动的管理者,就会有删除、获取已注册驱动的方法,具体参看 API
连接数据库
调用
getConnection()
来连接数据库。数据库连接的 URL 由四部分组成,格式如下:
jdbc:mysql://localhost:3306/myDatabase?user=root&password=root
jdbc:mysql://
:协议名称localhost:3306
:连接主机与端口号,默认端口为 3306myDatabase
:数据库名?user=root&password=root
:参数,user和password
参数是内部参数,用来指明登录的用户名和密码。参数以“?”开始,以“&”连接多个参数
三种Statement
Statement
当没有太多的重复语句的时候,建议使用 Statement,例如:DDL语句(create, alter, drop)
PreparedStatement
提供了处理参数的能力
CallableStatement
用来调用存储过程,使用它可以显式的指明输出属性和输入参数,然后执行存储过程
批处理(batch)
因为一次次的提交事务,开销很大,使用 batch 来将多个 SQL 在一次事务中执行
ResultSet
数据库 Select 结果的映射,可以用它来修改表中的数据,相当于数据库中的一个视图。ResultSet 拥有一个 cursor ,起初指向结果集首行的前面,每调用一次 next()
, cursor 就会向下移动一行,当 cursor 后面没有了数据, next()
返回 false
ResultSet 的类型
- 默认类型:默认类型只能顺序读取一次数据,读取的顺序为 first -> end
- 回滚类型:可以回滚到前面 cursor 已经经过的行,再次读取
- 修改类型:设置了修改类型以后,才能对 ResultSet 中的数据进行修改
- 保持类型:默认情况下,使用同一个 Statement 执行完一个查询,再去执行另一个查询语句的时候,会开始一个新的事务并关闭前一个事务,上一个事务的 ResultSet 也会随着关闭。设置了该类型的 Statement,能够保持 ResultSet 不关闭。
但是不同的数据库对 JDBC 的实现不同,ResultSet 类型是否起作用需要看该数据库 Driver 的具体实现
更新视图内容
使用
ResultSet.updateXXX()
方法可以更新表中内容,但要遵循:- 必须选择是单个表
- 所选的列必须含有 primary key
- 不能含有 join 和 group by 语句