關於資料庫操作多個操作組合的處理
在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資料庫
- 關於資料庫事務併發的理解和處理資料庫
- 關於一類資料處理
- .NET關於資料庫操作的類-囊括所有的操作資料庫
- 關於SQL Serve資料庫r帳號被禁用的處理方法SQL資料庫
- 組合模式-統一的處理個別物件與組合物件模式物件
- 關於 Eloquent ORM 對資料處理的思考ORM
- [python] 基於Tablib庫處理表格資料Python
- [20210722]資料庫異常關閉的處理.txt資料庫
- 快手關於海量模型資料處理的實踐模型
- 資料清洗處理-常用操作
- Springboot2.x整合同時操作多個Redis庫Spring BootRedis
- 關於 groupBy 分組查詢的分頁處理
- [影像處理] 基於CleanVision庫清洗影像資料集
- 一個簡單易用的資料庫壞塊處理方案資料庫
- 關於丟失表空間資料檔案的處理方式
- 關於SqlServer資料表操作SQLServer
- 資料處理之欄位合併
- Polars提供Javascript的資料處理庫 - levelupJavaScript
- JavaScript 資料處理 - 運算元組JavaScript
- MSSQL系列 (一):資料庫的相關操作SQL資料庫
- 3.3.1 關於關閉資料庫資料庫
- 關於流資料上的事務操作
- pandas 資料處理 一些常用操作
- 關於Python中的日期處理Python
- MyBatis SQL資料庫xml處理小於號與大於號正確的格式MyBatisSQL資料庫XML
- PHP 結合 MySQL 千萬級資料處理PHPMySql
- 響應式關聯式資料庫處理R2DBC資料庫
- 【解決方案】基於資料庫驅動的自定義 TypeHandler 處理器資料庫
- Scapy 2.4.0 釋出,基於 Python 的互動式資料包處理庫Python
- 2.5.1 關於建立資料庫的子句資料庫
- 關於資料庫鎖的總結資料庫
- 一個關於風險和投資組合的內部知識分享文件
- 2.1 關於建立資料庫資料庫
- 操作sqlserver資料庫常用的三個方法SQLServer資料庫
- FastAPI(44)- 操作關係型資料庫ASTAPI資料庫
- mysqlclient操作MySQL關係型資料庫MySqlclient資料庫
- SQLALchemy操作MySQL關係型資料庫MySql資料庫
- QT繪圖模組與資料庫的結合QT繪圖資料庫