Posted on 2006-07-06 18:15
負人博客 閱讀(1251)
評論(0) 編輯 收藏 所屬分類:
JAVA技術
一:取得數據庫連接
?? 1.用DriverManager取數據庫連接
?? ?例子
??? ??String className,url,uid,pwd;
??? ??className = "oracle.jdbc.driver.OracleDriver";
?? ? ?url = "jdbc:oracle:thin:@127.0.0.1:1521:orasvr;
??? ??uid = "system";
??? ??pwd = "manager";
???? ?Class.forName(className);
??Connection cn = DriverManager.getConnection(url,uid,pwd);
?? 2.通過JNDI取得數據庫連接
?用jndi(java的命名和目錄服務)方式
? ?例子
??? ??String jndi = "jdbc/db";
??? ??Context ctx = (Context) new InitialContext().lookup("java:comp/env");
??? ??DataSource ds = (DataSource) ctx.lookup(jndi);
??? ??Connection cn = ds.getConnection();
二:執行sql語句
?1.用Statement來執行sql語句
?? ??String sql;
?? ??Statement sm = cn.createStatement();
?? ??sm.executeQuery(sql); // 執行數據查詢語句(select)
?? ??sm.executeUpdate(sql); // 執行數據更新語句(delete、update、insert、drop等)statement.close();
? ?2.用PreparedStatement來執行sql語句
?? ??String sql;
?? ??sql? = "insert into user (id,name) values (?,?)";
?? ??PreparedStatement ps = cn.prepareStatement(sql);
?? ??ps.setInt(1,xxx);
?? ??ps.setString(2,xxx);
? ??...
?? ??ResultSet rs = ps.executeQuery(); // 查詢
?? ??int c = ps.executeUpdate(); // 更新
三:處理執行結果
? ?查詢語句,返回記錄集ResultSet
? ?更新語句,返回數字,表示該更新影響的記錄數
? ?ResultSet的方法
? ??1、next(),將游標往后移動一行,如果成功返回true;否則返回false
? ??2、getInt("id")或getSting("name"),返回當前游標下某個字段的值
四:釋放連接
? cn.close();
? 一般,先關閉ResultSet,然后關閉Statement(或者PreparedStatement);最后關閉Connection
可滾動、更新的記錄集
?1、創建可滾動、更新的Statement
? Statement sm = cn.createStatement(ResultSet.TYPE_SCROLL_ENSITIVE,ResultSet.CONCUR_READ_ONLY);
? 該Statement取得的ResultSet就是可滾動的
?2、創建PreparedStatement時指定參數
? PreparedStatemet ps = cn.prepareStatement(sql,ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_READ_ONLY);
? ResultSet.absolute(9000);?
批量更新
?1、Statement
? Statement sm = cn.createStatement();
? sm.addBatch(sql1);
? sm.addBatch(sql2);
? ...
? sm.executeBatch()
? 一個Statement對象,可以執行多個sql語句以后,批量更新。這多個語句可以是delete、update、insert等或兼有
?2、PreparedStatement
? PreparedStatement ps = cn.preparedStatement(sql);
? {
?? ps.setXXX(1,xxx);
?? ...
?? ps.addBatch();
? }
? ps.executeBatch();
? 一個PreparedStatement,可以把一個sql語句,變換參數多次執行,一次更新。
?
事務的處理
?1、關閉Connection的自動提交
? cn.setAutoCommit(false);
?2、執行一系列sql語句
? 要點:執行每一個新的sql語句前,上一次執行sql語句的Statement(或者PreparedStatemet)必須先close
?Statement sm ;
?sm = cn.createStatement(insert into user...);
?sm.executeUpdate();
?sm.close();
?sm = cn.createStatement("insert into corp...);
?sm.executeUpdate();
?sm.close();
?3、提交
? cn.commit();
?4、如果發生異常,那么回滾
? cn.rollback();