隨筆-144  評論-80  文章-1  trackbacks-0
           

          1、java數據庫操作基本流程

            2、幾個常用的重要技巧:

            可滾動、更新的記錄集

            批量更新

            事務處理

            java數據庫操作基本流程:取得數據庫連接 - 執行sql語句 - 處理執行結果 - 釋放數據庫連接

            1、取得數據庫連接

            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(java的命名和目錄服務)方式

            例子

          String jndi = "jdbc/db";
          Context ctx = (Context) new InitialContext().lookup("java:comp/env");
          DataSource ds = (DataSource) ctx.lookup(jndi);
          Connection cn = ds.getConnection();

            多用于jsp中

            2、執行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(); // 更新

            3、處理執行結果

            查詢語句,返回記錄集ResultSet。

            更新語句,返回數字,表示該更新影響的記錄數。

            ResultSet的方法:

            1、next(),將游標往后移動一行,如果成功返回true;否則返回false。

            2、getInt("id")或getSting("name"),返回當前游標下某個字段的值。

            3、釋放連接。

          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();
           

          posted on 2005-03-23 09:38 小力力力 閱讀(330) 評論(0)  編輯  收藏 所屬分類: JAVAORACLE
          主站蜘蛛池模板: 左权县| 乌兰县| 宁河县| 临海市| 沙坪坝区| 沁阳市| 武威市| 鄂托克前旗| 行唐县| 常熟市| 普定县| 涞水县| 黄骅市| 饶河县| 五河县| 威海市| 天等县| 新兴县| 始兴县| 平昌县| 隆回县| 井冈山市| 宁波市| 海阳市| 永清县| 扎囊县| 厦门市| 平泉县| 高州市| 克什克腾旗| 永安市| 大方县| 成安县| 获嘉县| 锡林郭勒盟| 北碚区| 班戈县| 阜城县| 双城市| 黄石市| 宜宾县|