Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/329.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/55.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 准备好的语句执行查询错误(com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException)_Java_Mysql_Hikaricp - Fatal编程技术网

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

Java 准备好的语句执行查询错误(com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException),java,mysql,hikaricp,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().prepar

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

    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;
}
但是当我尝试这样使用它时:
coremsql.getUserString(1,“经济”、“平衡”)

我得到这个错误:
您不能使用
setXxx
方法为
PreparedStatement
设置表名和列名。它只能用于设置值

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

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);
}
stringquery=从其中选择id=?;
字符串sql=query.replaceAll(“,column).replaceAll(“,table);
PreparedStatement PreparedStatement=getConnection().prepareStatement(sql);
编制的报表。setInt(1,id);
ResultSet ResultSet=preparedStatement.executeQuery();
while(resultSet.next()){
output=resultSet.getString(列);
}

将查询模板定义为:

String queryTemplate = "SELECT %s FROM %s where id = ?;";

// Inside Function:

PreparedStatement preparedStatement = getConnection().prepareStatement(String.format(template, column, table));
preparedStatement.setInt(1, id);
ResultSet resultSet = preparedStatement.executeQuery();

您的表名是balance吗?你能提供一个数据库表的快照吗?我的表名不平衡,很经济。下面是数据库的屏幕截图:删除“;”所以“SELECT?FROM?WHERE id=?”谢谢你的回答。@blablambruhaha如果答案对你有帮助,你可以接受。这是我第一次使用stackoverflow,我该怎么做?