1、JDBC概述
JDBC(java database connectivity),提供了一种与平台无关的用于执行SQL语句的标准API,可以很方便的实现多种关系型数据库的统一操作。
主要功能:
1) 与数据库建立连接
2)先数据库发送SQL语句
3)处理从数据库返回的结果
2、 JDBC中常用的类和接口
JDBC的接口和类都在java.sql包中
1)Connection 接口
代表与数据库的连接
常用方法:createStatement() 创建Statement对象
preparedStatement() 创建预处理 preparedStatement对象
commit() 提交事务,并且释放当前Connection对象持有的数据库锁
roolback() 回滚事务中所有更改,并且释放当前Connection对象持有的数据库锁
close() 立即释放Connection对象的数据库和JDBC资源
2)Statement接口
用于在已经建立连接的基础上向数据库发送SQL语句,Statement对用来执行不带参数的简单SQL语句
常用方法: executeUpdate() 用于执行数据库更新的SQL语句,如insert、update、delete等语句,返回更新的记录数
executeQuery(String sql) 用于执行数据库的查询操作,返回一个resultSet对象
3)PreparedStatement接口
它是Statement的子接口,属于预处理操作,由于它已经预编译过,所有执行速度上要比Statement对象要高。PreparedStatement接口可以用来动态的执行SQL语句。
它可以预防SQL注入攻击。SQL注入只对语句编译过程有破坏作用。
PreparedStatement对象在执行SQL命令时,命令回呗数据库进行编译和解析,并放到命令缓存区。然后,每当执行同一个PreparedStatement对象时,由于缓存区中可以发现预编译的命令,虽然它会被在解析一次,但是不会再进行编译,是可以重复使用的,所有可以提高系统的性能。
常用方法:executeUpdate() 用于执行数据库更新的SQL语句,如insert、update、delete等语句
executeQuery() 用于执行数据库的查询操作,返回一个resultSet对象
还有一些setXX(int index,int k ) 设定动态参数值得方法
4)DriverManager类
用来管理数据库中所有驱动程序,作用于用户和驱动程序之间,并在数据库的驱动程序之间建立连接。
Connection conn = DriverManager.getConnection(url,user,password); 获取数据库的连接
5)ResultSet接口
ResultSet接口类似于一个临时表,用来暂时存放数据库查询操作所获得的结果集。ResultSet实例具有指向数据行的指针,指针开始的位置在第一条记录前面,通过 next()方法将指针下移。
3、JDBC连接数据库的操作步骤:
1)加载JDBC驱动
2)建立数据库连接,获得Connection对象
3)获得Statement对象或者PreparedStatement 对象
4)执行SQL语句
5)访问结果集对象ResultSet对象
6)依次关闭上面所用的对象
import java sql.*;
public class Test{
public static void main(String args[]){
Connection con = null;
PreparedStatement ps = null;
ResultSet rs = null;
try{
Class.forName("com.mysql.jdbc.Driver");
con = DriverManager.getConnection("jdbc:mysql://localhost:3306/DatebaseName",user,password);
PS = con.preparedStatement("select * from user where age >=?");
ps.setInt(1,10);
rs = ps.executeQuery();
while(rs.next){
System.out.println(rs.getInt(1)+"---"rs.getString(2));
}
}catch(SQLException e1){
e1.printStackTrace();
}finally{
if(rs!=null){
rs.close();
}
if(ps!=null){
rs.close();
}
if(con!=null){
rs.close();
}
}
}
}
4、executeQuery()、executeUpdate()的用法区别
executeQuery()方法是在PreparedStatement对象在执行SQL查询,并返回查询生成的ResultSet对象
executeUpdate()方法中执行的SQL语句必须是DML语句,例如:insert,update,delete语句,或者是没有返回内容的DDL语句。
5、CallableStatement接口
主要用来调用数据库的存储过程。
假设存储过程名称为myproc
String sql = "{Call myproc(?,?,?)}"
CallableStatement catmt = null;
catmt = conn.prepareCall(sql);
使用CallableStatement调用数据库过程,同直接在数据库中调用过程一样。此处需要补充,带复习存储过程后完善此处
6、JDBC批处理
JDBC2.0中最重要的概念就是批处理操作,使用批处理操作可以一次性插入多条SQL语句,如果要完成批处理操作,则使用addBatch()加入要执行的一条SQL命令已经executeBatch()执行全部命令。
代码片段:
for(int i=0;i<10;i++){
ps.set(1,"张珊"+i)
ps.addBatch();
}
int temp[] = ps.executeBatch();
7、事务处理
事务就是所有操作要么一起成功,要么一起失败。
事务的(ACID):原子性、一致性、隔离性、持久性。
在JDBC中 一般而言,事务默认操作是自动提交,操作成功,系统自动调用commit(),失败则调用rollback()方法。
使用connection.setAutoCommit(false);//取消自动提交
connection.rollback();//事务回滚
8、Class.forName的作用
在java语言中,任何类只有被转载到JVM上才能运行。Class.forName()方法的作用就是把类加载打JVM中,它会返回一个带有给定字符串名的类对象,并且JVM会加载这个类,同时会执行该类的静态代码段。
类加载机制
Class.forName(className).newInstance();