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

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

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

    posts - 165, comments - 198, trackbacks - 0, articles - 1
      BlogJava :: 首頁 :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理

    自用小框架:DB工廠

    Posted on 2007-09-19 11:41 G_G 閱讀(1497) 評論(6)  編輯  收藏 所屬分類: InspirationJDBC
    BUG 修改 :
    09-20?? 因為 Oracle??取元數(shù)據(jù)的字符串需要大寫 至修改并下載更新
    測試使用表
    ??????ID?????????????????????????? SN?? STATIONNAME????????? SPELL????? DEPOTID?
    ??????-------------- ---- -------------------- ---------- ------- ------------------
    ??????08050000390689??? 3???? 永安???????????????????????????? ?ya??????????????? ....

    版本升級
    09-21 DyanDBUtils 動態(tài)面向?qū)ο髷?shù)據(jù)庫 操作

    由于 hibernate 還要table影射成class 這好處和壞處只有我們程序員知道了
    ??????? 只要修改數(shù)據(jù)庫就大量影射附加工作要做 ,有時影射還有BUG弄的我們@#$%!.....(哈hibernate我是小鳥^_^),我----不要----影射 , 沒有他們數(shù)據(jù)庫就又回到j(luò)dbc.本人比較喜歡偷懶 哈哈 自己來個小框架吧( 就300來行的代碼有興趣的看看哦 )!!!?

    用到技術(shù)
    ???? BeanUtil , JDBC元數(shù)據(jù)(在這我可是好好看了下JDBC,其實他是很強的東西,大家應(yīng)該好好用用^_^)?
    下載DBFactory.rar
    DBFactroy
    數(shù)據(jù)是:
    +----+-------+-------------+------------+
    | id | title | description | buydate??? |
    +----+-------+-------------+------------+
    |? 6 | tt??? | asdgwgw???? | 1990-12-02 |
    +----+-------+-------------+------------+


    先看看測試吧

    public?class?testNotKonw?extends?TestCase?{

    ????
    protected?void?setUp()?throws?Exception?{
    ?????? //運行 sql 可見
    ????????DBFactory.getTools().setIsShowSql(DBFactory.SHOW);
    ????????
    super.setUp();
    ????}
    ????
    public?void?testDelete()throws?Exception{
    ?????????// select 出來 就的 List 中 DynaBean?: id , title?.....? 類型 , 和值都有了
    ????????
    for(Iterator?it?=?DBFactory.getTools().select("select?*?from?books").iterator();it.hasNext();){
    ????????????// 那就是delete :?目的是測試前 刪除全部數(shù)據(jù)
    ????????????DBFactory.getTools().delete(it.next());
    ????????}
    ????}
    ????
    ??????
    public?void?testInsert()throws?Exception{
    ??????? // insert 要先new出來個 table->bean??再?添屬性 ?
    ????????Object?obj?
    =?DBFactory.getTools().getDynaTableClass("books").newInstance();
    ????????BeanUtils.setProperty(obj,
    "id","6");
    ????????BeanUtils.setProperty(obj,
    "title","tt");
    ????????BeanUtils.setProperty(obj,
    "description","asdgwgw");
    ????????BeanUtils.setProperty(obj,
    "buydate",new?Date());
    ?????? //這幾是 insert 了 (簡單吧)
    ????????DBFactory.getTools().insert(obj);
    ????}
    ????
    ????
    //?update
    ????public?void?testUpdate()throws?Exception{
    ????????
    for(Iterator?it?=?DBFactory.getTools().select("select?*?from?books").iterator();it.hasNext();){
    ????????????Object?obj?
    =?it.next();
    ????????????BeanUtils.setProperty(obj,
    "buydate",new?Date(90,11,2));
    ????????????DBFactory.getTools().update(obj);
    ????????}
    ????}
    }


    控制臺輸出
    //testDelete
    delete from books where 1=1? and id=6
    //testInsert
    insert into books(id,title,description,buydate) values( 6,'tt','asdgwgw','2007-09-19')
    //testUpdate
    delete from books where 1=1? and id=6
    insert into books(id,title,description,buydate) values( 6,'tt','asdgwgw','1990-12-02')

    代碼關(guān)鍵說明:
    關(guān)鍵在BeanUtil 的 DnayBean中 我通過元數(shù)據(jù) 得到了 這個Bean 屬性.屬性類型,還有表信息放在 getClass();的字符串中
    ???EG:????table=...;key=..,..,..;columns=...,..,;?后在insert ,?delet , update就是(先delete后insert^_^) ?中?解析得到 動態(tài)寫sql語句?
    ?????????更舉 DnayBean中屬性類型看看 Bean value 是否要加 ' value?' 還是直接 value 到sql 中

    ????public??BasicDynaClass?getDynaTableClass(String?table){
    ????????Connection?conn?
    =?getConn()?;
    ????????List?props?
    =?new?ArrayList();
    ????????DatabaseMetaData?dm?
    =?null?;
    ????????BasicDynaClass?dynaClass?
    =?null?;
    ????????
    try?{????
    ????????????dm?
    =?conn.getMetaData();
    ????????????ResultSet?coulumns?
    =?dm.getColumns(null,null,table,null);
    ????????????
    while(coulumns.next()){
    ?????????????? //元數(shù)據(jù)中得到 類型做?DynaBean 屬性?? coulumns.getInt("DATA_TYPE")? 是? java.sql.Types.XXXXX
    ????????????????props.add(
    new?DynaProperty(?coulumns.getString("COLUMN_NAME"),getStrClass(coulumns.getInt("DATA_TYPE")))?);
    ????????????}
    ????????????
    //?all?:?table
    ????????????
    //delete?:?column_name?column_value
    ????????????
    //insert?:?column_name
    ????????????StringBuffer?sb?=?new?StringBuffer();
    ????????????sb.append(
    "table=").append(table).append(";");
    ????????????
    ????????????sb.append(
    "keys=");
    ????????????????ResultSet?keys?
    =?dm.getPrimaryKeys(null,null,table);
    ????????????????
    while(keys.next()){
    ????????????????????sb.append(?keys.getString(
    "column_name")).append(",");
    ????????????????}
    ????????????????sb.replace(sb.length()
    -1,sb.length(),";");
    ????????????
    ????????????sb.append(
    "columns=");????
    ????????????????ResultSet?couls?
    =?dm.getColumns(null,null,table,null);
    ????????????????
    while(couls.next()){
    ????????????????????sb.append(?couls.getString(
    "column_name")).append(",");
    ????????????????}
    ????????????????sb.replace(sb.length()
    -1,sb.length(),";");
    ????????????????
    ??????????? //為 Class name? <- sb.toString()
    ????????????dynaClass?
    =?new?BasicDynaClass(sb.toString()?,?null,?
    ????????????????????(DynaProperty[])props.toArray(
    new?DynaProperty[]{})?);
    ????????}?
    catch?(Exception?e)?{e.printStackTrace();}
    ????????
    finally{
    ????????????
    try?{
    ????????????????conn.close()?;
    ????????????}?
    catch?(SQLException?e)?{e.printStackTrace();}
    ????????}
    ????????
    return?dynaClass?;
    ????}

    insert , delete 差不多 就來insert

    ????public?boolean?insert(Object?obj){
    ????????String?sqlstrat?
    =?"insert?into?";
    ????????String?sqldo?
    =?"?values(?";
    ????????String?sqlend?
    =?")";
    ????????String?sql?
    =?"";
    ????????
    boolean?od?=?false?;
    ????????
    ????????Connection?conn?
    =?getConn()?;
    ????????Statement?sta?
    =?null?;
    ????????
    try?{
    ???????????? //解析getDynaClass().getName()? 得到 table
    ????????????sqlstrat?
    +=?getTableConfig(obj,"table")[0]+"("?;
    ????????????
    ???????????? //解析getDynaClass().getName()? 得到?columns
    ????????????String[]?cols?
    =?getTableConfig(obj,"columns");
    ????????????
    for(int?i=0;i<cols.length;i++){
    ????????????????sqlstrat?
    +=?cols[i]??+",";
    ????????????????sqldo?
    +=?getSqlAtt(obj,cols[i]?)+",";
    ????????????}
    ????????????sql?
    =?sqlstrat.substring(0,sqlstrat.length()-1)+")"+sqldo.substring(0,sqldo.length()-1)+sqlend;
    ????????????sta?
    =?conn.createStatement();
    ????????????
    if(?sta.executeUpdate(sql)>0){od?=?true;};
    ????????}?
    catch?(Exception?e)?{e.printStackTrace();}
    ????????
    finally{
    ????????????
    try?{
    ????????????????
    if(?isShowSql==SHOW?)?{System.out.println();System.out.println(sql);}
    ????????????????conn.close();
    ????????????}?
    catch?(SQLException?e)?{e.printStackTrace();}
    ????????}
    ????????
    return?od?;
    ????}



    小結(jié):
    當(dāng)然表連和多表 是沒問題的
    但在多表 delete , update 就還沒有完成 (蠻難的 5555? 還有 沒時間)
    單表的 delete update ,select,insert 都完成了 我會努力的
    大家要是認(rèn)為還可以 幫忙頂貼 哦 我會都都完善哦


    評論

    # re: 自用小框架:DB工廠  回復(fù)  更多評論   

    2007-09-19 11:59 by 千里冰封
    哈哈,支持一下.

    # re: 自用小框架:DB工廠  回復(fù)  更多評論   

    2007-09-19 12:19 by G_G
    千里冰封 謝謝 ^_^

    # re: 自用小框架:DB工廠  回復(fù)  更多評論   

    2007-09-19 12:43 by Artkai
    沒有考慮下事務(wù)??

    # re: 自用小框架:DB工廠  回復(fù)  更多評論   

    2007-09-19 13:30 by G_G
    還沒加 但后面有時間會 加上 的

    # re: 自用小框架:DB工廠[未登錄]  回復(fù)  更多評論   

    2007-09-19 19:01 by unmi
    不錯,考慮配置的緩存,預(yù)編譯語句的緩存,數(shù)據(jù)記錄的緩存機制,不過所有的加上去就有得完了。

    # re: 自用小框架:DB工廠  回復(fù)  更多評論   

    2007-09-20 14:01 by 小天
    真的很不錯耶~~若有加上transaction那會更好~~
    主站蜘蛛池模板: 亚洲国产精品一区二区第一页| gogo免费在线观看| 97在线免费观看视频| 国产日韩成人亚洲丁香婷婷| 亚洲美女视频免费| 国产啪精品视频网站免费尤物| 无码免费午夜福利片在线 | 四虎成人精品一区二区免费网站| 亚洲AV无码一区二三区| 亚洲视频免费一区| 6080午夜一级毛片免费看 | 亚洲一区二区影视| 一级女人18片毛片免费视频| 野花高清在线观看免费完整版中文| 亚洲日本视频在线观看| 99免费在线视频| 亚洲国产精品无码一线岛国| 中文字幕日本人妻久久久免费| 亚洲av无码不卡一区二区三区| 国产成人亚洲精品播放器下载| 免费国产黄网站在线观看可以下载| 亚洲国产91精品无码专区| 一区二区三区在线免费| 青青草原亚洲视频| 国产综合成人亚洲区| 亚洲成A人片在线观看中文| 国产精品免费久久久久影院| 亚洲精品高清国产一线久久| 一级黄色片免费观看| 亚洲中文字幕日产乱码高清app| 国产偷伦视频免费观看| 亚洲一级特黄大片在线观看| 国产精品亚洲专区一区| 亚洲精品视频在线看| 看Aⅴ免费毛片手机播放| 国产精品亚洲综合专区片高清久久久| 男女拍拍拍免费视频网站| 亚洲精品无码专区2| 免费人成激情视频在线观看冫| 久久亚洲AV成人无码| 亚洲综合激情另类小说区|