A. jdbcTemplate 批量更新sql 語句怎麼寫
//應用場景:
如以下SQL :
String sql = "INSERT INTO to_order_return_info VALUES(seq_order_return_info.nextval,?,?,?,?,?,?)";
該語句為向to_order_return_info表中插入新記錄
但如需要N條數據插入 正常的方案為 執行N次插入數據操作
jdbc 支持批量SQL 可以進行同數據批量操作 以及混合數據批量操作
Spring 對jdbc進行了封裝 同樣支持批量操作
以下為同數據(插入到統一個表中的數據) 批量操作:
需要用到batchUpdate();方法
和BatchPreparedStatementSetter介面
實現getBatchSize();以及setValues 方法
getBatchSize();返回批量條數 也就是執行多少次增刪改操作;
setValues(PreparedStatement ps, int i)
該方法會自動通過i遍歷List 取出相應的增刪改數據!
B. jdbc一次批量處理多少條數據
作為一個替代方案,可以試試使用Statement 的批量處理特性看看能否同時執行所有的SQL以提高速度。 存儲過程的最簡單的形式就是包含一系列SQL語句的過程,將這些語句放在一起便於在同一個地方管理也可以提高速度。Statement 類可以包含一系列SQL語句,因此允許在同一個資料庫事務執行所有的那些語句而不是執行對資料庫的一系列調用。 使用批量處理功能涉及下面的兩個方法: · addBatch(String) 方法 · executeBatch方法 如果你正在使用Statement 那麼addBatch 方法可以接受一個通常的SQL語句,或者如果你在使用PreparedStatement ,那麼也可以什麼都不向它增加。executeBatch 方法執行那些SQL語句並返回一個int值的數組,這個數組包含每個語句影響的數據的行數。如果將一個SELECT語句或者其他返回一個ResultSet的SQL語句放入批量處理中就會導致一個SQLException異常。 關於java.sql.Statement 的簡單範例可以是: Statement stmt = conn.createStatement(); stmt.insert(DELETE FROM Users); stmt.insert(INSERT INTO Users VALUES(rod, 37, circle)); stmt.insert(INSERT INTO Users VALUES(jane, 33, triangle)); stmt.insert(INSERT INTO Users VALUES(freddy, 29, square)); int[] counts = stmt.executeBatch(); PreparedStatement 有些不同,它只能處理一部分SQL語法,但是可以有很多參數,因此重寫上面的範例的一部分就可以得到下面的結果: // 注意這里沒有DELETE語句 PreparedStatement stmt = conn.prepareStatement(INSERT INTO Users VALUES(?,?,?));
C. jdbctemplate 批量執行sql怎麼實現的
//應用場景: 如以下SQL : String sql = "INSERT INTO to_order_return_info VALUES(seq_order_return_info.nextval,?,?,?,?,?,?)"; 該語句為向to_order_return_info表中插入新記錄 但如需要N條數據插入 正常的方案為 執行N次插入數據操作 jdbc ...
D. java程序中批量執行sql時為什麼 批量過大時,整體性能降低
java程序中批量執行sql時為什麼 批量過大時,整體性能降低
直接用JDBC發送sql語句的話 Connection不是setAutoCommit(false)這招來批量提交么?
樓主擔心出問題 他正好有Connection rollback()來回滾事務
進入背包成功 玩家錢幣減少失敗 回滾之後進入背包操作也會取消
當事務結束後commit()手動提交 資料庫驅動都已經封裝好了
如果使用框架 比如Hibernate直接把事務操作抽取成Transaction類 操作起來更加方便和安全
E. 我用JAVA編寫了一個批量執行SQL語句的方法,
建表的時候有表確實會報錯,這就看你想怎麼處理了。
你可以不作處理,也就是直接用那個已經存在的表,這時SQL語句可以是這樣的:create table if not exists TABLE_NAME()。。
也可以把已經存在的表刪掉,再執行你的建表語句,這時你可以這樣寫:
drop table TABLE_NAME if exists;然後再
create table TABLE_NAME()。。。
F. java 在Oracle怎麼一次執行多條sql語句,求大神!
批了執行SQL最好的辦法是採用事務機制。具體網路下Java事務,以下是抄來的簡單例子。
publicintdelete(intsID){
dbc=newDataBaseConnection();
Connectioncon=dbc.getConnection();
try{
con.setAutoCommit(false);//更改JDBC事務的默認提交方式
dbc.executeUpdate("deletefrombylawwhereID="+sID);
dbc.executeUpdate("deletefrombylaw_contentwhereID="+sID);
dbc.executeUpdate("deletefrombylaw_affixwherebylawid="+sID);
con.commit();//提交JDBC事務
con.setAutoCommit(true);//恢復JDBC事務的默認提交方式
dbc.close();
return1;
}
catch(Exceptionexc){
con.rollBack();//回滾JDBC事務
exc.printStackTrace();
dbc.close();
return-1;
}
}
不過仔細看樓主的設計,沒必要採用多條SQL。直接String拼成update XSB set XM='FF', ZF='rj' where XH ='101102'就可以了
G. JDBC 操作中 是否有一種高效的 批量查詢的方式
對,就是addBatch(); 這個方法。
一次性發多條sql語句。
H. jdbc可以支持批量查詢么
哥們對於你的疑惑jdbc提供了相應的方法來支持批量操作:例如 :
JDBC的批量處理語句包括下面兩個方法:
addBatch(String):添加需要批量處理的SQL語句或是參數;
executeBatch();執行批量處理語句;
通常我們會遇到兩種批量執行SQL語句的情況:
1 多條SQL語句的批量處理;
2 一個SQL語句的批量傳參;
針對第一種情況我們以前的做法可能是創建多個Statement,然後挨個execute,或者乾脆寫個PL/SQL;寫過程是個明智的做法,但是我們還可以利用JDBC的批量處理語句進行處理,如下:
Statement st = conn.createStatement();
st.addBatch(sql1);
st.addBatch(sql2);
st.addBatch(sqln);
st.executeBatch();
我們只創建一次Statement,然後addBatch多條SQL,最後一起執行就可以了,這種用法不多,感覺還不如寫個PL/SQL!
但是第二種情況利用JDBC的批量處理語句就比較常見了,這一般用於PreparedStatement,執行同一條語句,只是要傳多條參數,多用於批量增、刪、改!以前我們習慣使用下面循環的方式進行傳參。
PreparedStatement pst = conn.prepareStatement(sql);
for(int i=0;i<N;i++)...{
pst.setInt(1,i);
pst.executeQuery();}
如果我們使用了JDBC的批量處理語句,就可以像下面那樣處理:
PreparedStatement pst = conn.prepareStatement(sql);
for(int i=100;i<1101;i++)...{
pst.setInt(1,i);
pst.addBatch();}pst.executeBatch();
前者是每傳一次參就要執行一次,而後者只執行一次!我做了一個測試,在批量處理的條數很少的時候二者的效率差別不是很大,但是超過50條,就有了差距,隨著條數的增多就越明顯!所以當我們遇到批量處理的時候,一定要優先考慮JDBC的批量處理語句。
注意:1 第一種情況不可以添加查詢SQL,因為executeBatch()返回的是int [],如果把返回ResultSet的SQl加入會引起異常;
2 第二種情況可以適用於沒有返回參數的存儲過程,如果存儲過程有返回參數,是不可以使用批量處理的!
I. java oracle 批量執行sql語句和存儲過程,並且要在一個事務裡面怎麼寫啊,謝謝
你把批量執行sql語句和存儲過程,否放入一個大的存儲過程里,然後在這個大的存儲過程中提交事務,就所有的都會納入事務管理當中。
J. java:sql語句批量執行
public static List<List<Map<String, Object>>> getData() {
List<List<Map<String, Object>>> data = new LinkedList<List<Map<String, Object>>>();
data.add(SQLHelper.executeQuery("select * from a"));
data.add(SQLHelper.executeQuery("select * from b"));
data.add(SQLHelper.executeQuery("select * from c"));
data.add(SQLHelper.executeQuery("select * from d"));
return data;
}