JDBC学习笔记,以oracle 9i为例。
来源:互联网 发布:最近流行的网络歌手 编辑:程序博客网 时间:2024/06/05 13:21
最典型的Oracle JDBC程序:
1. 查询语句:
import java.sql.*;
publicclass TestJDBC {
publicstaticvoid main(String[] args) {
ResultSet rs = null;
Statement stmt = null;
Connection conn = null;
try {
Class.forName("oracle.jdbc.driver.OracleDriver");
//neworacle.jdbc.driver.OracleDriver();
conn = DriverManager.getConnection("jdbc:oracle:thin:@192.168.0.1:1521:SXT","scott", "tiger");
stmt = conn.createStatement();
rs = stmt.executeQuery("select * from dept");
while(rs.next()) {
System.out.println(rs.getString("deptno"));
System.out.println(rs.getInt("deptno"));
}
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (SQLException e) {
e.printStackTrace();
} finally {
try {
if(rs !=null) {
rs.close();
rs = null;
}
if(stmt !=null) {
stmt.close();
stmt = null;
}
if(conn !=null) {
conn.close();
conn = null;
}
} catch (SQLException e) {
e.printStackTrace();
}
}
}
}
2. DML语句 Insert
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
publicclass TestDML {
publicstaticvoid main(String[] args) {
Statement stmt = null;
Connection conn = null;
try {
Class.forName("oracle.jdbc.driver.OracleDriver");
//neworacle.jdbc.driver.OracleDriver();
conn = DriverManager.getConnection("jdbc:oracle:thin:@192.168.0.1:1521:SXT","scott", "tiger");
stmt = conn.createStatement();
String sql = "insert intodept2 values (98, 'GAME', 'BJ')";
stmt.executeUpdate(sql);
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (SQLException e) {
e.printStackTrace();
} finally {
try {
if(stmt !=null) {
stmt.close();
stmt = null;
}
if(conn !=null) {
conn.close();
conn = null;
}
} catch (SQLException e) {
e.printStackTrace();
}
}
}
}
3. DML语句2 从命令行输入3个值,并把这三个值插入depart2表当中。
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
publicclass TestDML2 {
publicstaticvoid main(String[] args) {
if(args.length != 3) {
System.out.println("ParameterError! Please Input Again!");
System.exit(-1);
}
int deptno = 0;
try {
deptno = Integer.parseInt(args[0]);
} catch (NumberFormatException e) {
System.out.println("ParameterError! Deptno should be Number Format!");
System.exit(-1);
}
String dname = args[1];
String loc = args[2];
Statement stmt = null;
Connection conn = null;
try {
Class.forName("oracle.jdbc.driver.OracleDriver");
//neworacle.jdbc.driver.OracleDriver();
conn = DriverManager.getConnection("jdbc:oracle:thin:@192.168.0.1:1521:SXT","scott", "tiger");
stmt = conn.createStatement();
String sql = "insert intodept2 values (" + deptno + ",'" + dname +"','" + loc +"')";
System.out.println(sql); //打印出当前sql语句去检查该sql是否正确。
stmt.executeUpdate(sql);
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (SQLException e) {
e.printStackTrace();
} finally {
try {
if(stmt !=null) {
stmt.close();
stmt = null;
}
if(conn !=null) {
conn.close();
conn = null;
}
} catch (SQLException e) {
e.printStackTrace();
}
}
}
}
4. Prepared Statement,比较容易看清楚。可以灵活制定参数类型。
import java.sql.*;
publicclass TestPrepStmt {
publicstaticvoid main(String[] args) {
if(args.length != 3) {
System.out.println("ParameterError! Please Input Again!");
System.exit(-1);
}
int deptno = 0;
try {
deptno = Integer.parseInt(args[0]);
} catch (NumberFormatException e) {
System.out.println("ParameterError! Deptno should be Number Format!");
System.exit(-1);
}
String dname = args[1];
String loc = args[2];
//PreparedStatment 是一种statement,比父接口提供了更丰富的方式。
PreparedStatement pstmt =null;
Connection conn = null;
try {
Class.forName("oracle.jdbc.driver.OracleDriver");
//neworacle.jdbc.driver.OracleDriver();
conn = DriverManager.getConnection("jdbc:oracle:thin:@192.168.0.1:1521:SXT","scott", "tiger");
pstmt = conn.prepareStatement("insert intodept2 values (?, ?, ?)");
pstmt.setInt(1, deptno);
pstmt.setString(2, dname);
pstmt.setString(3, loc);
pstmt.executeUpdate();
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (SQLException e) {
e.printStackTrace();
} finally {
try {
if(pstmt !=null) {
pstmt.close();
pstmt = null;
}
if(conn !=null) {
conn.close();
conn = null;
}
} catch (SQLException e) {
e.printStackTrace();
}
}
}
}
5. CallableStatement是PreparedStatement的子接口,是用来调用存储过程的。所有的java程序调用存储过程都这么写,只是要注意exception不要这么写。要分别try catch
import java.sql.*;
publicclass TestProc {
/**
*@paramargs
*/
publicstaticvoid main(String[] args)throws Exception {
Class.forName("oracle.jdbc.driver.OracleDriver");
Connection conn = DriverManager.getConnection("jdbc:oracle:thin:@192.168.0.1:1521:SXT","scott", "tiger");
//调用存储过程
CallableStatementcstmt = conn.prepareCall("{call p(?, ?, ?, ?)}");
cstmt.registerOutParameter(3,Types.INTEGER); //是输出参数,3是指存储过程当中第三个参数是输出参数,然后类型是Types.INTEGER.
cstmt.registerOutParameter(4,Types.INTEGER); //是输出参数
cstmt.setInt(1, 3);
cstmt.setInt(2, 4);
cstmt.setInt(4, 5);//?
cstmt.execute(); //执行方法是execute()
System.out.println(cstmt.getInt(3)); //拿到输出参数
System.out.println(cstmt.getInt(4)); //拿到输出参数
cstmt.close();
conn.close();
}
}
6. 批处理
有两种方式:
第一种是写三条语句,然后一次性执行。
import java.sql.*;
publicclass TestBatch {
publicstaticvoid main(String[] args)throws Exception {
Class.forName("oracle.jdbc.driver.OracleDriver");
Connection conn = DriverManager.getConnection("jdbc:oracle:thin:@192.168.0.1:1521:SXT","scott", "tiger");
Statement stmt = conn.createStatement();
stmt.addBatch("insert intodept2 values (51, '500', 'haha')");
stmt.addBatch("insert intodept2 values (52, '500', 'haha')");
stmt.addBatch("insert intodept2 values (53, '500', 'haha')");
stmt.executeBatch();
stmt.close();
conn.close();
}
}
第二种方式是写一条语句,但是传三次参数,再一并运行。
import java.sql.*;
publicclass TestBatch {
publicstaticvoid main(String[] args)throws Exception {
Class.forName("oracle.jdbc.driver.OracleDriver");
Connection conn = DriverManager.getConnection("jdbc:oracle:thin:@192.168.0.1:1521:SXT","scott", "tiger");
PreparedStatement ps = conn.prepareStatement("insert into dept2 values (?, ?, ?)");
ps.setInt(1, 61);
ps.setString(2, "haha");
ps.setString(3, "bj");
ps.addBatch();
ps.setInt(1, 62);
ps.setString(2, "haha");
ps.setString(3, "bj");
ps.addBatch();
ps.setInt(1, 63);
ps.setString(2, "haha");
ps.setString(3, "bj");
ps.addBatch();
ps.executeBatch();
ps.close();
conn.close();
}
}
7. Transaction就是一些操作必须同时执行。比如存取钱问题。
import java.sql.*;
publicclass TestTransaction {
publicstaticvoid main(String[] args) {
Connection conn = null;
Statement stmt = null;
try {
Class.forName("oracle.jdbc.driver.OracleDriver");
conn = DriverManager.getConnection("jdbc:oracle:thin:@127.0.0.1:1521:SXT","scott", "tiger");
//不让系统直接提交
conn.setAutoCommit(false);
stmt = conn.createStatement();
stmt.addBatch("insert intodept2 values (51, '500', 'haha')");
stmt.addBatch("insert intodept2 values (52, '500', 'haha')");
stmt.addBatch("insert intodept2 values (53, '500', 'haha')");
stmt.executeBatch();
//自己提交
conn.commit();
//恢复现场,把属性设回来
conn.setAutoCommit(true);
} catch (ClassNotFoundException e) {
e.printStackTrace();
//如果出现SQLException,就马上先rollback再说。
} catch(SQLException e) {
e.printStackTrace();
try {
if(conn !=null)
{
//先恢复成没有修改的状态。
conn.rollback();
conn.setAutoCommit(true);
}
} catch (SQLException e1) {
e1.printStackTrace();
}
}finally {
try {
if(stmt !=null)
stmt.close();
if(conn !=null)
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
}
8. 可以滚动的结果集:
import java.sql.*;
publicclass TestScroll {
publicstaticvoid main(String args[]) {
try {
new oracle.jdbc.driver.OracleDriver();
String url = "jdbc:oracle:thin:@192.168.0.1:1521:SXT";
Connection conn = DriverManager
.getConnection(url,"scott", "tiger");
//对于滚动是否敏感,当并发访问当前结果集的时候,是只读的。就是说,指定这两个参数才可以用这些方法,不然就只可以用next()方法。
Statement stmt = conn.createStatement(
ResultSet.TYPE_SCROLL_INSENSITIVE,
ResultSet.CONCUR_READ_ONLY);
ResultSet rs = stmt
.executeQuery("select* from emp order by sal");
rs.next();
//取得第一个字段
System.out.println(rs.getInt(1));
//直接就定位到最后
rs.last();
//把第一个字段的值当成string类型,拿出来
System.out.println(rs.getString(1));
//是不是最后一条?
System.out.println(rs.isLast());
//是不是最后一条后一条
System.out.println(rs.isAfterLast());
//一共多少条?
System.out.println(rs.getRow());
//向上滚,是倒数第二条
rs.previous();
System.out.println(rs.getString(1));
//定位到第6条
rs.absolute(6);
System.out.println(rs.getString(1));
rs.close();
stmt.close();
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
事实上,不是所有的数据库都可用这种可以滚动的结果集。
9. 可以更新的结果集。
import java.sql.*;
publicclass TestUpdataRs {
publicstaticvoid main(String args[]){
try{
neworacle.jdbc.driver.OracleDriver();
String url="jdbc:oracle:thin:@192.168.0.1:1521:SXT";
Connectionconn=DriverManager.getConnection(url,"scott","tiger");
Statement
//是否对滚动敏感?是否并发访问可更新?
stmt=conn.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_UPDATABLE);
ResultSetrs=stmt.executeQuery("select *from emp2");
rs.next();
//更新一行数据
rs.updateString("ename","AAAA");
rs.updateRow();
//插入新行
rs.moveToInsertRow();
rs.updateInt(1, 9999);
rs.updateString("ename","AAAA");
rs.updateInt("mgr", 7839);
rs.updateDouble("sal", 99.99);
rs.insertRow();//插入到数据库中
//将光标移动到新建的行
rs.moveToCurrentRow();
//删除行
rs.absolute(5);
rs.deleteRow();
//取消更新
//rs.cancelRowUpdates();
}catch(SQLException e){
e.printStackTrace();
}
}
}
不是所有的数据库都支持。oracle9i当中不可以用。
DataSource和RowSet
DataSource是用来替代DriverManager,可以实现连接池实现,支持分布式实现。它的属性可以动态改变。
RowSet是新的ResultSet,他从ResultSet
继承,支持断开的结果集,也支持JavaBean标准。
以上绿色部分,背一下。
- JDBC学习笔记,以oracle 9i为例。
- jdbc连接数据库 以oracle为例
- 以9i为例,oracle服务器端的主要服务介绍
- 【J2EE核心开发学习笔记 004】通过JDBC进行简单的增删改查(以MySQL为例)
- 以jdbc为例搞清contextClassLoader
- JDBC(Oracle数据库为例)
- NSIS学习笔记(以Qt4程序打包为例)
- 室内导航学习笔记---以WIFI为例
- NSIS学习笔记(以Qt4程序打包为例)
- NSIS学习笔记(以Qt4程序打包为例)
- NSIS学习笔记(以Qt4程序打包为例)
- oracle 9i 学习
- Oracle 9i 1z0-007课程学习笔记
- Oracle 9i&10g学习笔记【一】
- Oracle 9i&10g学习笔记【二】
- sparkSQL以JDBC为数据源
- JDBC操纵数据库的步骤(以SQLServer为例)
- JDBC连接数据库教程,以postgreSQL为例
- html小总结:表格立体效果的实现.
- VS 2010 2012 不提示异常解决方法
- HTML中滚动条的样式设置
- POJ2553:The Bottom of a Graph(tarjan缩点)
- 问题linker input file unused because linking not done
- JDBC学习笔记,以oracle 9i为例。
- 【JavaSE入门系列】第01章_Java技术入门
- HttpConnection详解
- java.sql.SQLException: ResultSet may only be accessed in a forward direction.报错
- div之float,clear特性
- linux的ln命令
- oracle常用管理语句 如锁表查询 杀掉进程 查询表空间使用等等
- 判断一个数是偶数还是奇数
- srO qw