点击此处---> 群内免费提供SAP练习系统(在群公告中)
加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)
我们在NEO环境中使用Hana MDC版本-1.00.122.18.1531375173。 使用Java应用程序,我们必须更新Hana数据库中的大量记录。 为此,我们使用了JDBC PreparedStatement-> executeBatch()方法。
如果任何查询批量出现问题,那么将还原所有查询,而不是在该查询处停止。 我尝试使用Connection自动提交TRUE/FALSE。
但我们仍然处于-2状态。
尝试使用H2数据库时使用相同的代码,然后得到类似[1,1,-3,1]
的结果sap hana jdbc驱动程序是否支持批量插入或更新,如果并且所有查询都没有问题的话?
下面是示例代码段。
import java.sql.BatchUpdateException; 导入java.sql.Connection; 导入java.sql.DriverManager; 导入java.sql.PreparedStatement; 导入java.sql.ResultSet; 导入java.sql.SQLException; 导入java.sql.Statement; 导入java.util.Arrays; 导入java.util.List; 公共类H2JdbcBatchUpdate { //JDBC驱动程序名称和数据库URL 静态最终字符串JDBC_DRIVER =" com.sap.db.jdbc.Driver"; 静态最终字符串DB_URL =" jdbc:sap://localhost:30015/"; //数据库凭证 静态最终字符串USER ="用户名"; 静态最终字符串PASS =" password"; 公共静态void main(String [] args){ 连接conn = null; 语句stmt = null; 尝试{ //步骤1:注册JDBC驱动程序 Class.forName(JDBC_DRIVER); //步骤2:打开连接 System.out.println("正在连接数据库..."); conn = DriverManager.getConnection(DB_URL,USER,PASS); //conn.setAutoCommit(true); //步骤3:执行查询 System.out.println("已成功连接数据库..."); /* 创建表注册(id INTEGER不为NULL,第一个VARCHAR(10),最后一个VARCHAR(10),age INTEGER,主键(id)) */ 字符串sql =" UPDATE Registration SET first =?" +" WHERE id =?"; int []受影响的记录= null; 尝试(PreparedStatement st = conn.prepareStatement(sql)){ st.setString(1," NEWNAME1"); st.setInt(2,100); st.addBatch(); st.setString(1," NEWNAME2"); st.setInt(2,101); st.addBatch(); st.setString(1," asas"); st.setInt(2,102); st.addBatch(); st.setString(1," NEWNAMEdsfsdfdsfdsfdsfdsffds3"); st.setInt(2,103); st.addBatch(); 受影响的记录= st.executeBatch(); } catch(BatchUpdateException e){ e.printStackTrace(); int []计数= e.getUpdateCounts(); for(int each:counts){ System.out.println(" each ::" + each); } System.out.println(Arrays.toString(e.getUpdateCounts())); System.out.println("批次已成功处理{}个条目:" + e.getUpdateCounts()。length); } catch(Exception e){ e.printStackTrace(); }最后{ 如果(affectedRecords!= null){ System.out.println(Arrays.toString(affectedRecords)); }其他{ System.out.println(" Its nullll"); } } } catch(BatchUpdateException se){ int [] updateCounts = se.getUpdateCounts(); System.out.println(" count2 :::" + Arrays.toString(updateCounts)); se.printStackTrace(); } catch(Exception e){ //处理Class.forName的错误 e.printStackTrace(); }最后{ //最终用于关闭资源的块 尝试{ if(stmt!= null)stmt.close(); } catch(SQLException se2){ }//我们无能为力 尝试{ if(conn!= null)conn.close(); } catch(SQLException se){ se.printStackTrace(); }//最后终于尝试 }//结束尝试 System.out.println("再见!"); } } 结果:- -------- 正在连接数据库... 连接数据库成功... count2 ::: [-2,-2,-2,-2]
ı同意IVAN
为什么不在存储过程中执行此操作? 这将更有意义,因为您将利用内存中处理的优势。 我认为用于HANA的JDBC驱动程序不是用于大规模数据库处理的。
一周热门 更多>