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

          1、java數(shù)據(jù)庫操作基本流程

            2、幾個(gè)常用的重要技巧:

            可滾動、更新的記錄集

            批量更新

            事務(wù)處理

            java數(shù)據(jù)庫操作基本流程:取得數(shù)據(jù)庫連接 - 執(zhí)行sql語句 - 處理執(zhí)行結(jié)果 - 釋放數(shù)據(jù)庫連接

            1、取得數(shù)據(jù)庫連接

            1)用DriverManager取數(shù)據(jù)庫連接

            例子:

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

            例子

          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、執(zhí)行sql語句

            1)用Statement來執(zhí)行sql語句

          String sql;
          Statement sm = cn.createStatement();
          sm.executeQuery(sql); // 執(zhí)行數(shù)據(jù)查詢語句(select)
          sm.executeUpdate(sql); // 執(zhí)行數(shù)據(jù)更新語句(delete、update、insert、drop等)statement.close();

            2)用PreparedStatement來執(zhí)行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、處理執(zhí)行結(jié)果

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

            更新語句,返回?cái)?shù)字,表示該更新影響的記錄數(shù)。

            ResultSet的方法:

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

            2、getInt("id")或getSting("name"),返回當(dāng)前游標(biāo)下某個(gè)字段的值。

            3、釋放連接。

          cn.close();

            一般,先關(guān)閉ResultSet,然后關(guān)閉Statement(或者PreparedStatement);最后關(guān)閉Connection

            可滾動、更新的記錄集

            1、創(chuàng)建可滾動、更新的Statement

          Statement sm = cn.createStatement(ResultSet.TYPE_SCROLL_ENSITIVE,ResultSet.CONCUR_READ_ONLY);

            該Statement取得的ResultSet就是可滾動的

            2、創(chuàng)建PreparedStatement時(shí)指定參數(shù)

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

            一個(gè)Statement對象,可以執(zhí)行多個(gè)sql語句以后,批量更新。這多個(gè)語句可以是delete、update、insert等或兼有

            2、PreparedStatement

          PreparedStatement ps = cn.preparedStatement(sql);
          {
           ps.setXXX(1,xxx);
           ...
           ps.addBatch();
          }
          ps.executeBatch();

            一個(gè)PreparedStatement,可以把一個(gè)sql語句,變換參數(shù)多次執(zhí)行,一次更新。

            事務(wù)的處理

            1、關(guān)閉Connection的自動提交

          cn.setAutoCommit(false);

            2、執(zhí)行一系列sql語句

            要點(diǎn):執(zhí)行每一個(gè)新的sql語句前,上一次執(zhí)行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、如果發(fā)生異常,那么回滾

          cn.rollback();
           

          posted on 2005-03-23 09:38 小力力力 閱讀(331) 評論(0)  編輯  收藏 所屬分類: JAVAORACLE
          主站蜘蛛池模板: 文山县| 凉山| 长顺县| 富阳市| 化德县| 嘉义县| 清远市| 巴彦淖尔市| 宣城市| 荣昌县| 河池市| 同德县| 盘锦市| 凤凰县| 长顺县| 东莞市| 济南市| 濮阳县| 砀山县| 稷山县| 刚察县| 建水县| 凤冈县| 灌南县| 南投市| 南康市| 宽城| 五华县| 明水县| 宁强县| 玉环县| 宜兰县| 滨州市| 印江| 潜山县| 林州市| 黄梅县| 韩城市| 镇远县| 峨眉山市| 扎鲁特旗|