<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    內蒙古java團隊

    j2se,j2ee開發組
    posts - 139, comments - 212, trackbacks - 0, articles - 65
      BlogJava :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理

    java與數據庫的所有連接方式

    Posted on 2006-12-18 08:55 帥子 閱讀(446) 評論(0)  編輯  收藏 所屬分類: J2EE技術專區
    所有的連接方式?
    ????首先選擇合適自己數據庫的驅動程序,這里提到的都是常用驅動。
    連接Oracle數據庫
    ??獲得Oracle的驅動程序包classes12.jar
    ??把Oracle的驅動程序到\WEB-INF\lib下
    ??Class.forName("oracle.jdbc.driver.OracleDriver").newInstance();
    ??Connection?conn=?DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:數據庫","用戶名","密碼");
    ?
    連接MYSQL數據庫
    ??獲得MySQL的驅動程序包mysql-connector-java-3.0.15-ga-bin(mysqldriver.jar)
    ??拷貝到\WEB-INF\lib下
    ??Class.forName("org.gjt.mm.mysql.Driver").newInstance();
    ??Connection?conn=?DriverManager.getConnection("jdbc:mysql://localhost/testDB","用戶名","密碼"??);
    ?
    連接Sql?2000數據庫
    ??獲得SQL直接的驅動程序包msbase.jar和mssqlserver.jar和msutil.jar
    ??把直?驅動程序包放到\WEB-INF\lib下
    ??Class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver").newInstance();
    ??Connection?conn=?DriverManager.getConnection(????"jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=數據庫"","用戶名","密碼");
    ?
    橋連
    ??Class.forName("sun.jdbc.odbc.JdbcOdbcDriver").newInstance();;
    Connection?con=DriverManager.getConnection("jdbc:odbc:odbc名","用戶名","密碼");
    ?
    JTDS??
    net.sourceforge.jtds.jdbc.Driver
    jdbc:jtds:sqlserver://172.16.3.60:1433/test
    ?
    HIBERNATE
    它的配置連接方式通常有2中,1、hibernate.cfg.xml?靈活性高
    2、hibernate.properties?
    建議使用1配置,這里不在對2進行多的闡述。
    當程序啟動時,首先加載的是hibernate.properties?
    ,如果系統找不到此文件,會根據你程序的配置而執行。
    這里講下常用配置
    Session?session=new?Configuration().configure().buildSessionFactory().openSession();
    如果按上述配置,則程序啟動時候仍然首先找hibernate.properties?,找不到時候就會加載hibernate.cfg.xml
    (權限hibernate.properties>hibernate.cfg.xml)兩個文件都存在時候以hibernate.properties為主。
    ?
    ?
    ?
    ?
    記錄集(不建議使用記錄集操作記錄,涉及到什么時候關閉連接的頭疼問題,常用的如LIST等對象)
    ??1、Statement?stat=con.prepareStatement("select?*?from?Login?where?id=?");
    ???stat.setString(1,textPinNo.getText());
    ??ResultSet?result=stat.executeQuery();
    ??注:("select?*?from?Login?where(?,?,?,?,?)")應該與數據庫對應
    ??2、Statement?stat=con.prepareStatement("select?*?from?Login?where?id="+變量);
    ??ResultSet?result=stat.executeQuery();
    ??如果是非查詢語句,則int?i=stat.executeUpdate();
    (注:驅動后的“.newInstance()”可以不加。聲明、記錄集最基本的是statement、ResultSet還有其他更高級的)
    ?
    ?
    ?
    JDBC學習筆記-----jdbc性能優化(轉)
    jdbc程序的性能主要由兩個因素決定,一是數據庫本身的性質,另一個是與數據庫相對獨立的jdbc應用程序接口(api)的使用.
    這里說的是如何正確使用jdbc編程接口,以獲得更好的性能.
    ??jdbc主要優化有:
    ?????1.選擇正確的jdbc驅動程序
    ?????2.Connention的優化??使用連接池來管理Connection對象
    ?????3.Statement的優化???使用批量更新等
    ?????4.Result的優化??正確的從數據庫中get數據等
    ?????
    ?????(1)選擇正確的jdbc驅動程序:
    ??1?jdbc-odbc?橋
    ????????????2?本地api-部分?java驅動
    ????????????????3?jdbc網路協議-純java驅動
    ????????????????4?jdbc本地協議
    ????????????????最好選擇?jdbc網路協議-純java驅動??效率比較高??但需要第三方軟件的支持?比如corba??weblogic屬于這種類型
    ????
    ?????(2)優化Connection對象:
    ?????????1.設置適當的參數??DriverManager.getConnection(String?url,Properties?props);
    ?????????????????例如:?????Properties?props=new?Properties();
    ??????props.put("user","wuwei");
    ??????props.put("password","wuwei");
    ????????????props.put("defaultRowPrefectch","30");
    ???????????????????????????props.put("dufaultBatchValue","5");
    ???????????????????????????Connection?con=DriverManager.getConnection("jdbc:oracle:thin:@hostsString",props);
    ?????????????對象可以通過設置setDefaultRowPrefetch(int)?和?setDefaultBatchValue(int)?兩個參數類優化連接
    ?
    ?2.使用連接池??可以自己寫一個連接池?這樣程序的靈活性強,便于移植.
    ??????apache項目開發了一套非常通用而表現非常穩定的對象池? http://jakarta.apache.org/commons/pool.htm
    ??????設計了自己的連接池后?在客戶端調用建立對象
    ???????????????????????????public?Object?makeObject()?throws?Exception{
    ????Class.forName("oracle.jdbc.driver.OracalDriver");
    ????return?DriverManager.getConnection("url","username","password");
    ??????}
    ??????????????????銷毀對象時用
    ??????public?void?destroyObject(Object?obj)?throws?Exception{
    ?????????((Connection)obj.close());
    ??????}
    ????????注意幾點?對象池里有沒有回收機制,對象池里有機有容量限制,對象池里有多少個閑置對象(可以釋放)????????
    ??
    ????????3.控制事務的提交??最好手動提交事務,不但可以可以保證數據原子性,而且對新能提高留下余地.
    ???????????????????try{
    ???connection.setAutoCommint(false);
    ????????????????????????//?代碼?用PreparedStatement??性能比Statementh好.
    ?
    ????????????????????????connection.commit();
    ????????????????????????connection.setAutoCommit(true);
    ?????}
    ????????????catch(SQLException?e){
    ???????????????????}
    ???????????????????finally{
    ???//代碼
    ???if(connection!=null){
    ??????connection.close();??
    ???}
    ???????}
    ?
    ?4.適當的選擇事務的隔離級別???TRANSACTION_READ_UNCOMMITED??性能最高
    ?????????????????????????????????????TRANSACTION_READ_COMMITED????快
    ?????????????????????????????????????TRANSACTION_REFEATABLE_READ??中等
    ????????????RANSACTION_SERIALIZABLE??????慢
    ?
    ???(3)Statement?優化
    ??????jdbc3個接口用來處理sql的執行,是Statement?PreparedStatement?CallableStatement
    ??????????提供適當的Statement接口?
    ??????????批量執行sql
    ??????????從數據庫批量獲取數據
    ??????PreparedStatement?比Statement性能要好?主要體現在一個sql語句多次重復執行的情況
    ??????PreparedStatemnt只編譯解析一次而Statement每次編譯一次.
    ??????
    ??????批量修改數據庫???
    ?Statement?提供了方法addBatch(String)和executeBatch()
    ????????調用方法為stmt.addBatch("isnert.....");?stmt.addBatch("update.....")
    ??????????????????stmt.executeBatch();
    ????????也可以用PreparedStatement從而更好的提高性能.
    ????????????????pstmt=conn.preparedStatement("insert?into?test_table(......)?values(....?)");
    ????????????????pstmt.setString(1,"aaa");
    ????????????????pstmt.addBatch();
    ????????????????pstmt.setString(1,"bbb");
    ????????????????pstmt.addBatch();
    ????????????????.....
    ????????????????pstmt.executeBatch();
    ?
    ??????批量地從數據庫中取數據.
    ??????????通過setFetchSize()和getFectchSize()方法來設定和查看這個參數.這個參數對體統的性能影響比較大.
    ??????????這個參數太小會嚴重地降低程序地性能.
    ???Connection?Statement?ResultSet都有這個參數,他們對性能地影響順序是:
    ?????????????ResultSet---------Statement---------Connection
    ??(4)優化ResultSet.
    ?????體現在以下幾個方面
    ????????批量讀取數據.合理設置ResultSet的getFetchSize()和setFetchSize()方法中的參數
    ????????使用正確的get和set方法
    ?????????????使用整數而不是字段名作為參數性能比較高,
    ?????????????例如?setInt(1,100);
    ??????????????????setString(2,"aaaa");
    ???????????????比?setInt("id","100");
    ??????????????????setString("name","aaaa");
    ???????????????性能好
    ????????設置適當的滾動方向.有3個方向FETCH_FORWORD,FETCH_REVERSE?FETCH_UNKNOWN
    ?????????????單向滾動性能比較高.
    ??其他方面的性能優化
    ??????及時顯示的關閉Connection?Statement?ResultSet
    ??????????其中Connection可以用Connetion?Pool處理.
    ??????使用數據庫系統的強大查詢功能去組織數據.這樣程序運行是和數據庫服務的交互次數少,數據庫返回給
    ??????程序的記錄條數少的多,所以性能有很大的提高.
    主站蜘蛛池模板: 99re免费99re在线视频手机版| 亚洲AV无码一区二区三区牲色| 久久久久久久久久免免费精品| 四虎永久成人免费影院域名| 亚洲色无码专区一区| 好先生在线观看免费播放| 亚洲人成综合在线播放| 免费A级毛片无码无遮挡内射| 亚洲伊人tv综合网色| 亚洲美女免费视频| 91亚洲自偷在线观看国产馆| 日韩av无码成人无码免费| 亚洲国产日韩精品| 国产一级高清免费观看| 九九免费精品视频在这里| 亚洲女同成av人片在线观看| 国产猛男猛女超爽免费视频| 久久亚洲AV无码精品色午夜麻豆 | 国产精品午夜免费观看网站| 中文字幕在线亚洲精品| 久久青草91免费观看| 亚洲午夜电影在线观看| 日韩激情无码免费毛片| 未满十八私人高清免费影院| 久久精品国产亚洲综合色| 99久久国产热无码精品免费| 亚洲av无码专区国产不乱码| 亚洲一区日韩高清中文字幕亚洲| 免费毛片在线看不用播放器 | 婷婷亚洲天堂影院| 免费成人在线视频观看| 91嫩草亚洲精品| 亚洲国产免费综合| 84pao国产成视频免费播放| 亚洲综合国产成人丁香五月激情| 亚洲视频一区二区| 97碰公开在线观看免费视频| 美女无遮挡免费视频网站| 亚洲高清视频在线观看| 国产成人高清精品免费软件| 人妻无码一区二区三区免费 |