Select 带有准备好的语句 Java
Select with prepared statements Java
我刚刚了解了准备好的语句,现在我正试图将它们包含到我的 java 程序中。但是,当我尝试将值添加到语句(table 和名称)时出现异常。当我只准备一个变量时,它工作正常。
我做错了什么?
[SQLITE_ERROR] SQL error or missing database (near "?": syntax error)
String sql="SELECT * FROM ? WHERE name = ?";
try {
PreparedStatement preparedStatement = connection.prepareStatement(sql);
preparedStatement.setString(1, table);
preparedStatement.setString(2, name);
ResultSet checkTable = preparedStatement.executeQuery();
准备语句用于值,table 名称不被视为值。所以你试图实现的目标是不可能的。
虽然这样也行得通:
String sql="SELECT * FROM any_table_name WHERE name = ?";
try {
PreparedStatement preparedStatement = connection.prepareStatement(sql);
preparedStatement.setString(1, name);
ResultSet checkTable = preparedStatement.executeQuery();
} catch (Exception e) {}
准备好的语句用于列值而不是 table 名称。您应该按如下方式进行。
String sql = "SELECT * FROM `" + table + "` WHERE name = ?";
准备好的语句不是这样工作的。奇怪的是,你 can't use placeholders for table names。解决方案是使用类似的东西:
String sql = String.format("SELECT * FROM %s WHERE name = ?", table);
...并继续您的其余代码。
我刚刚了解了准备好的语句,现在我正试图将它们包含到我的 java 程序中。但是,当我尝试将值添加到语句(table 和名称)时出现异常。当我只准备一个变量时,它工作正常。 我做错了什么?
[SQLITE_ERROR] SQL error or missing database (near "?": syntax error)
String sql="SELECT * FROM ? WHERE name = ?";
try {
PreparedStatement preparedStatement = connection.prepareStatement(sql);
preparedStatement.setString(1, table);
preparedStatement.setString(2, name);
ResultSet checkTable = preparedStatement.executeQuery();
准备语句用于值,table 名称不被视为值。所以你试图实现的目标是不可能的。
虽然这样也行得通:
String sql="SELECT * FROM any_table_name WHERE name = ?";
try {
PreparedStatement preparedStatement = connection.prepareStatement(sql);
preparedStatement.setString(1, name);
ResultSet checkTable = preparedStatement.executeQuery();
} catch (Exception e) {}
准备好的语句用于列值而不是 table 名称。您应该按如下方式进行。
String sql = "SELECT * FROM `" + table + "` WHERE name = ?";
准备好的语句不是这样工作的。奇怪的是,你 can't use placeholders for table names。解决方案是使用类似的东西:
String sql = String.format("SELECT * FROM %s WHERE name = ?", table);
...并继续您的其余代码。