哪位高手帮忙解决下面问题:
Exception in thread "main" com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorExcep
tion: 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 'where password like
 'w%'' at line 1
        at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)        at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstruct
orAccessorImpl.java:39)
        at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingC
onstructorAccessorImpl.java:27)
        at java.lang.reflect.Constructor.newInstance(Constructor.java:513)
        at com.mysql.jdbc.Util.handleNewInstance(Util.java:411)
        at com.mysql.jdbc.Util.getInstance(Util.java:386)
        at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1053)
        at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:4074)
        at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:4006)
        at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:2468)
        at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:2629)
        at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2719)
        at com.mysql.jdbc.PreparedStatement.executeInternal(PreparedStatement.ja
va:2155)
        at com.mysql.jdbc.PreparedStatement.executeQuery(PreparedStatement.java:
2318)
        at PreparedStatementDemo.main(PreparedStatementDemo.java:23)下面是代码:
import java.sql.*;
import java.text.SimpleDateFormat;
public class PreparedStatementDemo
{
public static final String DBDRIVER = "org.gjt.mm.mysql.Driver";
public static final String DBURL = "jdbc:mysql://localhost:3306/mldn";
public static final String DBUSER = "root";
public static final String DBPASS = "mysqladmin";
public static void main(String args[]) throws Exception
{
Connection conn = null;
PreparedStatement pstmt = null;
ResultSet rs = null;
String sql = "select id, name, password, age, sex, birthday" + 
"from user where password like ? ";

Class.forName(DBDRIVER);
conn = DriverManager.getConnection(DBURL, DBUSER, DBPASS);
pstmt = conn.prepareStatement(sql);
//pstmt.setString(1,keyword+"%");
pstmt.setString(1,"w%");
//pstmt.setString(3,keyword+"%");
rs = pstmt.executeQuery();
while(rs.next())
{
int id = rs.getInt(1);
String name = rs.getString(2);
String pass = rs.getString(3);
int age = rs.getInt(4);
String sex = rs.getString(5);
java.util.Date d = rs.getDate(6);
System.out.print("编号: " + id + "; ");
System.out.print("姓名: " + name + "; ");
System.out.print("密码: " + pass + "; ");
System.out.print("年龄: " + age + "; ");
System.out.print("性别: " + sex + "; ");
System.out.println("生日: " + d + "; ");
}
rs.close();
pstmt.close();
conn.close();
}}

解决方案 »

  1.   

    问题已经解决了:
    是sql语句写错啦,birthday后面应该有一个空格,或者from前面有一个空格。
    String sql = "select id, name, password, age, sex, birthday" +  
    "from user where password like ? ";
      

  2.   

    这类问题应该先将sql语句在数据库里运行一下,然后再复制到代码里,就能排除你这类的问题
      

  3.   

    接分。。明显的SQL语法错误。
      

  4.   

    String sql = "select id, name, password, age, sex, birthday 空格啊,或者from前面" +  
    "from user where password like ? ";
      

  5.   

    程序多debug,看执行的语句,然后就很明白了
      

  6.   

    看提示错误找错 明显就是sql语句错误 
    pstmt.setString(1,"w%");
    最好不要这样写 看着很纠结