java - 准备好的语句执行查询错误(com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException)

标签 java mysql hikaricp

我编写了一个简单的方法来从数据库中获取字符串:

    public String getUserString(int id, String table, String column) {
    String output = null;
    try {
        String sql = "SELECT ? FROM ? WHERE id=?;";
        PreparedStatement preparedStatement = getConnection().prepareStatement(sql);
        preparedStatement.setString(1, column);
        preparedStatement.setString(2, table);
        preparedStatement.setInt(3, id);
        ResultSet resultSet = preparedStatement.executeQuery();
        while (resultSet.next()) {
            output = resultSet.getString(column);
        }
    } catch (SQLException e) {
        e.printStackTrace();
    }
    return output;
}

但是当我尝试像这样使用它时: coreMySQL.getUserString(1, "economy", "balance");

我收到此错误: https://pastebin.com/BMAmN4Xh

最佳答案

您无法使用 PreparedStatementsetXxx 方法设置表名和列名。它只能用于设置值。

但是,您可以执行简单的 String 替换来替换表名称和列名称,例如:

String query = SELECT <column> FROM <table> WHERE id=?;
String sql = query.replaceAll("<column>", column).replaceAll("<table>", table);
PreparedStatement preparedStatement = getConnection().prepareStatement(sql);
preparedStatement.setInt(1, id);
ResultSet resultSet = preparedStatement.executeQuery();
while (resultSet.next()) {
    output = resultSet.getString(column);
}

关于java - 准备好的语句执行查询错误(com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45304618/

相关文章:

java - Alfresco 中以编程方式提供多语言内容

MySQL:从另一个表查找服务器

php - 为什么这个 MySQL 查询区分大小写?

php - Laravel 4 - 创建自定义 session 驱动程序

java - Spring Data和@Transactional在多次保存时不回滚

hibernate - jpa自定义连接池

java - 使用java中的JOptionPane是否可以同时显示多个弹出窗口?

java - 使用ActionBarSherlock 4.1.0时资源文件出错

java - 如何在 Spring Boot 中将 HikariCP 与两个数据源结合使用 Flyway

java - 使用 Jena API 在 SPARQL 中自定义函数