Oo ' Smiling on Java ' oO

从梦里回来,依然记得梦里有你...

  BlogJava :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 管理 ::
  8 随笔 :: 0 文章 :: 10 评论 :: 0 Trackbacks

      这两天在回来写一些业务代码的时候,发现需要一个需要获得表的记录数,其实可以通过循环获得,不过,那也是实在效率低的可怜。因为之前没有用过,现在用起来,还真是有点小问题,起初使用JDBC,都是使用 预编译方式PreparedStatement执行SQL语句的,发现rs.last()不能用,那当然rs.getRow()也得不到数据记录数啦。然后问了朋友半天,发现还有个 Statement ,蛮好用的,实现对数据库的一般查询。
      一、不带参的:
      Statement stmt=con.createStatement();
      ResultSet rs=stmt.executeQuery("select * from DBTableName"); 
      以上这种方式是可行的,但是就需要获得记录数来说,这个实现起来恐怕还是有点麻烦,那么就需要来个带参的:Statement stmt = 
      con.createStatement( ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_READ_ONLY);
      ResultSet rs=stmt.executeQuery("select * from DBTableName"); 
      这样就能够很轻松的得到一个记录集行数了。
      至于以上取值方式和PreparedStatement是一样的,就不说了。。。
      具体的实现方式:只要把连接驱动修改一下,就可以直接运行。我睡觉去了。。
      如果要看具体点的可以点击这里啦...

 1 package  sqlpersistent;
 2
 3 import  java.sql.Connection;
 4 import  java.sql.DriverManager;
 5 import  java.sql.ResultSet;
 6 import  java.sql.Statement;
 7
 8 public   class  GetCountTest
 9 {
10     Connection con = null ;
11      public  GetCountTest()  throws  Exception 
12      {
13         Class.forName( " com.microsoft.jdbc.sqlserver.SQLServerDriver " ); // 连接驱动
14         con  =  DriverManager.getConnection( " jdbc:microsoft:sqlserver://localhost:1433;databaseName=[YourDataBaseName] " , " [User] " " [Password] " ); // 连接数据库,此处使用microsoft的    
15     }

16     
17      public   static   int  getUserCount() 
18      {
19         String sql  =   " select * from [YourTableName] "
20          try
21          {
22             Statement stmt  =   new  GetCountTest().con.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_READ_ONLY); // 第一个参数是:游标类型,可以自由的前后滚动;第二个是设置只读            
23             ResultSet rs  =  stmt.executeQuery(sql); // 执行SQL,返回结果集            
24              while  (rs.next())
25              {
26                 rs.last(); // 移动到最后一行
27                  return  rs.getRow(); // 获得当前行号:此处即为最大记录数
28             }
            
29         }

30          catch  (Exception e)
31          {
32             e.printStackTrace();            
33         }

34          return   - 1 ;
35     }

36      public   static   void  main(String[] args)
37      {
38         System.out.println( " 返回的记录数: " + getUserCount());
39     }
    
40 }

41


 

posted on 2006-11-07 01:46 Jwin 阅读(7907) 评论(9)  编辑  收藏 所属分类: JDBC

评论

# re: 获得ResultSet返回记录数 2006-11-07 09:56 马嘉楠
好像不用这么麻烦把,如果只是要记录数的话,改一下SQL语句就可以了

select count(*) total from DBTableName;

rs = stmt.executeQuery(sql);

int totalRows = rs.getLong("total");

之后totalRows就是你想要得记录数,只需要一步就能获得你要的结果

如果把所有的纪录都查出来,一行一行移动到最后一行,再取行号,效率也太慢了

遇到有几万几十万纪录的大表,你就该哭了(即使几千条也很慢啊)

而且如果是大表查数据的话,也只是返回一部分,例如返回前100个记录

select first 100 * from DBTableName

  回复  更多评论
  

# re: 获得ResultSet返回记录数 2006-11-07 10:04 马嘉楠

con.prepareStatement( SQL, ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_READ_ONLY);

SQL是你的SQL语句,我记得似乎这样也可以  回复  更多评论
  

# re: 获得ResultSet返回记录数 2006-11-07 11:42 Jwin
@马嘉楠

这样也是可以的...
发现其实我还是SQL不过关,谢谢嘉楠兄的指导啦..  回复  更多评论
  

# re: 获得ResultSet返回记录数 2006-11-07 16:18 马嘉楠
@Jwin

我也是最近写了一些这方面代码,多练习就熟悉了
其实SQL也有很多东西学的,只不过基本的掌握了,就可以应付大多数问题了
  回复  更多评论
  

# re: 获得ResultSet返回记录数 2006-11-07 21:54 Jwin
@马嘉楠

所以这两天我又在翻Sql的资料...
以防下次出这样的错误...  回复  更多评论
  

# re: 获得ResultSet返回记录数 2007-02-08 14:08 jasonu
rs.getLong("total"); 可以吗?  回复  更多评论
  

# re: 获得ResultSet返回记录数 2007-03-13 20:58 wyp
好象不能显示,,你自己试试看,,  回复  更多评论
  

# re: 获得ResultSet返回记录数 2007-04-10 12:08 furong
为什么按照马嘉楠提到的方法来做
他最后老提示我说
at sun.jdbc.odbc.JdbcOdbcResultSet.getInt(Unknown Source)
at sun.jdbc.odbc.JdbcOdbcResultSet.getInt(Unknown Source)
好象是total那里出错了
请问这是为什么呢  回复  更多评论
  

# re: 获得ResultSet返回记录数 2009-09-02 16:09 douboer
int totalRows = rs.getLong("total");
类型就不对,你试过吗?不懂不要瞎说  回复  更多评论
  


只有注册用户登录后才能发表评论。


网站导航: