SQL语句的问题

leo19870706 2011-02-09 08:39:03
从其它的页面有参数name传过来,并且接受成功,能打印输出到后台。问题是,这个参数要作为SQL语句的查询条件。
ResultSet rs=stmt.executeQuery("select * from wish where username='name'");学PHP时候,老师说双引号括起来的语句,里边还有参数的用单引号括起来,照着做,但是应该是变量的,它把它当参数执行了,去数据库当中取名字为name的数据了,而不是以我传进来的参数去数据库中去数据!如果不加但引号的话,它就报错:严重: Servlet.service() for servlet jsp threw exception
com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Unknown column 'name' in 'where clause',这个问题怎么处理,求解。在此,先谢谢了!!!
...全文
102 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
meteor1015 2011-02-10
  • 打赏
  • 举报
回复
新手执行的SQL 先用System.out.println() 打印要执行的语句看看是否正确,再去执行查询

如:String sql = "select * from wish where username='name'";

System.out.println(sql);


打印的语句确信没有问题再执行下面的查询

ResultSet rs=stmt.executeQuery(sql);
meteor1015 2011-02-10
  • 打赏
  • 举报
回复
新手执行的SQL 先用System.out.println() 打印要执行的语句看看是否正确,再去执行查询

如:String sql = ("select * from wish where username='name'";

System.out.println(sql);


打印的语句确信没有问题再执行下面的查询

ResultSet rs=stmt.executeQuery(sql);


clarck_913 2011-02-10
  • 打赏
  • 举报
回复
用 PreparedStatement吧

楼主自己查下用法

可以传递参数支持批量操作,更重要的是防止SQL注入
leo19870706 2011-02-09
  • 打赏
  • 举报
回复
哥们,很给李,顶你,够专业!兄弟,谢谢你!
yuannan 2011-02-09
  • 打赏
  • 举报
回复
代码里使用字符串操作来拼接sql语句的坏处

1. 字符串操作更容易出错。
2. sql语句不可避免地出现在代码里,无法坐到代码与数据分离.代码可读性降低。
3. 效率. 很多情况下需要多次执行同一句sql语句,只是参数不同.如果使用PreparedStatement(Java),只需要在第一次执行是编译sql语句,之后的执行效率可以提高。
4. 如果代码里使用字符串操作来拼接sql语句,那么在编译阶段是不可能发现sql语句错误的.如果使用类库提供的方法来设置参数,可以在编译时就设定参数的类型.
5. 倘若之后要修改sql语句,比如where条件里要多加一个条件,或者为了优化性能要更改一下筛选条件的顺序,这个时候就会发现用字符串拼接是一个灾难,特别是在sql语句比较复杂的时候(有嵌套,多个表相交等).
6. 安全性.字符串拼接sql语句容易遭受sql注入攻击(引用http://www.cnblogs.com/ykt/archive/2007/01/19/624450.html)
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 leo19870706 的回复:]

引用 1 楼 inhibitory 的回复:

ResultSet rs=stmt.executeQuery("select * from wish where username='" + name + ''");

谢谢哥们,真是一针见血啊,谢谢
ResultSet rs=stmt.executeQuery("select * from wish where username='"……
[/Quote]

禁止在 SQL 语句中拼接查询条件,0 分!

应该使用 PreparedStatement:

String sql = "select * from wish where username=?";
ps = con.prepareStatement(sql);
ps.setString(1, name);
rs = ps.executeQuery();
...
leo19870706 2011-02-09
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 inhibitory 的回复:]

ResultSet rs=stmt.executeQuery("select * from wish where username='" + name + ''");
[/Quote]
谢谢哥们,真是一针见血啊,谢谢
ResultSet rs=stmt.executeQuery("select * from wish where username='" + name + "'");
Inhibitory 2011-02-09
  • 打赏
  • 举报
回复
ResultSet rs=stmt.executeQuery("select * from wish where username='" + name + ''");

67,513

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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