国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

Java基于數據源的數據庫訪問

2019-11-15 01:11:59
字體:
來源:轉載
供稿:網友
java基于數據源的數據庫訪問 Posted on 2015-08-19 19:48 一尾金魚 閱讀(...) 評論(...) 編輯 收藏? 概述

  最早接觸的Java訪問數據庫,是通過jdbc接口。后來工作之后,一般是在服務器(如weblogic)配置數據源,通過JNDI使用數據源;最近需要在程序中動態構造數據源,查了些資料,備錄于此。

? 體系結構

我暫時沒有系統的學習過UML,對各種圖的規范畫法不了解。所以上面的圖僅供參考,不保證其合乎規范。

對于上圖,需要說明:

  1. 組件之間的依賴關系,從上至下;即上面的組件依賴于下面的。
  2. sPRing-jdbc和commons-dbcp分別是對應jar包的名稱;忽略了版本號。

上述5個組件的作用分別如下:

組件名稱組件作用
數據庫驅動包各數據庫廠商提供的jdbc實現;其實數據源也是基于jdbc技術的
properties配置文件jdbc鏈接的相關配置,和數據源的相關配置
commons-dbcp提供數據源的實現,依賴與配置文件和驅動包
spring-jdbc主要是使用其中的JdbcTemplate工具類,而它依賴于數據源;JdbcTemplate提供了很多實用的方法,具體請參考spring的api
業務代碼基于JdbcTemplate進行數據庫交互

? 組件內容
  1. 配置文件在這里,我們是通過org.apache.commons.dbcp.BasicDataSourceFactory.createDataSource(java.util.Properties prop)來創建數據源實例,但是要求Properties的屬性名稱要和BasicDataSourceFactory聲明的Field的名稱相一致。除了jdbc鏈接的相關配置之外,其他的應該(猜測)都有其默認值,不是必須要配置的。配置文件的內容如下:
    driverClassName=Oracle.jdbc.driver.OracleDriverurl=jdbc:oracle:thin:@dzzx-db1.hnisi.com.cn:1523/zxkfkusername=***passWord=***# if you want to change the following config, make sure you konw their meanings, otherwise you should not to change theminitialSize=10maxIdle=3minIdle=2maxActive=10maxWait=10000
    各屬性的名稱,可以參考BasicDataSourceFactory源代碼,這里僅對我用到的幾個進行介紹:
    • driverClassName驅動類名稱
    • url數據庫連接url,不同數據庫的寫法有所不同
    • username數據庫用戶名
    • password數據庫用戶密碼
    • initialSize數據源連接池初始連接數
    • maxIdle連接池中允許空閑連接的最大數
    • minIdle連接池中允許空閑連接的最小數
    • maxActive連接池中允許的活動連接的最大數
    • maxWait連接的最長等待時間,單位為毫秒

    在上述配置項中,前四個是必要的jdbc連接配置,在jdbc編程中經常遇到;后面五個是數據源連接池相關的配置,根據其介紹,我們可以用一個猜想的場景對其進行不嚴謹的解釋:

    按照上述配置,初始情況下會有10個數據庫連接(initialSize)在初始情況下一般不會有數據庫訪問,即10連接都是空閑的,所以連接會被釋放,連接數將減少到3(maxIdle) -- 所以配置時initialSize=maxIdle較好等到有連接被請求使用了,此時空閑連接數將減少,等少于2(minIdle)時,會創建新的連接如果業務代碼請求連接,10秒(maxWait)還沒有獲取到,可能會拋出異常業務代碼使用完,釋放連接之后,連接池中空閑的連接數會增加,所以將會減少連接,保持maxIdle的限制

    再次聲明,上述的模式只是猜測,沒有經過測試。

  2. 創建數據源我們通過java.io.InputStream java.lang.Class.getResourceAsStream(String name)來加載資源文件,獲得InputStrInputStreameam實例;通過void java.util.Properties.load(InputStream inStream)來加載屬性配置到Properties實例;通過DataSource org.apache.commons.dbcp.BasicDataSourceFactory.createDataSource(Properties prop)來獲取數據源實例。
    Properties prop = new Properties();InputStream is = SendUtil.class.getResourceAsStream("/cn/sinobest/jzpt/jgbm/common/message/sendMessage.properties");prop.load(is);DataSource ds = BasicDataSourceFactory.createDataSource(prop);
    當然,也可以不用工廠模式,以普通的方式創建數據源:
    BasicDataSource bds = new BasicDataSource();bds.setDriverClassName("oracle.jdbc.driver.OracleDriver");bds.setUrl("jdbc:oracle:thin:@dzzx-db1.hnisi.com.cn:1523/zxkfk");bds.setUsername("***");bds.setPassword("***");bds.setInitialSize(10);bds.setMaxIdle(3);bds.setMinIdle(2);bds.setMaxActive(10);bds.setMaxWait(10 * 1000);
  3. 訪問數據庫我比較喜歡使用org.springframework.jdbc.core.JdbcTemplate這個工具類,他對增刪改查都有封裝,支持批處理;沒有特殊的語法,寫過jdbc代碼的可以很容易過渡。我們只需要對其提供數據源實例,由他負責數據庫連接的獲取和釋放,我們只管提供sql語句、參數和參數類型,其他的都不用我們操心。我的使用樣例如下:
    String sql = "insert into S_SMS_WAITING_LIST (systemid,receiver,msg_content,senttime) values(?, ?, ?, ?)"String systemid="1";String phone="159********";String content="您有一條短信";String currtime=new Timestamp(System.currentTimeMillis());Object[] args = {systemid, phone, content, currtime};int[] argTypes = {Types.VARCHAR, Types.VARCHAR, Types.VARCHAR, Types.TIMESTAMP};JdbcTemplate jdbcTem = new JdbcTemplate(ds); // 上一步創建的數據源jdbcTem.update(sql, args, argTypes);

    更多JdbcTemplate的方法,請查詢相關API。

2015-08-19 19:42:02


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 电白县| 嵊州市| 松原市| 林州市| 北安市| 威海市| 灌南县| 泽普县| 伊宁县| 丰都县| 城固县| 长沙市| 伊宁市| 内江市| 正阳县| 肥城市| 高青县| 望江县| 汾西县| 金秀| 饶平县| 花垣县| 枣阳市| 怀仁县| 渝中区| 岱山县| 松滋市| 和静县| 德令哈市| 福清市| 太康县| 大渡口区| 镇赉县| 历史| 报价| 崇州市| 温泉县| 崇礼县| 萝北县| 上高县| 荔波县|