一 、jdbc简介
JDBC全称为:JavaDatabase Connectivity(java数据库连接),它主要由接口组成。组成JDBC的有2个包:java.sql 和javax.sql。
开发JDBC应用需要以上2个包的支持外,还需要导入相应JDBC的数据库实现(即数据库驱动 ojdbc.jar,mysq/mysql-connector-java-5.1.6-bin.jar/ sql server 有三个包)。
二 、第一个jdbc程序
package cn.sp.test;
import java.sql.*;
import oracle.jdbc.driver.OracleDriver;
public class TestJdbc {
//使用jdbc去操作 oracle 数据库
public static void main(String[] args) {
// TODO Auto-generated method stub
Connection ct=null;
Statement statement=null;
try {
//1加载驱动
Class.forName("oracle.jdbc.driver.OracleDriver");
//DriverManager.registerDriver(new OracleDriver());
//2得到连接
ct=DriverManager.getConnection
("jdbc:oracle:thin:@127.0.0.1:1521:orclhsp", "scott", "tiger");
//把事务设为不自动提交
ct.setAutoCommit(false);
//3.创建sql对象(Statement / PreparedStatement /CallableStatement)
statement=ct.createStatement();
//4.通过statement向数据库发出sql 指令.
/* int n=statement.executeUpdate
("insert into user1 values(user1_seq.nextval,'顺平','123'," +
"'shunping@sohu.com',sysdate,30)"); //executeupdate 执行dml(update/insert/delete)*/
//需求: 对emp表进行操作: 把SMITH 的sal -10 给 KING sal+10
statement.executeUpdate("update emp set sal=sal-10 where ename='SMITH'");
int i=9/0;
statement.executeUpdate("update emp set sal=sal+10 where ename='KING'");
//提交所有事务
ct.commit();
} catch (Exception e) {
e.printStackTrace();
//如果 sql 语句中任何语句错误,则可以整体回滚.
try {
ct.rollback();
} catch (SQLException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
// TODO: handle exception
}finally{
//关闭资源[先开后闭];
if(statement!=null){
try {
statement.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
statement=null;//使用垃圾回收.
}
if(ct!=null){
try {
ct.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
ct=null;
}
}
}
}
面试题: 什么时候,需要把 setAtuoCommit设为 false?
答:当有多个dml 同时执行,将其看做一个整体提交,则使用 事务管理 ,则需要把setAutoCommit 设为false。
在默认情况下,我们的rs结果集,只能向前移动,这样rs 结果就不能复用 ,如果希望复用,则可以这样做:
//通过java 来查询所有的雇员.
//假设我们希望rs结果,可以滚动(可以向前,亦可向后)
ResultSet 的可选项有:
resultSetType - 结果集类型,它是 ResultSet.TYPE_FORWARD_ONLY、ResultSet.TYPE_SCROLL_INSENSITIVE 或 ResultSet.TYPE_SCROLL_SENSITIVE 之一
resultSetConcurrency - 并发类型;它是 ResultSet.CONCUR_READ_ONLY 或ResultSet.CONCUR_UPDATABLE 之一
statement=ct.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_READ_ONLY);
rs=statement.executeQuery("select * from emp");
//循环取出
while(rs.next()){
System.out.println(rs.getInt("empno")+" 名字"+rs.getString("ename"));
}
//如果我们希望,重新使用rs
rs.beforeFirst();
System.out.println("*********************");
while(rs.next()){
System.out.println(rs.getInt("empno")+" 名字"+rs.getString("ename"));
}