MySQL 和 JDBC PreparedStatement 使用 Select [重复]
Posted
技术标签:
【中文标题】MySQL 和 JDBC PreparedStatement 使用 Select [重复]【英文标题】:MySQL and JDBC PreparedStatement using Select [duplicate] 【发布时间】:2016-01-28 06:04:48 【问题描述】:当我尝试运行程序时遇到此异常
例外 Caughtcom.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: 你 您的 SQL 语法有错误;检查对应的手册 您的 MySQL 服务器版本,以便在 '? 附近使用正确的语法?并通过 =?在第 1 行
当我对值进行硬编码时,我会得到正确的结果。例如:SELECT name, pass from servlettutorial.logintable where name = 'Bill' and pass = 'Gates'
运行良好。
上面程序中的 SQL 语法有什么问题?
try
Class.forName("com.mysql.jdbc.Driver");
Connection conn = DriverManager.getConnection("jdbc:mysql://localhost/servlettutorial?"
+ "user=root&password=carinov");
String sql = "SELECT name, pass from servlettutorial.logintable where name = ? and pass = ?";
PreparedStatement stmt = conn.prepareStatement(sql);
stmt.setString(1, serv_name);
stmt.setString(2,serv_pass);
ResultSet rs = stmt.executeQuery(sql);
while (rs.next())
String d_name = rs.getString("name");
String d_pass = rs.getString("pass");
if(d_name.equals(serv_name) && (d_pass.equals(serv_pass)))
found_match=1;
break;
【问题讨论】:
【参考方案1】:您不应将 SQL 查询传递给 executeQuery()
,因为 PreparedStatement
已经包含查询和参数。
改变
ResultSet rs = stmt.executeQuery(sql)
到
ResultSet rs = stmt.executeQuery();
【讨论】:
非常感谢。它解决了问题:) @Cafe 不客气以上是关于MySQL 和 JDBC PreparedStatement 使用 Select [重复]的主要内容,如果未能解决你的问题,请参考以下文章
com.mysql.jdbc.Driver 和 com.mysql.cj.jdbc.Driver的区别 serverTimezone设定
com.mysql.jdbc.Driver 和 com.mysql.cj.jdbc.Driver的区别 serverTimezone设定