为什么 getter 函数在代替“?”时会出错?
Why does the getter function gives error when used in place of "?"
我尝试使用 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 这两列是 VARCHAR
(或类似的),这些值需要在 SQL 中作为字符串文字提供。但是您构建 SQL 的代码并未将引号放在字符串周围。因此,SQL 无效。
创建这样的 SQL 语句的另一个问题是它可能使您的应用程序容易受到 SQL Injection.
的攻击
PreparedStatement
和 ?
解决了这两个问题。 JDBC 驱动程序处理将值安全插入 SQL 所需的任何引用、转义和其他转换。
1 - 此假设基于列名:username
和 password
。
我尝试使用 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 这两列是 VARCHAR
(或类似的),这些值需要在 SQL 中作为字符串文字提供。但是您构建 SQL 的代码并未将引号放在字符串周围。因此,SQL 无效。
创建这样的 SQL 语句的另一个问题是它可能使您的应用程序容易受到 SQL Injection.
的攻击PreparedStatement
和 ?
解决了这两个问题。 JDBC 驱动程序处理将值安全插入 SQL 所需的任何引用、转义和其他转换。
1 - 此假设基于列名:username
和 password
。