java - 使用 java 在 ' postcode =' n' ' 附近使用的语法不正确

标签 java mysql

我试图用java向mysql数据库中插入一些数据,但它一直给出语法错误:

线程“main”中的异常 com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException:您的 SQL 语法有错误;查看与您的 MySQL 服务器版本对应的手册,了解在第 1 行的“postcode ='n''附近使用的正确语法

这是我的代码:

`

public static void saveAddress(Address address) throws SQLException{
        SQLConnection sql = new 
        SQLConnection(SQLConnection.getConnection());
        if(SQLAddress.getAddressID(address) == -1){
            sql.update(String.format("INSERT INTO address(houseNumber, 
                street, district, city, postcode) VALUES (%s ,%s ,%s ,%s 
                ,%s)",address.getHouseNumber(),address.getStreet(),
                address.getDistrict(),address.getCity(),
                address.getPostCode()));
        }
        sql.close();
    }

`

我真的不知道该怎么做,我在 mysql shell 中使用了相同的语法,它在那里工作得很好。

编辑

public static void saveAddress(Address address) throws SQLException{
    Connection sql = SQLConnection.getConnection();
    if(SQLAddress.getAddressID(address) == -1){
        PreparedStatement ps = sql.prepareStatement("INSERT INTO address (houseNumber, street, district, city, postcode) VALUES (?, ?, ?, ?, ?);");
        ps.setString(1, address.getHouseNumber());
        ps.setString(2, address.getStreet());
        ps.setString(3, address.getDistrict());
        ps.setString(4, address.getCity());
        ps.setString(5, address.getPostCode());
        ps.executeUpdate();
        sql.commit();
    }
    sql.close();
}

最佳答案

您应该为遇到此错误感到高兴,因为如果它没有发生,就会造成巨大的安全问题。将用户值插入到 SQL 字符串中启用 SQL injection attacks ,这是一种非常危险的可能性。

切换到使用 prepared statements ,并将参数绑定(bind)到它们。这类似于您对格式化所做的方式,但它是在不同的行上完成的:

PreparedStatement upd = sql.prepareStatement("INSERT INTO address(houseNumber, street, district, city, postcode) VALUES (?, ?, ?, ?, ?)");
upd.setInt(1, address.getHouseNumber());
upd.setString(2, address.getStreet());
... // Set other fields
upd.executeUpdate();
sql.commit();

关于java - 使用 java 在 ' postcode =' n' ' 附近使用的语法不正确,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47371489/

相关文章:

java - 安卓 : Searching youtube video from my app

java - org.apache.xmlgraphics.image.loader.ImageException : The file format is not supported. 未找到 ImagePreloader

mysql - 过滤 mysql 输出以仅打印您需要的内容

java - 在 Java 中识别具有相同内容的图像

java - 如何使 JTable/TableModel 动态化?

mysql - DB2转MYSQL建表脚本

sql - 糟糕的数据库模式设计的升级策略

mysql - CASE 检查 MySQL 查询中 select 语句的过期情况

java - 是否有优雅的串联工作?

mysql - 如何将ios对象或 View 参数保存到服务器?