關於資料庫操作多個操作組合的處理
在mysql資料庫裡建了兩個列數相同的表table1(欄位為id,xuehao,name,sex).table2(欄位為id,age,jiguan,dept),想把兩個表合在一起顯示在jsp網頁上,用了select xuehao,name,sex,age,jiguan,dept from table1 join table2 on table1.id=table2.id;
問題是我現在想給這兩個關聯表同時新增一行資料,
在mysql中我用命令:insert into table1 values();insert into table2 values();select xuehao,name,sex,age,jiguan,dept from table1 join table2 on table1.id=table2.id;可以達到我想要的效果
我的想法:
嗯,先說說為什麼要怎麼做吧,感覺從事務層上來解決比較合適。
具體實現有很多方法,
一個實在資料層裡面,可以做一個儲存過程,
一個實在事務層裡面,把這個把著三個sql操作寫成一個方法裡面
根據返回值true和false來決定。
大概寫寫,沒有除錯過
1、儲存過程:
DROP PROCEDURE IF EXISTS insertandread
CREATE PROCEDURE insertandread (IN xuehao INT,
in name varchar(40),
........//省略
........//省略
OUT xuehao int,out name varchar(32),...)//省略
BEGIN
insert into table1 values(xuehao,name);
insert into table2 values(...);//引數
select xuehao,name,sex,age,jiguan,dept from table1 join table2 on table1.id=table2.id;
END;
Java輸入和讀取返回值,大概是下面這樣
Class.forName(driver);
Connection conn = DriverManager.getConnection(url, user, pwd);
cs = conn.prepareCall("{ call insertandread(?,?,?) }");//問號表示引數
CallableStatement cs.setString(1, "10");
...........//省略,這是輸入值定義
cs.registerOutParameter(2, Types.VARCHAR);//定義返回值,型別和ID
............
cs.execute();
String name = cs.getString(2);//獲得返回值。
這個裡面設計的引數比較多,要注意除錯,基本就是這個樣子,
參考http://hi.baidu.com/icewee/blog/item/dfd9b96f87edfedc81cb4a59.html
可以學學習。
MySql以前看過,現在也算複習下,多多指教
我再想想事務層應該怎麼實現比較還好
事務層的實現,
大概寫寫,
public ResultSet insertandRead(String[] parm1,String[] parm2)
//這裡面偷個懶,全部用String
{
ResultSet rs=null;
bool insert1OK=false;
bool insert2OK=false;
con.setAutoCommit(false);//禁止自動提交,
Savepoint sp = con3.setSavepoint();//設定回滾點
.......
try{
PreparedStatement inserttable1 = con.prepareStatement("insert into table1 values(?,?,?,...)");
inserttable1.setString(1, parm1[0]);
inserttable1.execute();
con.commit();//提交
}catch(Exception ex) {
ex.printStackTrace();
insert1OK=true;
try {
conn.rollback(); //操作不成功則回滾
}catch(Exception e) {
e.printStackTrace();
}
對table2新增也是一樣,如果不成功就回滾是開始。成功把insert1OK設定為OK。
if(insert1OK==true&& insert2OK==true){
....//執行查詢,返回ResultSet
}
return rs;
}
感覺這個程式碼不是很好,太容易出問題了,而和資料庫連線太緊密,
還是應該使用Hibernate這樣的持久化層來處理。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/22259926/viewspace-660573/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- django操作多資料庫Django資料庫
- 一個關於資料庫閃回區問題的處理資料庫
- 關於批處理(bat)資料庫備份BAT資料庫
- 關於java處理不同資料庫字符集的資料同步Java資料庫
- 組合模式-統一的處理個別物件與組合物件模式物件
- 這個處理器的組合語言:組合語言
- 關於資料庫事務併發的理解和處理資料庫
- 關於一類資料處理
- 關於裸裝置資料的處理
- 基於ORM思想的資料庫處理ORM資料庫
- 關於 Eloquent ORM 對資料處理的思考ORM
- .NET關於資料庫操作的類-囊括所有的操作資料庫
- 關於SQL Serve資料庫r帳號被禁用的處理方法SQL資料庫
- 關於資料庫操作的封裝程式碼資料庫封裝
- 關於大資料量的處理大資料
- 快手關於海量模型資料處理的實踐模型
- 關於 groupBy 分組查詢的分頁處理
- 關於組合模式的疑惑模式
- 資料清洗處理-常用操作
- 關於海量資料處理分析的經驗總結
- Oracle資料庫關於錶行連線和行遷移處理方案Oracle資料庫
- 資料庫有關操作資料庫
- 6個用於大資料處理分析的最好工具大資料
- 2 關於資料倉儲維度資料處理的方法探究系列——無變化維度處理
- [python] 基於Tablib庫處理表格資料Python
- oracle關閉資料庫時沒反應的處理案例Oracle資料庫
- 有關分散式資料庫事務處理的問題分散式資料庫
- JavaScript 資料處理 - 運算元組JavaScript
- 資料庫壞塊處理資料庫
- zabbix資料庫日常處理資料庫
- 關於資料庫批次查詢的一個想法資料庫
- 關於Oracle 資料庫備份的幾個概念Oracle資料庫
- 資料處理之欄位合併
- 關於SqlServer資料表操作SQLServer
- Springboot2.x整合同時操作多個Redis庫Spring BootRedis
- 關於SAP生產訂單操作中的問題處理。
- 處理MySQL資料庫出現大量Locked的一個案例MySql資料庫
- 一個簡單易用的資料庫壞塊處理方案資料庫