当我尝试使用以下内容时出现错误,为什么会这样?
ResultSet findByUsername(String tablename,String field,String value)
{
pStmt = cn.prepareStatement("SELECT * FROM" + tablename +" WHERE ? = ? ");
pStmt.setString(1,field);
pStmt.setString(2,value);
return(pStmt.executeQuery());
}
我也试过跟随,但它也不起作用
ResultSet findByUsername(String tablename,String field,String value)
{
String sqlQueryString = " SELECT * FROM " + tablename +" WHERE " + field + "= ? ")
pStmt =cn.prepareStatement(sqlQuery);
pStmt.setString(1, value);
return(pStmt.executeQuery());
}
答案 0 :(得分:3)
你有:
pStmt = cn.prepareStatement("SELECT * FROM" + tablename +" WHERE ? = ? ");
pStmt.setString(1, tablename);
pStmt.setString(2,field);
pStmt.setString(3,value);
两个?
,但尝试设置三个参数。
实际上,您无法通过预准备的语句参数设置表和列的名称。
您还需要一致地拼写变量名称并对已检查的异常执行某些操作。
(在询问导致错误的代码的问题时,引用错误通常是一个好主意。)
答案 1 :(得分:1)
我在这里看到两个问题:
"+ tablename +"
应替换为?
WHERE ?=?
完全错了。 Prepared语句是预编译语句,引用criterea(绑定值)下具有不同值的相同表(s)和列(s)。您不能绑定表或列名称(或任何其他数据库对象)。答案 2 :(得分:0)
使用PreparedStatement
时,您只能替换值,而不能替换表格的名称,因为您尝试使用“WHERE?=?”。
关于你的第二个代码片段,除了拼写错误(“提交”)之外,我不明白为什么会失败。你得到什么错误?
答案 3 :(得分:0)
在第一个中你在查询中有2个参数,但是你要添加第三个参数,在第二个语句中你有一个错字...
ResultSet findByUsername(String tablename,String field,String value)
{
pStmt = cn.prepareStatement("SELECT * FROM" + tablename +" WHERE " + field" + = ? ");
pStmt.setString(1,value);
return(pStmt.executeQuery());
}
答案 4 :(得分:0)
在第二个尝试使用字符串值的单个代码。
String sqlQueryString = " SELECT * FROM " + tablename +" WHERE " + filed + " = ? ");
在比较字符串值时使用单个代码。 在字段之间给予空间等于。
感谢