选择准备好的语句Java

时间:2016-05-07 18:37:09

标签: java sql sqlite jdbc prepared-statement

我刚刚学习了预备语句,现在我正在尝试将它们包含在我的java程序中。但是当我尝试向语句(表和名称)添加值时,我得到一个异常。当我只准备一个变量时它工作正常。 我做错了什么?

  

[SQLITE_ERROR] SQL错误或缺少数据库(接近“?”:语法错误)

String sql="SELECT * FROM ? WHERE name = ?";
    try {
        PreparedStatement preparedStatement = connection.prepareStatement(sql);
        preparedStatement.setString(1, table);
        preparedStatement.setString(2, name);
        ResultSet checkTable = preparedStatement.executeQuery();

3 个答案:

答案 0 :(得分:3)

这不是准备好的陈述如何运作的。奇怪的是,你can't use placeholders for table names。解决方案是使用类似的东西:

String sql = "SELECT * FROM `" + table + "` WHERE name = ?";

...继续执行其余代码。

答案 1 :(得分:0)

Prepared语句用于值,表名不被视为值。所以你试图实现的是不可能的。

但这会奏效:

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) {}

答案 2 :(得分:0)

预准备语句用于列值而不是表名。你应该这样做。

d=`echo "$a+$b+$c" | bc`
 |  |       |      |  | -> bc is a "basic" calulator
 |  |       |      | -> pipes pass std-out from preceding cmd, to std in fo following cmd
 |  |       | -> a string to be passed to `bc` for arthimetic evaluation
 |  | -> echo writes its output to std-out 
 | -> = assigns output of cmd=substition to var $d