小弟刚接触占位符,遇到如下问题:
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
望大侠帮忙指点。。
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
望大侠帮忙指点。。
check the manual that corresponds to your MySQL server version for the right syntax to use near '?'
我理解的是MySQL server不支持这样写
没有问题
rs = ps.executeQuery(sql);//执行到这一句报异常
=》
rs = ps.executeQuery();
ps.setString(1,Deid);//Deid为字串
rs = ps.executeQuery(sql);//执行到这一句报异好像真跟4楼说的一样啊,你怎么传递2次sql啊?下面那个或许不应该带,我基础不好......
是这个情况。说一下,如果你的sql中不带"?",那么再用preparedStatement执行excuteQuery()时也是可以带上里面的sql语句的,效果同statement一样
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里面的提示就知道了
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;
API里java.sql.PreparedStatement中只发现了executeQuery() ,没找到带有参数的executeQuery方法。
=》
rs = ps.execute();