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.rarDBFactroy
數據是:+----+-------+-------------+------------+
| 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 都完成了 我會努力的
大家要是認為還可以 幫忙頂貼 哦 我會都都完善哦