Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/311.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java jdbc准备声明中的问题_Java_Jdbc - Fatal编程技术网

Java jdbc准备声明中的问题

Java jdbc准备声明中的问题,java,jdbc,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(pSt

当我尝试使用以下命令时,我会出错,为什么会这样

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

}
你有:

pStmt = cn.prepareStatement("SELECT * FROM" + tablename +" WHERE ? = ? ");
pStmt.setString(1, tablename);
pStmt.setString(2,field);
pStmt.setString(3,value);
两个
,但正在尝试设置三个参数

事实上,您不能通过预先准备好的语句参数设置表和列的名称

您还需要始终如一地拼写变量名,并对选中的异常采取措施

(在询问有关导致错误的代码的问题时,通常最好引用错误。)

您有:

pStmt = cn.prepareStatement("SELECT * FROM" + tablename +" WHERE ? = ? ");
pStmt.setString(1, tablename);
pStmt.setString(2,field);
pStmt.setString(3,value);
两个
,但正在尝试设置三个参数

事实上,您不能通过预先准备好的语句参数设置表和列的名称

您还需要始终如一地拼写变量名,并对选中的异常采取措施


(在询问有关导致错误的代码的问题时,通常最好引用错误。)

使用
PreparedStatement
s时,您只能替换值,而不能替换您尝试使用“WHERE?=?”的表名


关于你的第二个代码片段,除了拼写错误(“归档”),我不明白为什么会失败。您遇到了什么错误?

当使用
PreparedStatement
s时,您只能在值中替换,而不能像您尝试使用“WHERE?=?”时那样替换表名


关于你的第二个代码片段,除了拼写错误(“归档”),我不明白为什么会失败。您得到了什么错误?

在第一个语句中,您在查询中有两个参数,但您正在添加第三个参数,在第二个语句中,您有一个输入错误

ResultSet findByUsername(String tablename,String field,String value)
{ 
    pStmt = cn.prepareStatement("SELECT * FROM" + tablename +" WHERE " + field" + = ? ");
    pStmt.setString(1,value);
    return(pStmt.executeQuery());    
}

在第一个语句中,查询中有2个参数,但您正在添加第三个参数,在第二个语句中,您有一个输入错误

ResultSet findByUsername(String tablename,String field,String value)
{ 
    pStmt = cn.prepareStatement("SELECT * FROM" + tablename +" WHERE " + field" + = ? ");
    pStmt.setString(1,value);
    return(pStmt.executeQuery());    
}

在第二次尝试时,请在字符串值上使用单个代码

String sqlQueryString = " SELECT * FROM " + tablename +" WHERE " + filed + " = ? ");
在比较字符串值时使用单个代码。 在字段和之间留出等于的空间


感谢您第二次使用字符串值上的单个代码进行尝试

String sqlQueryString = " SELECT * FROM " + tablename +" WHERE " + filed + " = ? ");
在比较字符串值时使用单个代码。 在字段和之间留出等于的空间


谢谢

我在这里看到两个问题:

  • “+tablename+”
    应替换为
  • WHERE?=?
    是完全错误的,因为事先准备好的语句的概念。准备好的语句是预编译语句,引用同一个表和列,在criterea(绑定值)下具有不同的值。不能绑定表或列名(或任何其他db对象)

  • 我在这里看到两个问题:

  • “+tablename+”
    应替换为
  • WHERE?=?
    是完全错误的,因为事先准备好的语句的概念。准备好的语句是预编译语句,引用同一个表和列,在criterea(绑定值)下具有不同的值。不能绑定表或列名(或任何其他db对象)

  • 未将语句cn.prepareStatement(sqlQuery)分配给pStmt变量;应该是pStmt=cn.prepareStatement(sqlQuery);findbyid中的错误您的SQL语法中有错误;检查与您的MySQL服务器版本对应的手册,以了解在第1null行com.MySQL.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException的“=1”附近使用的正确语法。异常:您的SQL语法有错误;在sun.reflect.NativeConstructorAccessorImpl.newInstance0(本机方法)的第1行中,检查与您的MySQL服务器版本对应的手册,以获得在“=1”附近使用的正确语法,该语法未为pStmt变量分配语句cn.prepareStatement(sqlQuery);应该是pStmt=cn.prepareStatement(sqlQuery);findbyid中的错误您的SQL语法中有错误;检查与您的MySQL服务器版本对应的手册,以了解在第1null行com.MySQL.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException的“=1”附近使用的正确语法。异常:您的SQL语法有错误;查看与您的MySQL服务器版本对应的手册,了解sun.reflect.NativeConstructorAccessorImpl.newInstance0(本机方法)第1行中“=1”附近使用的正确语法。在第二个示例中,分配给pStmt并更正键入可能会有帮助:)第二个没有编译。SQL字符串的末尾有一个右括号而不是分号。在以后的问题中,请确保您发布的是真实的代码,是从您的“工作”环境中复制粘贴的,以避免不必要的繁文缛节。另外,请复制粘贴异常,因为它们说明了问题的原因。此外,为了解决“无效sql语法”的问题,您还需要在这里复制实际的sql字符串,即do
    System.out.println(sqlQueryString)并将其结果复制到此处。也许在第二个示例中分配给pStmt并更正键入错误会有所帮助:)第二个示例无法编译。SQL字符串的末尾有一个右括号而不是分号。在以后的问题中,请确保您发布的是真实的代码,是从您的“工作”环境中复制粘贴的,以避免不必要的繁文缛节。另外,请复制粘贴异常,因为它们说明了问题的原因。此外,为了解决“无效sql语法”的问题,您还需要在这里复制实际的sql字符串,即do
    System.out.println(sqlQueryString)并将其结果复制到此处。我不认为
    “字段”
    应该是字符串文字-
    字段
    作为参数传递。我不认为
    “字段”
    应该是字符串文字-
    字段
    作为参数传递。