java - 为什么使用 getter 函数代替 "?"时会出错

标签 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这两列是VARCHAR(或类似列),这些值需要在 SQL 中作为字符串文字提供。但是构建 SQL 的代码并没有在字符串周围加上引号。因此,该 SQL 无效。

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

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

<小时/>

1 - 此假设基于列名称:用户名密码

关于java - 为什么使用 getter 函数代替 "?"时会出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57433477/

相关文章:

java - spring-data-jpa 不适用于 java 8 LocalTime

java - java中的滑动图像过渡

scala - Play项目如何添加jdbc依赖?

java - 启用 SQL 触发器时,Java 中的准备语句失败

java - 通过java发送邮件: multiple sender with different mail id

java - 借助JIT,程序运行时间越长,速度就越快?

Java.util.Date 与 Java.sql.Date - 日期值不同

java - 有关 Spring Framework 应用程序中 JDBC 逻辑的一些信息

PHP 如何检查是否需要关闭 MySQLi 查询?

java - 将动态 SQL 查询转换为 Java 中的准备语句