一、搭建实验环境 :
1、在oracle中创建一个库,并创建user1表和插入表的数据。
2、新建一个Java工程,并导入数据驱动。
二、编写程序,在程序中加载数据库驱动
//DriverManager.registerDriver(Driver driver)
Class.forName(“oracle.jdbc.driver.OracleDriver”);
Jdbc程序中的DriverManager用于加载驱动,并创建与数据库的链接,这个类的常用方法:
1)DriverManager.registerDriver(new OracleDriver()),注意:在实际开发中,并不推荐采用这个方法注册驱动。查看Driver的源代码可以看到,如果采用此种方式,会导致驱动程序加载两次,也就是在内存中会有两个Driver对象。
2)推荐方式:Class.forName(“oracle.jdbc.driver.OracleDriver”);采用此种方式不会导致驱动对象在内存中重复出现, 并且采用此种方式,程序仅仅只需要一个字符串,不需要import驱动的API,这样可使程序不依赖具体的驱动,使程序的灵活性更高。
三、建立连接(Connection)
Connectionconn = DriverManager.getConnection(url,user,pass);
四、创建用于向数据库发送SQL的Statement对象,
Statementst= conn.createStatement();
ResultSetrs= st.excuteQuery(sql);
五、通过statement发送sql语句
Statement.executeQuery方法用于向数据库发送查询语句,executeQuery方法返回代表查询结果的ResultSet对象。
六、从代表结果集的ResultSet中取出数据,打印到命令行窗口
Jdbc程序中的ResultSet用于代表Sql语句的执行结果。Resultset封装执行结果时,采用的类似于表格的方式。ResultSet 对象维护了一个指向表格数据行的游标,初始的时候,游标在第一行之前,调用ResultSet.next() 方法,可以使游标指向具体的数据行,进行调用方法获取该行的数据。
七、断开与数据库的连接,并释放相关资源
先开后闭。
例程:
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;
}
}
}
}