jdbc preparedstatement中的问题

时间:2010-05-17 12:05:53

标签: java jdbc

当我尝试使用以下内容时出现错误,为什么会这样?

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());

}

5 个答案:

答案 0 :(得分:3)

你有:

pStmt = cn.prepareStatement("SELECT * FROM" + tablename +" WHERE ? = ? ");
pStmt.setString(1, tablename);
pStmt.setString(2,field);
pStmt.setString(3,value);

两个?,但尝试设置三个参数。

实际上,您无法通过预准备的语句参数设置表和列的名称。

您还需要一致地拼写变量名称并对已检查的异常执行某些操作。

(在询问导致错误的代码的问题时,引用错误通常是一个好主意。)

答案 1 :(得分:1)

我在这里看到两个问题:

  1. "+ tablename +"应替换为?
  2. 由于准备好的陈述的概念,
  3. 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 + " = ? ");

在比较字符串值时使用单个代码。 在字段之间给予空间等于。

感谢