gpt4 book ai didi

java - 我的插入方法有什么问题?

转载 作者:行者123 更新时间:2023-11-29 05:06:48 24 4
gpt4 key购买 nike

我正在尝试将一些数据插入数据库。为实现这一点,我创建了一个返回 boolean 并接收类型为 PointObjectsArrayList 的方法。一切运行良好,直到我检查了我的表,我发现它只是插入了一个点(每次都是第一个点),尽管我有很多点(arrayList.size() > 0 ).例如,如果我的 arrayList.size(2),我可以到达 arrayList.get(2).getXcoordinate(),但我的方法只插入第一个索引( arrayList.size(0)).我根本不知道我哪里做错了。非常感谢任何帮助或提示。谢谢,卡尔 -我的方法:

public boolean insertPoints(ArrayList<Point> arr) {
try {
con = this.getConnection();
st = con.createStatement();
if (con != null) {
for (int i = 0; i < arr.size(); i++) {
String id = arr.get(i).getId();
String x = arr.get(i).getXcoordinate();
String y = arr.get(i).getYcoordinate();
if (st.executeUpdate("INSERT INTO table (Id, X, Y)
VALUES (" + id + "," + x + "," + y + ")") > 0)
return true;
return false;
}
} else {
System.err.println("No connection, con == null ...");
return false;
}
} catch (Exception e) {
System.err.println("Exception: " + e.getMessage());
return false;
} finally {
try {
if (rs != null) rs.close();
if (st != null) st.close();
if (con != null) con.close();
} catch (SQLException sqle) {
System.err.println("SQLException: " + sqle.getMessage());
}
}
return false;
}

最佳答案

此代码不是您应该执行此操作的方式。

请使用PreparedStatement绑定(bind)变量。

您的ConnectionPreparedStatement 不应是类成员。 Connection 应该在别处实例化并传入。

PreparedStatement 应该有本地作用域。

您应该在 finally 方法中的各个 try/catch block 中关闭资源。编写静态方法以重用并保持代码小。

您还可以考虑对这些调用进行批处理,以便在一次往返中插入所有点。它的性能会更高。

// Your table's name is table?  Terrible.
private static final String INSERT_SQL = "INSERT INTO table(Id, X, Y) VALUES (?, ?, ?)";

关于java - 我的插入方法有什么问题?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30127319/

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