为什么我的这个语句不能查询出来结果,在mysql里直接执行,是可以的。我在java里运行出来result里面是null
Stringsql="SELECT*FROMpayfeeannalWHEREPayFeeId=?LIMIT?,?";Object[]params={AccountId,b...
String sql="SELECT * FROM payfeeannal WHERE PayFeeId=? LIMIT ?,?";
Object[] params={AccountId,begin,sum};
Result result=DBHelper.runSelectSql(sql,params);
还有,我的runSelectSql(sql,params);执行另外一个带参数的sql语句是可以的。
public static Result runSelectSql(String sql,Object[] params){
Connection con=null;
PreparedStatement ps=null;
ResultSet res=null;
Result result=null;
try{
con=getConnection();
ps=con.prepareStatement(sql);
for(int i=0;i<params.length;i++){
ps.setObject(i+1, params[i]);
}
res=ps.executeQuery();
result=ResultSupport.toResult(res);
}catch(Exception e){
e.printStackTrace();
}finally{
try{
res.close();
ps.close();
con.close();
}catch(Exception e){
e.printStackTrace();
}
}
return result;
} 展开
Object[] params={AccountId,begin,sum};
Result result=DBHelper.runSelectSql(sql,params);
还有,我的runSelectSql(sql,params);执行另外一个带参数的sql语句是可以的。
public static Result runSelectSql(String sql,Object[] params){
Connection con=null;
PreparedStatement ps=null;
ResultSet res=null;
Result result=null;
try{
con=getConnection();
ps=con.prepareStatement(sql);
for(int i=0;i<params.length;i++){
ps.setObject(i+1, params[i]);
}
res=ps.executeQuery();
result=ResultSupport.toResult(res);
}catch(Exception e){
e.printStackTrace();
}finally{
try{
res.close();
ps.close();
con.close();
}catch(Exception e){
e.printStackTrace();
}
}
return result;
} 展开
5个回答
展开全部
我在使用jdbc执行其他SQL查询时也碰到过类似情况
我想会不会是jdbc不兼容某些sql语句造成的
还有rs是默认单向查询的,楼主结合一下自己的数据库结构看看会不会是顺序问题造成的无结果。
我也很希望知道原因,希望能一起探讨哈~
我想会不会是jdbc不兼容某些sql语句造成的
还有rs是默认单向查询的,楼主结合一下自己的数据库结构看看会不会是顺序问题造成的无结果。
我也很希望知道原因,希望能一起探讨哈~
更多追问追答
追问
我带的条件是查询PayFeeId=1的记录。在数据库中是第一条和第四条符合条件。我以前用的sqlserver,可能没有这样的问题吧。有办法就告诉我啊,我自己也在看看。
追答
那你的limit 参数应该是 (limit 0,n) n>=4才能得到你想要的结果
(这里只是提醒你一下limit用法,不过我想你应该懂得如何使用的)
要不你试一下去掉limit看jdbc能不能查到结果,我上次用jdbc做pivot查询也无法使用
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
楼主,finally的执行顺序要早于 return,finally中res.close();已经关掉了,所以,result 就被清空了
更多追问追答
追问
我把Result 定义在try外面了,在finally关闭的时候,result的值已经取到了啊。
追答
result是个引用,本身没什么值,虽然在执行result=ResultSupport.toResult(res);后指定了新的引用地址,但是在return前就进行的close操作,所以引用没了,你可以试试在result=ResultSupport.toResult(res); 下面加个打印System.out.println(result);应该不是null
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
我不懂java,只是提供个参考了,
ps.setObject(i+1, params[i]);
这里会不会有类型的问题?
比如说,你把一个字符串"123"和一个整数123,放到object数组params中,当PreparedStatement 这个玩意从params里取出值,放到sql语句中时,是直接放的123还是放的'123'?
网上查的,setObject有下面这个重载
void setObject(int parameterIndex, Object x, int TargetJdbcType),
貌似第三个参数就是类型吧
ps.setObject(i+1, params[i]);
这里会不会有类型的问题?
比如说,你把一个字符串"123"和一个整数123,放到object数组params中,当PreparedStatement 这个玩意从params里取出值,放到sql语句中时,是直接放的123还是放的'123'?
网上查的,setObject有下面这个重载
void setObject(int parameterIndex, Object x, int TargetJdbcType),
貌似第三个参数就是类型吧
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
看看你的runSelectSql方法是怎么样写的
更多追问追答
追问
runSelectSql方法补充了。
追答
你打印看看你的res对象取到值没
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
我去payfeeid应该是唯一的吧,既然是唯一,那就只能查到1条数据
,但你的limit是什么意思呢?几条?
,但你的limit是什么意思呢?几条?
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询