gpt4 book ai didi

java - 在 SQL 中使用 Java 插入 Java 变量

转载 作者:搜寻专家 更新时间:2023-10-31 08:05:43 25 4
gpt4 key购买 nike

我想做的是:

 String sql = "INSERT INTO CURRENT_WEATHER_US VALUES("+city_code+",   
"+object.city+","+object.region+","+object.country+","+object.wind_chill+",
"+object.wind_direction+", "+object.wind_speed+","+object.humidity+","+object.visibility+",
"+object.pressure+","+object.rising+",
"+object.sunrise+","+object.sunset+","+object.textual_description+",
"+object.condition_code+","+object.temp+","+object.for_temp_high+",
"+object.for_temp_low+","+object.for_description+","+object.forecast_code+")";

stmt.execute(sql);

错误是缺少逗号

请帮忙

最佳答案

这实际上不是您应该使用变量构造和执行 SQL INSERT 查询的方式。这样不仅容易出现SQL injection attacks ,但它也非常 .. 麻烦 ;) 可能值包含单引号并导致您的查询在语法上无效。

只是不要将变量字符串连接成 SQL 字符串。相反,使用 PreparedStatement ( tutorial here ) 结合 ? 作为 SQL 字符串中变量的占位符。通过这种方式,您可以通过值索引将完全有值(value)的 Java 对象(包括 DateInputStream!)很好地放入 SQL 语句中,而不必担心字符串中的字符可能会在语法上破坏 SQL 查询(因此也会诱发 SQL 注入(inject)风险)。

这是一个基于原始 SQL 查询的启动示例:

private static final String SQL_INSERT = "INSERT INTO CURRENT_WEATHER_US"
+ " VALUES(?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)";

public void create(String cityCode, Weather weather) throws SQLException {
try (
Connection connection = database.getConnection();
PreparedStatement statement = connection.prepareStatement(SQL_INSERT);
) {
statement.setString(1, cityCode);
statement.setString(2, weather.getCity());
statement.setString(3, weather.getRegion());
// ...
statement.setString(20, weather.getForecastCode());
statement.executeUpdate();
}
}

要了解更多关于正确使用基本 JDBC 的信息,您可以找到 this article有用。

希望这对您有所帮助。

关于java - 在 SQL 中使用 Java 插入 Java 变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2256504/

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