为什么在使用“?”代替时,getter函数会出错?

时间:2019-08-09 15:49:05

标签: java jdbc prepared-statement

我尝试使用get()函数提供SQL查询中的列值,但它提供了SQLSyntaxErrorException。

try {
    Class.forName("com.mysql.cj.jdbc.Driver");

    Connection connect = DriverManager.getConnection("DB URL");

    String sl = "INSERT INTO users(username,password)" + "VALUES(" + beans.getUsername() + "," + beans.getPassword() + ")";

    PreparedStatement pts = connect.prepareStatement(sl);

    pts.executeUpdate();

}

1 个答案:

答案 0 :(得分:4)

假设 1 那两列是VARCHAR(或类似的列),则需要在SQL中将值作为字符串文字提供。但是,用于构建SQL的代码不会在字符串两边加上引号。因此,SQL无效。

创建这样的SQL语句的另一个问题是,它可能使您的应用程序容易受到SQL Injection的攻击。<​​/ p>

PreparedStatement?解决了这两个问题。 JDBC驱动程序处理将值安全插入SQL所需的任何引号,转义和其他转换。


1-此假设基于列名:usernamepassword