在使用DButils时发现SQL语句如:select * from admin where username=? 中
where子句中带?参数时就会查不到数据,而把?直接改成值时如select * from admin where username='test' 就可以。
如果参数不是在where子句中的则可以正常,包括查询和更新插入操作都是这个问题。
代码如下:DataSource ds=null;
Context initContext;
try {
initContext = new InitialContext();
ds = (DataSource) initContext.lookup("java:/comp/env/jdbc/oracleds");
} catch (NamingException e) {
e.printStackTrace();
}
String param[] = {"test"};
QueryRunner qr = new QueryRunner(ds);
Map result = null;
try {
result = qr.query("select * from admin where username=?", param,new MapListHandler());
} catch (SQLException e) {
e.printStackTrace();
}
if(map.size()==0)
//.....
where子句中带?参数时就会查不到数据,而把?直接改成值时如select * from admin where username='test' 就可以。
如果参数不是在where子句中的则可以正常,包括查询和更新插入操作都是这个问题。
代码如下:DataSource ds=null;
Context initContext;
try {
initContext = new InitialContext();
ds = (DataSource) initContext.lookup("java:/comp/env/jdbc/oracleds");
} catch (NamingException e) {
e.printStackTrace();
}
String param[] = {"test"};
QueryRunner qr = new QueryRunner(ds);
Map result = null;
try {
result = qr.query("select * from admin where username=?", param,new MapListHandler());
} catch (SQLException e) {
e.printStackTrace();
}
if(map.size()==0)
//.....
解决方案 »
- jquery如何获取表单提交后,后台方法返回的字符串
- 如何将request中的值填写到jsp页面中
- 如何解决个别字乱码问题
- 网页视频RealOne插件问题
- 如何设置<html:text/>为只读
- 怎么样防止别人下载。???
- 请教<META HTTP-EQUIV=Refresh CONTENT=\"60; URL=nodeb_power_display.wso\">相关问题
- 高手们过来指点利用Excel打印报表的问题?
- 关于浏览器记录搜索历史的问题
- LettuceConnectionFactory是否对于redis以及springboot有版本限制呢?
- jsp中怎么实现上传文件的功能
- 我想学WEB开发,需要学习哪些东西和使用哪些工具?
select * from admin where username=?,
很可能直接语句执行的就是?不是替换后的值
也可能是替换后的值是test非‘test’
毕竟在SQL语句中字符串必须带''比较
使用PreparedStatement.setString(1,"test");
唉,还没看明白啊,你把问好换成任意一个值 ‘test’ 试试,如果可以查出一条,就证明你问号用的有错误
只有PreparedStatement才支持预处理语句,也就是?的替换
而且设置替换的时候数据类型也要设置正确
即pstat.setString(1,"test");
而普通的Statement对象就必须是拼接了,不能替换的。
一般这种底层我不习惯用别人封装的东西,除非用hibernate一类的框架,
不然都是自己写底层SQL执行
你这个问题看来不会有结果了。