<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 :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理

    自用小框架:DB工廠

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

    版本升級
    09-21 DyanDBUtils 動態面向對象數據庫 操作

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

    用到技術
    ???? BeanUtil , JDBC元數據(在這我可是好好看了下JDBC,其實他是很強的東西,大家應該好好用用^_^)?
    下載DBFactory.rar
    DBFactroy
    數據是:
    +----+-------+-------------+------------+
    | 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 :?目的是測試前 刪除全部數據
    ????????????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')

    代碼關鍵說明:
    關鍵在BeanUtil 的 DnayBean中 我通過元數據 得到了 這個Bean 屬性.屬性類型,還有表信息放在 getClass();的字符串中
    ???EG:????table=...;key=..,..,..;columns=...,..,;?后在insert ,?delet , update就是(先delete后insert^_^) ?中?解析得到 動態寫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()){
    ?????????????? //元數據中得到 類型做?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?;
    ????}



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


    評論

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

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

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

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

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

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

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

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

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

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

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

    2007-09-20 14:01 by 小天
    真的很不錯耶~~若有加上transaction那會更好~~
    主站蜘蛛池模板: 亚洲欧美自偷自拍另类视| 亚洲成人免费网站| 男女啪啪免费体验区| 四虎影院永久免费观看| 成人亚洲国产va天堂| 毛片a级毛片免费观看免下载 | 免费夜色污私人影院网站电影| 国产精品嫩草影院免费| 国产成人亚洲精品91专区高清 | 日韩精品免费电影| 亚洲乱码无人区卡1卡2卡3| 免费理论片51人人看电影| 亚洲欧洲精品成人久久曰| 免费国产综合视频在线看| 亚洲精品视频免费| 亚洲AV永久精品爱情岛论坛| 一级毛片在线免费看| 学生妹亚洲一区二区| 免费人妻无码不卡中文字幕18禁| 九九免费观看全部免费视频| 久久99国产亚洲高清观看首页| 中国人xxxxx69免费视频| 亚洲中文字幕久久无码| 亚洲AⅤ永久无码精品AA| a级片免费观看视频| 亚洲成人福利在线观看| 国产精品无码素人福利免费| 伊人久久大香线蕉免费视频| 337p日本欧洲亚洲大胆艺术| 午夜老司机免费视频| 久久最新免费视频| 亚洲第一成年网站大全亚洲| 国产精品成人四虎免费视频| 在线人成免费视频69国产| 亚洲精品免费网站| 亚洲精品视频免费观看| 最近2019中文字幕免费大全5| 四虎亚洲精品高清在线观看| 国产亚洲成人在线播放va| 日韩中文字幕精品免费一区| fc2免费人成为视频|