java直連數據庫小結

          Posted on 2006-07-06 18:15 負人博客 閱讀(1253) 評論(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();


          只有注冊用戶登錄后才能發表評論。


          網站導航:
           

          posts - 26, comments - 5, trackbacks - 0, articles - 8

          Copyright © 負人博客

          主站蜘蛛池模板: 平山县| 大埔县| 厦门市| 甘肃省| 汝州市| 鄂托克旗| 杭锦旗| 西林县| 灵武市| 宝坻区| 邹城市| 姚安县| 民和| 池州市| 新田县| 湖口县| 邹城市| 兴安盟| 苗栗市| 大方县| 贵阳市| 周宁县| 彰化市| 丹棱县| 克东县| 丽水市| 乌拉特后旗| 安西县| 武陟县| 新巴尔虎左旗| 浦城县| 湖南省| 宁陕县| 朔州市| 金寨县| 东台市| 华坪县| 拉萨市| 瓮安县| 牟定县| 兴文县|