关键代码:DBConnection dbC = new DBConnection();
String sql = "select * from user" + "where username = ? ";
ResultSet rs = null;
String str = "";
str = args[0];
PreparedStatement stmt = dbC.getPreparedStatement(dbC.getConnection(),
sql);
try {
stmt.setString(1, str);
System.out.println(str);
} catch (SQLException e1) { e1.printStackTrace();
}
try {
rs = stmt.executeQuery(sql);
while (rs.next()) {
System.out.println(rs.getString(1) + " " + rs.getString(2)
+ " " + rs.getString(3) + " " + rs.getString(4));
}
} catch (SQLException e) { e.printStackTrace();
}finally{
dbC.closeResultSet(rs);
dbC.closeStatment(stmt);
}
但有错误信息:fuyou
com.mysql.jdbc.exceptions.MySQLSyntaxErrorException: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '= ?' at line 1
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:936)
at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:2941)
at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:1623)
at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:1715)
at com.mysql.jdbc.Connection.execSQL(Connection.java:3243)
at com.mysql.jdbc.Connection.execSQL(Connection.java:3172)
at com.mysql.jdbc.Statement.executeQuery(Statement.java:1197)
at DBConnection.main(DBConnection.java:127)
这程序其它的正解,但用PreparedStatement有错误,用Statement可以运行,要在程序中打印出sql语句(PreparedStatement)怎么写程序?还有这個错误在哪?
String sql = "select * from user" + "where username = ? ";
ResultSet rs = null;
String str = "";
str = args[0];
PreparedStatement stmt = dbC.getPreparedStatement(dbC.getConnection(),
sql);
try {
stmt.setString(1, str);
System.out.println(str);
} catch (SQLException e1) { e1.printStackTrace();
}
try {
rs = stmt.executeQuery(sql);
while (rs.next()) {
System.out.println(rs.getString(1) + " " + rs.getString(2)
+ " " + rs.getString(3) + " " + rs.getString(4));
}
} catch (SQLException e) { e.printStackTrace();
}finally{
dbC.closeResultSet(rs);
dbC.closeStatment(stmt);
}
但有错误信息:fuyou
com.mysql.jdbc.exceptions.MySQLSyntaxErrorException: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '= ?' at line 1
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:936)
at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:2941)
at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:1623)
at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:1715)
at com.mysql.jdbc.Connection.execSQL(Connection.java:3243)
at com.mysql.jdbc.Connection.execSQL(Connection.java:3172)
at com.mysql.jdbc.Statement.executeQuery(Statement.java:1197)
at DBConnection.main(DBConnection.java:127)
这程序其它的正解,但用PreparedStatement有错误,用Statement可以运行,要在程序中打印出sql语句(PreparedStatement)怎么写程序?还有这個错误在哪?
改成
String sql = "select * from user" + " where username = ? ";
1楼说的对,在user后少一个空格,在以后做程序时,先把语句到数据库去执行一下。就会减少这样的错误发生。
用System.out.println(sql)在控制台打印sql语句
PreparedStatement的sql语句本来就是加了参数(?)的语句,用PreparedStatement.setObject()来给?赋值
想知道具体参数信息的话,把setObject()方法的参数也用System.out.println打出来就可以了
怎么不直接写
String sql = "select * from user where username = ? ";
请高手明示