当前位置:编程学习 > JAVA >>

为什么对数据库的遍历,不能查询到最后一行!

我用的是access 数据库,
public List ZhifuOrderInfo(String orderid) {
List<OrderInfo>list = new ArrayList();
try {
Connection con = DBUtil.getConnection();
String sql = "SELECT * FROM `orderinfo` WHERE `orderid` like "+orderid;
PreparedStatement pst = con.prepareStatement(sql);
ResultSet rs = pst.executeQuery();

while(rs.next()) {
OrderInfo oi = new OrderInfo();
oi.setOrderid(rs.getString(2));
oi.setGoodname(rs.getString(4));
                oi.setPrice(rs.getString(5));
                oi.setGoodtype(rs.getString(6));
                oi.setNumber(rs.getString(7));
                oi.setSum(rs.getString(8));  
                System.out.println("===========================");
                System.out.println("orderid="+orderid);
                System.out.println(oi.getGoodname()+"zhifu");
                System.out.println(oi.getOrderid()+"zhifu");
                System.out.println("===========================");
              
                list.add(oi);                       
}

rs.close();
pst.close();
con.close();
}catch(Exception e) {
e.printStackTrace();
}
return list;
}

同一个订单有三条数据,测试了一下只能输出前两条数据,最后一条不能输出;数据库里面是有三条的!
--------------------编程问答-------------------- 把你拼接好的sql直接放到数据库中去执行下,看看能查出来几行 --------------------编程问答--------------------
引用 1 楼 u012047741 的回复:
把你拼接好的sql直接放到数据库中去执行下,看看能查出来几行

===========
不知道用这个数据库怎么查询,但是我在另一个程序中也使用了同样的语句,是可以查询的。
而且我这个语句如果是出错的话,应该不是只遍历到倒数第二个吧。。 --------------------编程问答-------------------- 嗯,语法不会有问题,在数据库查一遍只是看看你的sql到底写的对不对

sql没问题的话再检查你的程序 --------------------编程问答--------------------   list.add(oi);  看看添加几次。      --------------------编程问答--------------------
引用 3 楼 u012047741 的回复:
嗯,语法不会有问题,在数据库查一遍只是看看你的sql到底写的对不对

sql没问题的话再检查你的程序

======
检查过了,我没发现 --------------------编程问答--------------------
引用 4 楼 rui888 的回复:
  list.add(oi);  看看添加几次。     

===========
也是只能添加两次啊,我在while 里面输出所有遍历的商品名,最后一个商品名根本不输出 --------------------编程问答-------------------- 把你的sql直接数据库执行看能否得出三条。还有,你的sql对orderid的筛选为什么用like?但是却不是像'%%' --------------------编程问答-------------------- 把where去掉再看。 --------------------编程问答-------------------- PreparedStatement
还用SQL拼接 o(︶︿︶)o 唉 --------------------编程问答-------------------- while(rs.next())

我觉得一般都是rs.hasnext(),不然的话不是最后一条没了,而是第一条直接被你跳过去了。 --------------------编程问答--------------------   String sql = "SELECT count(*) FROM `orderinfo` WHERE `orderid` like "+orderid;  你查查数据有多少条,我觉得的数据就两条可能 --------------------编程问答--------------------
引用 9 楼 zhuchao_ko 的回复:
PreparedStatement
还用SQL拼接 o(︶︿︶)o 唉


一个道理。。。还是要拼啊,,只不过 推荐pre..... --------------------编程问答--------------------
引用 10 楼 jinhailong 的回复:
while(rs.next())

我觉得一般都是rs.hasnext(),不然的话不是最后一条没了,而是第一条直接被你跳过去了。


hasnext()?你确定? --------------------编程问答--------------------
引用 13 楼 zhouren1314 的回复:
Quote: 引用 10 楼 jinhailong 的回复:

while(rs.next())

我觉得一般都是rs.hasnext(),不然的话不是最后一条没了,而是第一条直接被你跳过去了。


hasnext()?你确定?


不知道你用的 ResultSet rs 用的是哪个类,不过按照一般常理,刚开始的时候都是指向结果集的第一条记录,这时候你就直接引用输出就可以,然后判断hasnext()是否为真,也就是当前是否为最后一条记录,如果是就执行next()然后进行下一个循环。

btw:为什么不用iterator呢? --------------------编程问答--------------------
引用 14 楼 jinhailong 的回复:
Quote: 引用 13 楼 zhouren1314 的回复:

Quote: 引用 10 楼 jinhailong 的回复:

while(rs.next())

我觉得一般都是rs.hasnext(),不然的话不是最后一条没了,而是第一条直接被你跳过去了。


hasnext()?你确定?


不知道你用的 ResultSet rs 用的是哪个类,不过按照一般常理,刚开始的时候都是指向结果集的第一条记录,这时候你就直接引用输出就可以,然后判断hasnext()是否为真,也就是当前是否为最后一条记录,如果是就执行next()然后进行下一个循环。

btw:为什么不用iterator呢?


貌似ResultSet就没有 hasnext()方法,,,再说 怎么又和iterator迭代器扯上关系了,。。 --------------------编程问答-------------------- 楼主写的jdbc原则上没错,,,要检查下sql 语句与打印出来的是否一致。。 --------------------编程问答--------------------
引用 15 楼 zhouren1314 的回复:
Quote: 引用 14 楼 jinhailong 的回复:

Quote: 引用 13 楼 zhouren1314 的回复:

Quote: 引用 10 楼 jinhailong 的回复:

while(rs.next())

我觉得一般都是rs.hasnext(),不然的话不是最后一条没了,而是第一条直接被你跳过去了。


hasnext()?你确定?


不知道你用的 ResultSet rs 用的是哪个类,不过按照一般常理,刚开始的时候都是指向结果集的第一条记录,这时候你就直接引用输出就可以,然后判断hasnext()是否为真,也就是当前是否为最后一条记录,如果是就执行next()然后进行下一个循环。

btw:为什么不用iterator呢?


貌似ResultSet就没有 hasnext()方法,,,再说 怎么又和iterator迭代器扯上关系了,。。


你没有说你这个ResultSet是从哪儿来的(没有import),所以只能靠猜了,不过我见过的用过的ResultSet基本上都有hasNext(),另外用iterator是推荐写法,如果对象支持此接口的话最好就用这个接口来遍历。 --------------------编程问答-------------------- java.sql包的。。

http://docs.oracle.com/javase/7/docs/api/java/sql/ResultSet.html

麻烦你给找一个。。

说你用过。。是哪个? --------------------编程问答-------------------- 有可能第一条跳过去了,最后一条反而在。。 --------------------编程问答--------------------
引用 19 楼 milkandsmallbee 的回复:
有可能第一条跳过去了,最后一条反而在。。

=========
已经遍历出来过了,第一条出来,最后一条没有出来 --------------------编程问答--------------------
引用 4 楼 rui888 的回复:
  list.add(oi);  看看添加几次。     

==============
最后一次不添加,因为rs.next都不能遍历出来最后一次。。。
补充:Java ,  Web 开发
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,