小弟刚接触占位符,遇到如下问题:
String sql = "select Deid,Dename,Password,Phone,Email from defenders where Deid=?;";
PreparedStatement ps = conn.prepareStatement(sql);
ps.setString(1,Deid);//Deid为字串
rs = ps.executeQuery(sql);//执行到这一句报异常
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
望大侠帮忙指点。。

解决方案 »

  1.   

    MySQL server应该不支持?号赋值吧?这个是oracle的吧?
    check the manual that corresponds to your MySQL server version for the right syntax to use near '?'
    我理解的是MySQL server不支持这样写
      

  2.   

    String sql = "select Deid,Dename,Password,Phone,Email from defenders where Deid=‘123’;";
    没有问题
      

  3.   

    注入方式是不需要带SQL的,带SQL是Statement的方法。
    rs = ps.executeQuery(sql);//执行到这一句报异常
    =》
    rs = ps.executeQuery();
      

  4.   

    PreparedStatement ps = conn.prepareStatement(sql);
    ps.setString(1,Deid);//Deid为字串
    rs = ps.executeQuery(sql);//执行到这一句报异好像真跟4楼说的一样啊,你怎么传递2次sql啊?下面那个或许不应该带,我基础不好......
      

  5.   

    rs = ps.executeQuery();   不加sql  =。=
      

  6.   

    +
    是这个情况。说一下,如果你的sql中不带"?",那么再用preparedStatement执行excuteQuery()时也是可以带上里面的sql语句的,效果同statement一样
      

  7.   

    try {
    Class.forName("com.mysql.jdbc.Driver");
    String url = "jdbc:mysql://localhost:3306/orcl";
    Connection conn = DriverManager.getConnection(url, "root", "root");
    String sql = "select * from student where id=?";
    PreparedStatement ps = conn.prepareStatement(sql);
    ps.setInt(1, 15);
    ResultSet rs = ps.executeQuery();
    while (rs.next()) {
    System.out.println(rs.getInt(1)+"--"+rs.getString(2)+"--"+rs.getString(3)+"--"+rs.getInt(4));
    }
    rs.close();
    ps.close();
    conn.close();
    } catch (Exception e) {
    e.printStackTrace();
    }
    红色的不能带sql语句
    带sql的是执行静态语句的,查看一下API或者myeclipse里面的提示就知道了
      

  8.   

    附带sql建表语句
    CREATE TABLE `student` (
      `id` int(11) NOT NULL auto_increment,
      `username` varchar(200) NOT NULL,
      `password` varchar(20) NOT NULL,
      `age` int(11) default NULL,
      PRIMARY KEY  (`id`)
    ) ENGINE=MyISAM DEFAULT CHARSET=utf8;
      

  9.   

    关注一下,应该就是如4楼所说。另外,楼主的这句“rs = ps.executeQuery(sql);”编译器没报错?还是用记事本写的程序?
    API里java.sql.PreparedStatement中只发现了executeQuery() ,没找到带有参数的executeQuery方法。
      

  10.   

    s = ps.executeQuery(sql);//执行到这一句报异常
    =》
    rs = ps.execute();