1.JDBC介绍
JDBC(Java Database Connectivity)是基于JAVA语言访问数据库的一种技术。
JDBC包括一套JDBC的API和一套程序员和数据库厂商都必须去遵守的规范。
定义在两个包中:
java.sql包:提供访问数据库基本的功能
javax.sql包:提供扩展的功能
2.JDBC可以做些什么?
连接到数据库
在Java app中执行SQL命令
处理结果。
3.JDBC中常用的接口和类
1.Java.sql.DriverManager 驱动管理器。用来装载驱动程序,并且为创
建新的数据库连接提供支持。
2. Java.sql.Connection完成对某一指定数据库的连接
3. Java.sql.Statement在一个给定的连接中作为SQL执行语句的容器,他包含了两个重要的子类型。
– Java.sql.PreparedSatement用于执行预编译的sql语句
– Java.sql.CallableStatement用于执行数据库中存储过程的调用
4. Java.sql.ResultSet对于给定SQL语句取得结果的途径
4.通过JDBC连接数据库的步骤:
1.加载驱动程序
使用Class.forName()显式加载驱动程序。
例如:
Class.forName(“oracle.jdbc.driver.OracleDriver”);
加载了oracle提供的jar包内的OracleDriver类
2. 建立连接
使用DriverManager.getConnection(url);建立与给定数据库URL的连接。
例如
1 String url="jdbc:oracle:thin:@127.0.0.1:1521:orcl"; 2 String user="SCOTT"; 3 String password = "tiger"; 4 Connection conn = DriverManager.getConnection(url, user, password);
5.处理块Statement
5.1 静态处理块 Statement
特点: 静态的sql语句
创建: Connection对象调用 createStatement() 方法
操作:
executeQuery(String sql) --> select 查询
executeUpdate(String sql) --> DML操作(insert 、delete、update)
execute(String sql) --> DDL操作
5.2 预处理块 PreparedStatement
特点: 动态的sql语句 凡是Statement 能够处理的 PreparedStatement都能处理反之不一定
创建: Connection对象调用 prepareStatement(String sql) 方法
操作:
executeQuery(String sql) --> select 查询
executeUpdate(String sql) --> DML操作(insert 、delete、update)
execute(String sql) --> DDL操作
可以使用"?"作为参数替换SQL语句中的部分值,后面传入参数(可解决SQL注入问题)
可定义参数的位置:
select -->where sal=?
insert --> values(?)
update --> set sal=? where deptno=?
delete --> where sal=?
设置参数值:setXxx(int index, Xxx x)
index:第几个参数
Xxx:参数类型
x:参数值
注:定义的参数必须填充
例:
1 String sql = "select * from t_user where username = ? and password = ?"; 2 PreparedStatement ps = conn.prepareStatement(sql); 3 String u = "zhangsan"; 4 String p = "123456"; 5 ps.setString(1, u); 6 ps.setString(2, p); 7 ResultSet rs = stat.executeQuery(sql);
5.3 总结:
1.Statement对象在每次执行sql语句时都将语句传给数据库,在多次执行同一个语句时,效率比较低。
2.Statement对象Sql注入引起安全问题。
3.可以使用PreparedStatement,使用数据库的预编译功能,速度可以提高很多.避免sql注入引起的安全问题。
4.PreparedStatement对象的sql语句可以接受参数,每次执行时可以传递不同的参数
6.检索结果集
处理块调用executeQuery(sql)方法会返回一个ResultSet类的对象
ResultSet的基本处理方法:
– ResultSet对象包括一个由查询语句返回的一个表,这个表中包含所有的查询结果,按照行和列进行处理.
– ResultSet对象维持一个指向当前行的指针.最初,这个指针指向第一行之前.ResultSet类的next()方法使这个指针移向下一行.第一次,使用next()方法,将指针指向结果集的第一行.next方法的返回值是一个boolean值,若为true,则成功移向下一行.若返回false则没有下一行.
– getXXX方法可以从某一列中获得结果.其中XXX是jdbc中的java数据类型.如getInt();需要制定检索的列,或名称
7.查询数据库步骤:
1.加载数据库驱动类
1)在工程下新建lib文件夹,将 ojdbc6.jar(jar包在:E:\oracle\product\11.2.0\dbhome_1\jdbc\lib)拷贝至该目录下
2)右键ojdbc6.jar文件,build path --> add too build path
3)将驱动类加载到内存中
Class.forName("oracle.jdbc.driver.OracleDriver");
2.获取数据库连接对象
Connection conn = DriverManager.getConnection(url,user,password);
3.写sql语句
String sql = "xxxxxx";
4.创建PreparedStatement对象
PreparedStatement ps = conn.prepareStatement(sql);
5.执行查询返回ResultSet结果集对象
ResultSet rs = ps.executeQuery();
6.遍历结果集,获取查询结果
while(rs.next){
rs.getXxx()
}
7.释放资源
rs.close()
ps.close()
conn.close()
8.批处理
多次执行数据更新操作时,可以使用批处理减少连接数据库次数,提高效率
Statement批处理方式:
Statement st = conn.createStatement();
st.addBatch(更新语句1);
st.addBatch(更新语句2);
…..
st.executeBatch();
st.close();
PreparedStatement批处理方式:
PreparedStatement ps = conn.preparedStatement(sql);
ps.setXXX(索引,参数值);
… …
ps.addbatch();
ps.executeBatch();
ps.close();