`
Aga
  • 浏览: 214584 次
  • 性别: Icon_minigender_1
  • 来自: 天津
社区版块
存档分类
最新评论

解决ResultSet中无法获取行数的问题

阅读更多
昨天好友朱凌问了我一个问题,怎样从ResultSet中读取行数?
我google了一下,发现目前最常用的做法如下:
Connection conn = DriverManager.getConnection("...");
Statement stmt = conn.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_UPDATABLE);
			
ResultSet rs = conn.prepareStatement("select ...").executeQuery();

rs.last();
rs.getRow();

但是我利用家里的环境试了一下,却发现不好用。仔细考虑一下:发现这个方法并不是很巧妙,因为在rs.last()之后还是需要把游标滚到开头。效率不是很高。
另外一种方式就是先
select count(*) from ...

然后再
select ...

这样的问题是需要2次stmt,可能效率会受到影响。早晨,我想起了另外一种更为巧妙的解决方法,如下:
先建表:
create table try(
try_id integer,
try_name varchar2(10)
);

然后随便向里面填几行输入。
然后再sqlplus中输入如下内容:
select count(*), 'head' from try
union all
select try_id, try_name from try

利用一个union操作把两个查询进行一个并操作。
完毕。


另外:以上操作,我再mysql和oracle数据库进行过调试,没有问题,其他数据库运行情况不详
分享到:
评论
17 楼 fastwind 2008-03-03  
这样不行  我做了一个实验  我现在的工程名字叫yh jsp也在yh下, yh在webapps下 webapps在tomcat下。 也就是说 /tomcat/webapps/yh/index.jsp 是这样的一个目录  现在我的js 代码 是放在了和tomcat文件夹同级 的一个文件夹下 
应该是../../../能到tomcat同级了吧 

16 楼 Aga 2008-03-03  
../../../some folder
15 楼 fastwind 2008-03-03  
我现在要在jsp页中引一个.js的文件,像下面这样
<script src="/aws_js/effect.js" type="text/javascript" ></script>


但是这个.js文件不在tomcat 下的webapps文件夹下,在这个jsp页的上一级的上一级的上一级的一个文件夹下面,这个src怎么写?
14 楼 Aga 2008-02-29  
http://news.yahoo.com/s/ap/20080227/ap_on_bi_ge/eu_microsoft;_ylt=AiEFxZc62_t27uXEVtmdt36s0NUE
13 楼 Aga 2008-02-28  
http://www.seomoz.org/ip2loc
12 楼 fastwind 2008-02-27  
这个破debug啊,我现在干脆直接run算了
反正不管怎么样,我这个树是做完了!
11 楼 Aga 2008-02-27  
debug就是一个很有趣的东西.
你可以把它当作一个监视线程来看.
10 楼 fastwind 2008-02-27  
现在已经没问题了,
不过要debug的话 可能就不行了!~~
9 楼 Aga 2008-02-27  
你把他们都关闭了再看看。
看看再有什么问题
8 楼 fastwind 2008-02-27  
对了   忘了这个问题了,要如果debug怎么办啊
7 楼 Aga 2008-02-27  
我明白了~
你是不是用的debug模式?
你的
rs
stmt
conn
都没有关闭!
6 楼 fastwind 2008-02-27  
我觉的很离奇的一个问题,第一次打印是第一行第一列,第二次打印是第二行第二列,第一三次打印是第三行第三列,第四次打印是第四行第四列
按道理来讲应该指针在执行一次rs.next()后 就应该不会再变了,而现在打印一次,指针往下走一次
5 楼 Aga 2008-02-27  
没遇到过,
我觉得你那么些是正确的。
要不今天晚上我帮你看看吧。
我这里没有数据库
4 楼 fastwind 2008-02-27  
0 -1 All          Y
1 0 Electronics Y
2 0 Books          Y
3 0 Home & Garden Y
4 1 Audio & Video Y
5 1 Camera & Photo Y
6 1 Computers          Y
7 1 Software          Y
8 2 Novels          Y
9 2 Entertainment Y
10 2 Cooking          Y
11 6 Desktops          Y
12 6 Laptops          Y


这个是我查询后数据库的结果
按我上面写的程序 打印的结果就是0    0    Books    Y
指针每次都发生了变化
3 楼 fastwind 2008-02-27  
我知道是rs.next()是移动一行啊
我现在就是想取一行的 4列的值
你加的那个是循环第一列的所有值

我现在移动到第一行,然后将他的4列全部打印,我用上面我写的就出问题了!
2 楼 Aga 2008-02-27  
while(rs.next()){
    rs.getString(1);
}

每rs.next()一次就是移动一行
rs.getXXX(index)是取该行第index个列。


你把行和列搞混了。

ps.你们那里还要人么?
1 楼 fastwind 2008-02-27  
String sql="select * from product_category where active_status='Y'";//一个查询语句
		try {
			Class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver");
		} catch (ClassNotFoundException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		Connection con;
		try {
			con = DriverManager.getConnection("jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=TreeView","sa","sa");
			Statement sta=con.createStatement();
			ResultSet rs=sta.executeQuery(sql);
			rs.next();			
			System.out.println(rs.getString(1));
			System.out.println(rs.getString(2));
			System.out.println(rs.getString(3));
			System.out.println(rs.getString(4));
			
		} catch (SQLException e) {
			e.printStackTrace();
		}

相关推荐

Global site tag (gtag.js) - Google Analytics