什么是JDBC?
JDBC的全称是Java数据库连接(Java Database connect),它是一套用于执行SQL语句的Java API。应用程序可通过这套API连接到关系数据库,并使用SQL语句来完成对数据库中数据的查询、更新和删除等操作
JDBC接口
Driver接口
Driver接口是所有JDBC驱动程序必须实现的接口,该接口专门提供给数据库厂商使用。在编写JDBC程序时,必须要把所使用的数据库驱动程序或类库加载到项目的classpath中,也就是mysql的Jar包
DriverManager接口
DriverManage类用来管理数据库中的所有驱动程序,是JDBC的管理层,作用于用户和驱动程序之间,跟踪可用的驱动程序,并在数据库的驱动之间建立连接
常用方法
-
getConnection(String URL,String user,String PassWord) 指定3个参数,分别是连接地址,用户名和密码
Connection接口
Connection 接口代表与特定的数据库的连接,要对数据库中的数据进行操作,首先要获取数据库连接,Connection就像在应用程序与数据库之间开通了一条通道.可以通过DriverManager类的getConnection()方法获取Connection的实例
常用方法
-
createStatement() 创建Statement对象
-
PrepareStatement() 创建预处理对象PrepareStatement
-
isReadOnly() 查看当前Connection对象的读取模式是否是只读形式
-
SetReadOnly() 设置当前Connection对象的读写模式,默认是非只读模式
-
close() 立即释放此Connection对象的数据库和JDBC资源,而不是自动释放
Statement接口
Statement接口用于创建向数据库中传递SQL语句的对象
常用方法
-
boolean execute(String sql) 执行给定的 SQL 语句,该语句可能返回多个结果
-
executeQuery(String sql) 执行查询的Sql语句 返回单个ResultSet对象
-
clearBatch() 清空此Statement对象的当前SQL命令列表
-
executeUpdate() 执行指定的SQL语句 该语句可以为INSERT UPDATE DELETE语句
-
close() 释放Statement实例占用的数据库和JDBC资源
PreparedStatement接口
PreparedStatement接口继承Statement,用于执行动态的SQL语句 ,通过PreparedStatement实例执行的SQL语句,将被编译并保存到PreparedStatement实例中,从而可以重复的执行该SQL语句。与创建Statement不同的是,需要根据sql语句创建PreparedStatement,数据库对带 ? 占位符的SQL进行预编译
常用方法
-
execute( ) 执行给定的 SQL 语句,该语句可能返回多个结果。
-
executeQuery( ) 在此preparedStatement对象中执行Sql查询语句,返回为查询数据集的对象
-
executeUpdate() 在此preparedStatement对象执行Sql语句,该SQL语句必须是一个INSERT UPDATE DELETE语句
Statement和prepareStatement的区别
- PreparedStatement是预编译的,对于批量处理可以大大提高效率. 也叫JDBC存储过程
- 使用 Statement 对象。在对数据库只执行一次性存取的时侯,用 Statement 对象进行处理。PreparedStatement 对象的开销比Statement大,对于一次性操作并不会带来额外的好处。当你需要执行Statement对象多次的时候,PreparedStatement对象将会大大降低运行时间,当然也加快了访问数据库的速度
- statement每次执行sql语句,相关数据库都要执行sql语句的编译,preparedstatement是预编译得, preparedstatement支持批处理
ResultSet接口
ResultSet接口类似于一个临时的数据表,用来暂时存放数据库查询操作获取到的数据集,数据库查询结果的返回值便为ResultSet类型
常用方法
-
getInt() 以int形式获取当前行指定的列
-
getFloat() 以Float形式获取当前行指定的列
-
getDate() 以Date形式获取当前行指定的列
-
getBoolean() 以Boolean形式获取当前行指定的列
-
getString() 以String形式获取当前行指定的列
-
getObject() 以Object形式获取当前行指定的列
-
next( ) 将指针向下移一行
-
updateInt() 用int值更新查找结果的指定列
-
updateFloat()用float值更新指定列
-
updateLong() 用指定的long值更新指定的列
-
updateString()用指定的"String"值更新指定列
-
updateObejct() 用object值更新指定的列
-
updatenull() 将指定的列值修改为null
-
updateDate() 用指定的Date值更新指定的列
-
updateDouble() 用指定的Double值更新指定的列
实现方法
1.加载JDBC驱动程序
//加载MySql的驱动类
Class.forName("com.mysql.jdbc.Driver") ;
2.提供JDBC连接的URL
//连接MySql数据库,用户名和密码都是root
String url = "jdbc:mysql://localhost:3306/数据库名" ;
String username = "root" ;
String password = "root" ;
Connection con = DriverManager.getConnection(url , username , password ) ;
3.创建一个Statement
三种类型:
- 执行静态SQL语句。通常通过Statement实例实现
- 执行动态SQL语句。通常通过PreparedStatement实例实现
- 执行数据库存储过程。通常通过CallableStatement实例实现
Statement stmt = con.createStatement() ;
PreparedStatement pstmt = con.prepareStatement(“insert into user values(?,?)”) ;
CallableStatement cstmt = con.prepareCall("{CALL demoSp(? , ?)}") ;
4.执行SQL语句
- ResultSet executeQuery(String sqlString):执行查询数据库的SQL语句,返回一个结果集(ResultSet)对象
- int executeUpdate(String sqlString):用于执行INSERT、UPDATE或DELETE语句以及SQL DDL语句,如:CREATE TABLE和DROP TABLE等
- execute(sqlString):用于执行返回多个结果集、多个更新计数或二者组合的语句
ResultSet rs = stmt.executeQuery("SELECT * FROM ...") ;
int rows = stmt.executeUpdate("INSERT INTO ...") ;
boolean flag = stmt.execute(String sql) ;
5.处理结果
两种情况:
- 执行更新返回的是本次操作影响到的记录数
- 执行查询返回的结果是一个ResultSet对象
• ResultSet包含符合SQL语句中条件的所有行,并且它通过一套get方法提供了对这些行中数据的访问
String name = rs.getString("name") ;
String pass = rs.getString(1) ; // 此方法比较高效
6.关闭JDBC对象
- 关闭记录集
- 关闭声明
- 关闭连接对象
re.close();
stms.close();
con.close();