我们知道,在c#中,有ado.net这种东西,其中有sqlreader来获取数据库的结果集。
在javawb里,这个重任由ResultSet来担任。
例:
CallableStatement call = null;
int result=-1;
try {
//使用数据连接池和数据源
Context context = new InitialContext();
Context envContext = (Context) context.lookup("java:comp/env/");
DataSource ds = (DataSource) envContext.lookup("jdbc/testDS");
Connection conn = ds.getConnection();
//使用MYSQL的储存方法
call = conn.prepareCall("{call select_id_fromCourseName(?)}");
//设置储存方法参数
call.setString(1,courseName);
//执行数据库,返回到ResultSet 里
ResultSet rs= call.executeQuery();
//这里就是ResultSet 读取返回的数据
while (rs.next()){
result=rs.getInt(1);
}
//下一行这种方法是没有效果的
//result=rs.getInt("courseId");
rs.close();
call.close();
conn.close();
值得一提:
call.execute();返回布尔,call.executeQuery();返回ResultSet。
详解:
ResultSet类是一种数据库查询结果存储类,就是当查询数据库的时候,可以将查询的结果放在具体的ResultSet对象中,其实我们把这种存储查询结果的ResultSet对象叫做ResultSet结果集。比如我们用aaa表示一个ResultSet对象。
那么查询的结果无非就是一些符合查询条件的记录集,ResultSet结果集有一个索引指针,最初这个指针是指向第一条记录的前一个位置,也就是没有指向任何内容,使用aaa.next()方法就会使指针往后移动指向下一个记录,所以一定要先执行一次next()函数才会让指针指向第一条记录。正因为如此,直接【result=rs.getInt("courseId");】这样是没用的。
一条记录可能会有好几个属性的内容,那么我们可以使用getXXX(int index)方法类获得具体属性的值,XXX代表以什么样的数据类型方式来读取内容,当指针指向一条记录的时候,比如这条记录的内容就是:0001 张三 3岁。而且这三个属性的值的类型全是String类型,那么我们可以使用aaa.getString(1)来获得内容0001,使用getString(2)来获得内容张三。
值得注意:ResultSet的一条记录的索引位置是从1开始的,而不是从0开始。