`
eagle0824
  • 浏览: 228286 次
  • 性别: Icon_minigender_1
  • 来自: 镇江
社区版块
存档分类
最新评论

lomboz_eclipse ---oracle 笔记

阅读更多
lomboz_eclipse (MyEclipse,JBuilder)

JDBC(Java Database Connectivity)
JDBC 简介

(c,c++,java...) ---- (API for Oracle) -->Oracle
(c,c++,java...) ---- (API for SQLServer) -->SQLServer
(c,c++,java...) ---- (API for Mysql) -->Mysql
(c,c++,java...) ---- (API for ...) -->Oracle
(c,c++,java...)--(ODBC,JDBC)-->(Oracle,SQLServer.Mysql...)

SQL语言回顾
select * from T where...
insert into T values(...)
create table T()
delect form T where...
update T set t1=..and t2=.. where t3=...
drop table T

JDBC基础编程(java.sql.*)
JDBC编程步骤
1.Load the Driver(装载并注册数据库的JDBC驱动程序,不同数据库的不同连接类库,将Oracle的JDBC类库导入到classpath中)
(1)载入JDBC驱动:Class.forName()|Class.forName().newInstance()|new DriverName()
(2)注册JDBC驱动: java.sql.DriverManager.registerDriver(new oracle.jdbc.driver.OracleDriver());
实例化时自动向DriverManager注册,不需显示调用DriverManager.registerDriver方法
2.Connect to the DataBase
(1)DriverManager.getConnection()
要建立与数据库的连接,首先要创建指定数据库的URL。连接数据库的URL对象,利用DriverManager 的getConnection方法建立的。数据库URL对象与网络资源的统一资源定位类似,其构成格式如下:
  jdbc:subProtocol:subName://hostname:port;DatabaseName=ⅹⅹⅹ
  其中:
  jdbc表示当前通过Java的数据库连接进行数据库访问;
  subProtocol表示通过某种驱动程序支持的数据库连接机制;
  subName表示在当前连接机制下的具体名称;
  hostname表示主机名;
  port表示相应的连接端口;
  DatabaseName表示要连接的数据库的名称。
  这里以与Oracle数据库的连接为例:
  连接Oracle 8/8i/9i数据库(用thin模式) url = jdbc:oracle:thin:@hostip:1521:oracleSID;
  注意:hostip指主机的ip地址,oracleSID指数据库的SID。如何查看 oracleSID
  1.在oracle的安装目录下,如D:\oracle\product\10.2.0\db_1\dbs,看文件名如SPFILEORCL.ORA,那么就是orcl,也就是说文件名字是   "SPFILE******.ORA ",那种的 "**** "就是SID
  2.D:\oracle\product\10.2.0\oradata\SID文件夹... 或D:\oracle\product\10.2.0\db_1\dbs\SPFILESID名称.ORA
  3.select instance_name from v$instance
  再者确定连接数据库的用户名与密码,即user和password 的值:user = “ⅹⅹⅹ “; password = “ⅹⅹⅹ“;
  最后使用如下语句:
  Connection con=(java.sql.)DriverManager.getConnection(url,user,password);

3.Execute the SQL(用连接创建语句对象)
(1)Connection.CreateStatement()
(2)Statement.executeQuery(select语句)//返回一组结果集,其像游标,指针指在第一条记录的上面
(3)Statement.executeUpdate(insert,update,delete语句)
String sql = "insert into dept2 values (" + deptno + ",'" + dname + "','"+loc+"')";//取值
System.out.println(sql);
4.Retrieve the result data
(1)循环取得结果while(rs.next())
5.Show the result data
(1)将数据库中的各种类型转换为Java中的类型(getXXX)方法
6.Close
(1)依次关闭ResultSet、Statement和Connection对象(XXX.close())
close the resultset/ close the statement / close the connection
for example:
import java.sql.*;
public class TestJDBC {

public static void main(String[] args){
ResultSet rs = null;
Statement stmt = null;
Connection conn = null;
try{
Class.forName("oracle.jdbc.driver.OracleDriver");//new 一个驱动类的实例
//new oracle.jdbc.driver.OracleDriver();
conn = DriverManager.getConnection("jdbc:oracle:thin:@10.3.5.19:1521:XST", "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(1));
}
}catch(ClassNotFoundException e){
e.printStackTrace();//logforg记录错误
}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();
}
}

}

}
JDBC编程高级
String sql = "insert into dept2 values (" + deptno + ",'" + dname + "','" + loc + "')";
prepareStatement  灵活指定SQL语句中的变量
pstmt = conn.preparedStatement("insert into dept2 values (?,?,?)");
pstmt.setInt(1, deptno);
pstmt.setString(2, dname);
pstmt.setString(3, loc);
pstat.executeUpdate();

CallableStatement  对存储过程进行调用
CallableStatement cstmt = conn.prepareCall("{call p(?,?,?,?)}");//调用过程p
cstmt.registerOutParameter(3, Types.INTEGER);//设置第三个参数为输出变量,类型为整型
cstmt.setInt(1, 3);//设置第一个变量的值为3
System.out.println(cstmt.getInt(3))//取出第三个变量的值并输出

Batch  批处理(Statement,PreparedStatement 都可以用 addBatch();executeBatch())

Transaction  运用事务处理
conn.setAutoCommit(false);
........
conn.commit();
conn.setAutoCommit(true);
catch(SQLException e){if(conn!=null){conn.rollback();conn.setAutoCommit(true);}}

可以前后移动结果集 Movable ResultSet
Statement stmt = conn.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_READ_ONLY);
Rs.next()
Rs.islast()
Rs.isAfterLast()
Rs.absolute()
Rs.getRow() 返回值当前记录行  与Rs.last()可以确定一共有多少条记录

Updatable ResultSet(*)
DataSource and RowSet
1)DataSource (数据源,一般不再单机上实现)
DriverManage(拿到跟数据库的连接) 的替代;连接池的实现;分布式实现(DataSource的属性可以动态改变)
2)RowSet
新的ResultSet;从ResultSet继承;支持断开的结果集;支持JavaBean标准
example 2
import java.sql.*;

public class TestPrepared {


public static void main(String[] args) {
if(args.length!=3){
System.out.println("Parameter Error!Please try again");
System.exit(-1);
}

int deptno  = 0;

try {
deptno = Integer.parseInt(args[0]);
} catch (NumberFormatException e1) {
System.out.println("Parameter Error!deptno shold be Number format");
System.exit(-1);
}

String dname = args[1];
String loc = args[2];

Connection conn = null;
PreparedStatement pstmt = null;
try {
Class.forName("oracle.jdbc.driver.OracleDriver");
conn = DriverManager.getConnection("jdbc:oracle:thin:@10.3.5.19:1521:orcl","scott","tiger");
//String sql = "insert into dept2 values (" + deptno + ",'" + dname + "','" + loc + "')";
pstmt = conn.prepareStatement("insert into dept2 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();
}
}

}

}
example 3
import java.sql.*;


public class TestTransaction {

public static void main(String[] args) {
Connection conn = null;
Statement stmt = null;

try {
Class.forName("oracle.jdbc.driver.OracleDriver");
conn = DriverManager.getConnection("jdbc:oracle:thin:@10.3.5.19:1521:orcl","scott","tiger");
conn.setAutoCommit(false);
stmt= conn.createStatement();
stmt.addBatch("insert into dept2 values(99,'salse','haiyang')");
stmt.addBatch("insert into dept2 values(99,'salse','haiyang')");
stmt.addBatch("insert into dept2 values(99,'salse','haiyang')");
stmt.executeBatch();
conn.commit();
conn.setAutoCommit(true);

}catch(ClassNotFoundException e){
e.printStackTrace();
}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();
stmt = null;
}

if(conn!=null){
conn.close();
conn = null;
}
} catch (SQLException e) {
e.printStackTrace();
}
}



}


}









分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics