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

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

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

    MDA/MDD/TDD/DDD/DDDDDDD
    posts - 536, comments - 111, trackbacks - 0, articles - 0
      BlogJava :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理

    spring jdbc筆記

    Posted on 2009-12-23 17:29 leekiang 閱讀(801) 評論(0)  編輯  收藏 所屬分類: springjdbc、事務、并發
    SQL標準允許基于一個帶參數列表的表達式進行查詢。一個典型的例子可能像這樣:"select * from T_ACTOR where id in (1, 2, 3)"。 不過這種參數列表的方式并不能直接被JDBC標準所支持 - 因為并不存在這種聲明一個列表參數作為占位符的方式。 你不得不為此寫多個占位符來表示多個參數,或者當你知道占位符的數量時,你可以動態構建SQL字符串。 NamedParameterJdbcTemplate和SimpleJdbcTemplate中所提供的命名參數的特性,采用的是后面一種做法。 當你傳入參數時,你需要傳入一個java.util.List類型,支持基本類型。而這個list將會在SQL執行時替換占位符并傳入參數。
    在使用IN語句時,當你傳入大批量的值時要小心,JDBC標準并不確保超過100個元素在IN語句中。 有不少數據庫可以超出這個值的限制,但是不同的數據庫會有不同的數量限制,比如Oracle的限制數量是1000個。
    除了基本類型之外,你還可以創建一個java.util.List的對象數組,這可以讓你支持在IN表達式中編寫多重表達式,例如"select * from T_ACTOR where (id, last_name) in ((1, 'Johnson'), (2, 'Harrop'))". 當然,這樣做的前提是數據庫底層的語法支持。

    http://www.javaeye.com/problems/6124
    select count(*) num from lottery_term where term_issuenum in (?) and term_lotteryid = ?
    改成getJdbcTemplate().queryForInt(sql,new Object[]{new String[]{"2008326","2008325","2008324"},103});
    List list=new ArrayList();
    list.add("****");
    getJdbcTemplate().queryForInt(sql,new Object[]{list,103});

    select count(*) from info_document where category_id in (:category_id_list);
    Map<String,Object> parm = new HashMap<String,Object>();
    parm.put("category_id_list", idList);


    ? public List getAllStu() {

    ?????? String sql="select s_id as sid,s_name as sname,s_sex as ssex,s_brith as sbrith from stu";

    ?????? List list=this.getJdbcTemplate().query(sql,new BeanPropertyRowMapper(Stu.class));

    ?????? return list;

    ??? }


    關于execute和update方法之間的區別,update方法返回的是受影響的記錄數目的 一個計數,并且如果傳入參數的話,使用的是java.sql.PreparedStatement,而execute方法總是使用 java.sql.Statement,不接受參數,而且他不返回受影響記錄的計數,更適合于創建和丟棄表的語句,而update方法更適合于插入,更新 和刪除操作,這也是我們在使用時需要注意的。



    Connection conn=DataSourceUtils.getConnection(getJdbcTempldate().getDataSource());

    conn=getJdbcTemplate().getNativeJdbcExtractor().getNativeConnection(conn);

    OracleConnection oconn=(OracleConnection)conn;

    通過DataSourceUtils獲取當前線程綁定的數據連接,為了使用線程上下文相關的事務,這樣寫是正確的寫法,如果直接從DataSource獲取連接,得到的是和當前線程上下文無關的新的數據庫連接實例。

    http://www.javaeye.com/topic/49932?page=2

    http://www.javaeye.com/problems/15846

    http://www.javaeye.com/topic/87034

    http://www.javaeye.com/topic/508799

    http://ttitfly.javaeye.com/blog/151560


    jdbcTemplate的方式里如果帶上int[] argTypes顯示指定每個占位符所對應的字段數據類型,可以保證類型安全,當參數值為null時,提供了更好的支持。

    -----------------------

    上面這句話如何理解?


    后在http://javazoo.bokee.com/viewdiary.15850865.html找到原因了

    今天在調試程序的時候,在后臺業務邏輯類中利用JdbcTemplate進行數據同步操作時,發現當
    執行jdbcTemplate.update(帶?的SQL語句,new Object[]{tmp.getName( ),tmp.getNo( ),tmp.getSpeciality( ),tmp.getMounterofficer( ),tmp.getDesigner( ),tmp.getProductivity( ),tmp.getState( ))
    這種操作時,如果后面參數中有值為null時,后臺會報異常,細想下也是,如果是null,那就要執行jdbc的setNull(Spring底層還是用JDBC做的)方法了,但是setNull方法要知道具體的數據庫字段的類型.如setNull(1,Types.VARCHAR).而在上面的方法沒有體現.
    終于體會到update方法中第三個參數new int[]的作用了.!
    spring還是很偉大的.


    如果字段名和屬性名是嚴格對應的,那么就可以不用自己寫RowMapper了,使用BeanPropertyRowMapper:

    getJdbcTemplate().query(sql,?new?BeanPropertyRowMapper(User.class));??

    類的屬性字段名稱要數據庫中的字段名稱一樣或者數據庫字段名為s_id類的名稱為SId,
    如果你沒有遵守這個規范則可以在select語句后面給數據庫字段名取別名


    //綁定參數時,日期類型的寫法,未經過驗證

    ??? public void updStu(Stu stu) {
    String sql = "update stu set s_name=?,s_sex=?,s_brith=? where s_id=?";
    Object[] obj = new Object[] { stu.getSname(), stu.getSsex(),new java.sql.Date(stu.getSbrith().getTime()), stu.getSid() };
    ????? getJdbcTemplate().update(sql, obj, new int[] { Types.VARCHAR, Types.VARCHAR,Types.DATE, Types.INTEGER });
    ??? }



    ConnectionCallback的用法,使用完要手動關閉連接嗎?

    spring的AbstractRoutingDataSource,可以多態切換數據庫?


    事務抽象層http://blog.csdn.net/congqian1120/archive/2008/01/16/2046311.aspx




    http://www.oracle.com/technology/global/cn/pub/articles/marx_spring.html
    主站蜘蛛池模板: fc2成年免费共享视频18| 6080午夜一级毛片免费看| 亚洲AV无码一区东京热| 9420免费高清在线视频| 四虎亚洲精品高清在线观看| 亚洲av午夜成人片精品电影| 水蜜桃视频在线观看免费播放高清| 亚洲国产精品综合久久久 | 亚洲人成无码久久电影网站| 日韩免费的视频在线观看香蕉| 亚洲天堂男人影院| 亚洲免费人成在线视频观看| 免费国产作爱视频网站| 国产高潮久久免费观看| 色噜噜亚洲男人的天堂| 九月丁香婷婷亚洲综合色| 成人免费视频一区二区三区| 中国一级毛片免费看视频| 亚洲天然素人无码专区| 亚洲国产第一站精品蜜芽| 尤物永久免费AV无码网站| 99久久99热精品免费观看国产 | 无码色偷偷亚洲国内自拍| 亚洲五月六月丁香激情| 亚洲国产午夜中文字幕精品黄网站| 久久国产色AV免费观看| 精精国产www视频在线观看免费| 亚洲情A成黄在线观看动漫软件| 人人狠狠综合久久亚洲婷婷| 免费一级毛片一级毛片aa| 在线精品一卡乱码免费| 日韩视频在线观看免费| 农村寡妇一级毛片免费看视频| 亚洲中字慕日产2021| 亚洲成a人片在线观看无码| 亚洲AⅤ永久无码精品AA | 亚洲成AV人片在线观看ww| 免费v片在线观看品善网| 四虎免费在线观看| 日本在线高清免费爱做网站| 性无码免费一区二区三区在线|