数据库占位符问题

giuve 2012-06-06 01:06:04
小弟刚接触占位符,遇到如下问题:
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
望大侠帮忙指点。。。。。
...全文
371 16 打赏 收藏 转发到动态 举报
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
giuve 2012-06-06
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 的回复:]
引用 4 楼 的回复:

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

+
是这个情况。说一下,如果你的sql中不带"?",那么再用preparedStatement执行excuteQuery()时也是可以带上里面的sql语句的,效……
[/Quote]
是这个问题,谢谢
mengyalizuopeng 2012-06-06
  • 打赏
  • 举报
回复
s = ps.executeQuery(sql);//执行到这一句报异常
=》
rs = ps.execute();
_jerrytiger 2012-06-06
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 的回复:]

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

++
jlu_lamp_lamp 2012-06-06
  • 打赏
  • 举报
回复
你的里面要给双引号
未来纪元 2012-06-06
  • 打赏
  • 举报
回复
sql中有“;”,去掉试试
ThinkCat 2012-06-06
  • 打赏
  • 举报
回复
关注一下,应该就是如4楼所说。

另外,楼主的这句“rs = ps.executeQuery(sql);”编译器没报错?还是用记事本写的程序?
API里java.sql.PreparedStatement中只发现了executeQuery() ,没找到带有参数的executeQuery方法。
Orefa 2012-06-06
  • 打赏
  • 举报
回复
附带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;
Orefa 2012-06-06
  • 打赏
  • 举报
回复
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里面的提示就知道了
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 的回复:]

注入方式是不需要带SQL的,带SQL是Statement的方法。
rs = ps.executeQuery(sql);//执行到这一句报异常
=》
rs = ps.executeQuery();
[/Quote]
+
是这个情况。说一下,如果你的sql中不带"?",那么再用preparedStatement执行excuteQuery()时也是可以带上里面的sql语句的,效果同statement一样
a395885670 2012-06-06
  • 打赏
  • 举报
回复
rs = ps.executeQuery(); 不加sql =。=
leandzgc 2012-06-06
  • 打赏
  • 举报
回复
PreparedStatement ps = conn.prepareStatement(sql);
ps.setString(1,Deid);//Deid为字串
rs = ps.executeQuery(sql);//执行到这一句报异

好像真跟4楼说的一样啊,你怎么传递2次sql啊?下面那个或许不应该带,我基础不好......
leandzgc 2012-06-06
  • 打赏
  • 举报
回复
那楼主就不要用?号赋值喽,直接写不就行了?" + ID + "
古布 2012-06-06
  • 打赏
  • 举报
回复
注入方式是不需要带SQL的,带SQL是Statement的方法。
rs = ps.executeQuery(sql);//执行到这一句报异常
=》
rs = ps.executeQuery();
giuve 2012-06-06
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 的回复:]
楼主可以直接把ID写死试试,如果写死可以运行那么就是不支持?号赋值。
[/Quote]
String sql = "select Deid,Dename,Password,Phone,Email from defenders where Deid=‘123’;";
没有问题
leandzgc 2012-06-06
  • 打赏
  • 举报
回复
楼主可以直接把ID写死试试,如果写死可以运行那么就是不支持?号赋值。
leandzgc 2012-06-06
  • 打赏
  • 举报
回复
MySQL server应该不支持?号赋值吧?这个是oracle的吧?
check the manual that corresponds to your MySQL server version for the right syntax to use near '?'
我理解的是MySQL server不支持这样写

62,612

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧