gpt4 book ai didi

java - ExecuteBatch() 未更新

转载 作者:行者123 更新时间:2023-12-02 12:06:07 25 4
gpt4 key购买 nike

所以我尝试在一次更新中插入多行。经过一番谷歌搜索后,大多数人建议使用 rewriteBatch。

基本上,当我尝试执行批处理时,它不会更新我的数据库。数据库是本地主机,我可以使用相同的 URL 从数据库读取数据,并且没有任何异常(异常或 SQLException)。

public void insert(Node[] nodes) {  
try {
conn = (Connection) DriverManager.getConnection(url);
System.out.println(conn.getMetaData().supportsBatchUpdates());
conn.setAutoCommit(false);
for (int i = 0; i < nodes.length; i++) {
if(nodes[i].next!=null){
pstmt=conn.prepareStatement(StatementUtils.createInsertStatement(i));
addToBatch(nodes[i].next);
int [] res=pstmt.executeBatch();
System.out.print("has "+res.length+" elements. Status:[");
for (int j = 0; j < res.length; j++) {
System.out.print(res[j]+" ");
}
System.out.println("]");
conn.commit();
pstmt.close();
}
}
}
catch(Exception e){
try {
conn.rollback();
} catch (SQLException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
}
finally {
if (conn != null) {
try { conn.close(); }
catch (SQLException e) {
printSQLException(e);
}
}
}
}

private void addToBatch(Node n) throws SQLException{
if(n!=null){
pstmt.setString(1, n.can.getCar());
pstmt.setInt(2, n.can.getID());
pstmt.setTimestamp(3, n.can.getDate());
pstmt.setInt(4, n.can.getLength());
for (int i = 1; i <= n.can.getLength(); i++) {
pstmt.setInt(i+4, n.can.getData(i-1));
}
pstmt.addBatch();
addToBatch(n.next);
}
}

public static String createInsertStatement(int length){
String s="INSERT into CanData (carName,systemID,dataDate,size";
for (int i = 0; i < length; i++)
s+=",d"+i;
s+= ")values(?,?,?,?";
for (int i = 0; i <length; i++)
s+=",?";
s+=")";
return s;
}

尽管 insert() 上有一个 for,但出于测试目的,目前节点数组只有 1 个位置。

这也是我的输出:

true
has 18 elements. Status:[1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 ]
true
has 14 elements. Status:[1 1 1 1 1 1 1 1 1 1 1 1 1 1 ]
true
has 15 elements. Status:[1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 ]
true
has 18 elements. Status:[1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 ]
true
has 14 elements. Status:[1 1 1 1 1 1 1 1 1 1 1 1 1 1 ]
true
has 11 elements. Status:[1 1 1 1 1 1 1 1 1 1 1 ]

为什么它不更新/插入到我的数据库?

顺便说一句,如果您读到这里,谢谢您的耐心 xD

最佳答案

首先感谢所有试图帮助我并投入时间搜索并尝试回答我的问题的人。

问题出在我的 URL 连接上。原来是:

url="jdbc:sqlserver://localhost;rewriteBatchUpdates=true;instanceName=MSSQLSERVER;integratedSecurity=true;";

但缺少数据库名称和端口号。看来当您尝试同时插入多行时,您需要定义数据库和端口号,如下所示:

url = "jdbc:sqlserver://localhost:1433;database=IFS_DB;rewriteBatchUpdates=true;instanceName=MSSQLSERVER;integratedSecurity=true;";

另外,我很抱歉没有发布网址。如果我这样做的话,也许这个问题早就可以解决了。

关于java - ExecuteBatch() 未更新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46899876/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com