关键代码: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)怎么写程序?还有这個错误在哪?

解决方案 »

  1.   

    String sql = "select * from user" + "where username = ? ";
    改成
    String sql = "select * from user" + " where username = ? ";
      

  2.   

    一楼大哥,我把你上面写的复制到程序里去,结果还是一样啊?sql语句为什么 要这样改写啊?
      

  3.   

    String sql = "select * from user" + " where username=?"; 这样有问题? 不会吧
      

  4.   

    我那样改  是因为你的  user 和 where少了个空格!  导致sql语句错误
      

  5.   

    System.out.println(sql);
    1楼说的对,在user后少一个空格,在以后做程序时,先把语句到数据库去执行一下。就会减少这样的错误发生。
      

  6.   

    这 样打印出来的并不是完整的sql语句啊?
      

  7.   

    sql语句where前少了空格
    用System.out.println(sql)在控制台打印sql语句
    PreparedStatement的sql语句本来就是加了参数(?)的语句,用PreparedStatement.setObject()来给?赋值
    想知道具体参数信息的话,把setObject()方法的参数也用System.out.println打出来就可以了
      

  8.   

    有必要用那个+号吗?
    怎么不直接写
      String sql = "select * from user where username = ? ";
    请高手明示