我刚刚学习了预备语句,现在我正在尝试将它们包含在我的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();
答案 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