SAP Hana数据库-JDBC batchUpdate

2020-09-01 07:53发布

         点击此处--->   EasySAP.com群内免费提供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]
 

         点击此处--->   EasySAP.com群内免费提供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]
 
付费偷看设置
发送
2条回答
Baoming ROSE
1楼-- · 2020-09-01 08:15

ı同意IVAN

Nan4612
2楼-- · 2020-09-01 08:30

为什么不在存储过程中执行此操作? 这将更有意义,因为您将利用内存中处理的优势。 我认为用于HANA的JDBC驱动程序不是用于大规模数据库处理的。

一周热门 更多>