gpt4 book ai didi

java - Sql 语法错误未知字段列表但正在寻找错误的字段?

转载 作者:行者123 更新时间:2023-12-01 13:47:01 26 4
gpt4 key购买 nike

所以我创建了以下函数来写入数据库:

public static void updateBuyer(String ID, String name, Location latlong) {
float lat = latlong.latitude;
float lon = latlong.longitude;
try {
// new com.mysql.jdbc.Driver();
Class.forName("com.mysql.jdbc.Driver").newInstance();
// conn =
// DriverManager.getConnection("jdbc:mysql://localhost:3306/testdatabase?user=testuser&password=testpassword");
conn = DriverManager.getConnection(connectionUrl, connectionUser,
connectionPassword);
stmt = conn.createStatement();
String sql = "UPDATE Buyer " + "SET latitude ="
+ Float.toString(lat) + " WHERE idBuyer in (" + ID + ")";
String sql2 = "UPDATE Buyer " + "SET longitude ="
+ Float.toString(lon) + " WHERE idBuyer in (" + ID + ")";
String sql3 = "UPDATE Buyer " + "SET Name =" + name
+ " WHERE idBuyer in (" + ID + ")";

stmt.executeUpdate(sql);
stmt.executeUpdate(sql2);
stmt.executeUpdate(sql3);
conn.close();
} catch (Exception e) {
System.err.println(e);
}
}

假设我传递了以下参数:(12、craigs、位置对象)现在,当我运行该函数时,出现以下错误:

com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Unknown column 'craigs' in 'field list'

12是我之前从数据库检索到的ID,craigs 是我尝试插入的随机名称,并且位置对象只是一组坐标(纬度,经度)

这让我认为它出于某种原因在表中寻找名为“craigs”的字段,但为什么要这样做呢?

最佳答案

问题是你的 SQL 是这样的:

UDPATE Buyer SET Name = craigs WHERE idBuer in (Whatever)

尝试从名为“craigs”的列复制值。

现在您可以只添加撇号 - 但不要。相反,应将参数化 SQL 与预准备语句一起使用。这样你就可以避免 SQL injection attacks ,您的代码会更简单,并且您将避免不必要的字符串转换,这可能会导致问题,特别是对于日期值。

此外,您只需要一条语句,即可更新所有三列:

String sql = "UPDATE Buyer SET Name=?, latitude=?, longitude=? WHERE idBuyer=?";
try (PreparedStatement statement = conn.prepareStatement(sql)) {
statement.setString(1, name);
statement.setFloat(2, lat);
statement.setFloat(3, lon);
statement.setString(4, ID);
statement.executeUpdate();
}

(请注意,我假设您实际上只是尝试更新单个买家 - 根本不清楚您为什么使用 IN。另请注意,我正在使用 try- with-resources 语句,之后会自动关闭该语句。)

此外,我*强烈*建议您避免仅仅捕获Exception。如果必须的话,捕获 SQLException - 但实际上您最好让它在调用堆栈中传播。

关于java - Sql 语法错误未知字段列表但正在寻找错误的字段?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20292083/

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