什么是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();