JDBC结果集的处理

来源:互联网 发布:mac子弹头中国专柜价格 编辑:程序博客网 时间:2024/05/17 04:06
 

一.查询

ResultSet对象是由统一形式的列组织的数据行组成。ResultSet对象一次只能看到一个数据行,使用next()方法走到下一个数据行

获得一行数据后,ResultSet对象可以使用getXXX方法获得字段值,将位置索引(第一列为1)或字段名传递给getXXX方法的参数

例如:
ResultSet rs=sql.executeQuery("select * from 成绩表);
String str="";
while(rs.next())
{
    str=rs.getString("姓名");
    System.out.println(str);
}

1.顺序查询

使用结果集合Result的next()方法,可以顺序的查询。next()方法返回一个boolean型数据。当游标移动到最后一行之后返回false

2.游动查询
###当需要在结果集中前后移动或显示结果集指定的一条记录的时候,要用到游动查询

@必须使用下述方法先获得一个Statement对象
Statement stmt=con.createStatement(int type,int concurrency);
@根据参数type,concurrency的取值情况,stmt返回响应类型的结果集
@ResultSet re=stmt.executeQuery(Sql语句)

###type的取值决定滚动的方式
static int TYPE_FORWARD_ONLY
          该常量指示指针只能向前移动的 ResultSet 对象的类型。
static int TYPE_SCROLL_INSENSITIVE
          该常量指示可滚动但通常不受其他的更改影响的 ResultSet 对象的类型。
static int TYPE_SCROLL_SENSITIVE
          该常量指示可滚动并且通常受其他的更改影响的 ResultSet 对象的类型。

###concurrency的取值决定好似否可以用结果集根系数据库
static int CONCUR_READ_ONLY
          该常量指示不可以更新的 ResultSet 对象的并发模式。
static int CONCUR_UPDATABLE
          该常量指示可以更新的 ResultSet 对象的并发模式。

###滚动查询经常用到的Resultset的方法
public boolean previous()将游标向上(后)移动。当移动到结果第一行之前时返回false
public void beforeFirst()将游标放在结果集的初始位置
public void afterLast()将游标放在结果集的最后一行之后
public void first()将游标放到第一行
public last()将游标放到最后一行
public boolean isAfterLast()判断是否游标已到最后一行
public boolean isBeforeFirst()判断游标是否在第一行之前
public boolean isFirst()判断游标是否指向结果集的第一行
public boolean isLast()判断游标是否指向结果集的最后一行
public int getRow()得到当前游标所指行的行号。行号从1开始,如果结果集没有行,返回〇
public boolean absolute(int row)将游标移动到参数row指定的行号,如果row是负数,就是指倒数的第几行的意思,指向无效行则返回false

3.随机查询

@用Math类的静态方法random()可以产生yige大于0小于1 的随机数
@在有下述公式:
int i=(int)(Math.random()*number+1);
产生一个1到number之间的随机数,根据这个随机数将游标移动到响应的行,并输出行
@移动游标
rs.absolute(i);
xxx=re.getXXX();

#######################################

二.更新记录


@可以使用sql语句更新记录中字段的值。Statemnet对象调用方法:
public int executeUpdate(String sqlStatement);
通过参数sqlStatement指定的方式实现对数据库表中记录的更新


添加记录

public int executeUpdate(String sqlStatement);

删除记录

public int executeUpdate(String sqlStatement);

例如:executeUpdate("update students set 数学成绩=88 where姓名="王江")
注意:在查询语句返回结果集后,如果没有立即输出结果集的记录,儿接着执行了更新语句,那个结果集就不可能输出。

###############################################

三.用结果集更新数据库中的表


@使用内存中的ResultSet对象对底层数据库表进行更新,步骤如下:
1.用Connection对象调用如下方法,对一个可以更新底层数据库的Statement对象sql:
     CreateStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSetv.CONCUR_UPADATABLE);
2.执行语句获得ResultSet对象
3.调用响应updateXXX的方法对ResultSet对象中所有行的列值进行更新操作。
4.将rs移动到想要更新的行,然后调用updateRow()方法,更新此行。如果使用rs.insertRow()方法将更新的结果集作为一个新的记录插入到底层的数据库中,此行中未被更新的值的字段在插入后的值默认为null