您的位置:首页 > 编程语言 > Java开发

Java 访问数据库 --java与DataBase相关知识总结(二)

2009-09-17 22:24 459 查看
package com.test;
import java.sql.*;

/** *//**
* 此例说明的问题:创建Statement对象时控制结果集类型;
* @author     chb
*/

class Hello
...{
public static void main(String args[])
...{
try
...{
/** *//**
* 第一步:加载JDBC驱动;
*/
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");

/** *//**
* 第二步:建立连接;
*/
String url="jdbc:odbc:bookdsn";
Connection con=DriverManager.getConnection(url,"sa","");

/** *//**
* 第三步:创建Statement,执行查询并得到结果集;
* 在此步,可以控制结果集类型、结果集并发类型、可保持结果集;
* createStatement(结果集类型,结果集并发类型,可保持结果集);
*
* 结果集类型:
* ResultSet.TYPE_FORWARD_ONLY ---只能调用next()向下移动,为默认值,结果集为静态;
* ResultSet.TYPE_SCROLL_INSENSITIVE -- 可自由移动,结果集为静态;
* ResultSet.TYPE_SCROLL_SENSITIVE -- 可自由移动,结果集为动态游标;
*
* 结果集并发类型:
* ResultSet.CONCUR_READ_ONLY -- 默认,结果集只读;
* ResultSet.CONCUR_UPDATABLE -- 结果集可更新;
*
* 可保持结果集:
* 通常情况下,提交事务时,操作会关闭当前事务创建的ResultSet对象或者光标;
* ResultSet.HOLD_CURSORS_OVER_COMMIT -- 事务结束后结果集依然保持打开状态;
* ResultSet.CLOSE_CURSORS_AT_COMMIT -- 事务提交后结果集会被关闭;
* 注:该特性从JDBC3.0开始支持,且有些数据库不支持此操作;
*
* 如果execute返回多个记录集,getMoreResultSets方法可使用3个参数:
* Statement.CLOSE_CURRENT_RESULT -- 调用新结果集时关闭当前结果集;
* Statement.KEEP_CURRENT_RESULT -- 调用新结果集时不关闭当前结果集;
* Statement.CLOSE_ALL_RESULTS -- 调用新结果集时关闭原有所有结果集;
* 注:该特性从JDBC3.0开始支持;
*/
Statement stmt=con.createStatement(
ResultSet.TYPE_FORWARD_ONLY,
ResultSet.CONCUR_READ_ONLY);
//ResultSet.HOLD_CURSORS_OVER_COMMIT);

ResultSet rs=stmt.executeQuery("SELECT ID,book_name,book_price,book_quantity from book_stock");

/** *//**
* 第四步:处理结果集;
*/
System.out.println("编号 图书名称 图书单价 图书数量 ");
while(rs.next())
...{
int id=rs.getInt("ID");
String book_name=rs.getString("book_name");
double book_price=rs.getDouble("book_price");
int book_quantity=rs.getInt("book_quantity");
System.out.println(id+" "+book_name+" "+book_price+" "+book_quantity);
}

/** *//**
* 创建可自由移动结果集;
* afterLast()  -- 移动到最后一条之后;
* last()       -- 移动到最后一行可使用
* previous()   -- 向上移动一行
* next()       -- 向下移动一行
* beforeFirst()-- 移动到第一行之前
*/
stmt.close();
stmt=con.createStatement(
ResultSet.TYPE_SCROLL_INSENSITIVE,
ResultSet.CONCUR_READ_ONLY);
rs=stmt.executeQuery("SELECT ID,book_name,book_price,book_quantity from book_stock");
rs.afterLast();//
System.out.println("isAfterLast:" + rs.isAfterLast() );
rs.beforeFirst();
System.out.println("isBeforeFirst:" + rs.isBeforeFirst() );
rs.last();
System.out.println("isLast:" + rs.isLast() );
rs.previous();
System.out.println("isLast:" + rs.isLast() );

/** *//**
* 第五步:关闭连接、结果集;
*/
rs.close();
stmt.close();
con.close();
}
catch(Exception e)
...{
System.out.println("发生异常:"+e);
}
}
}


上面是 创建Statement对象以及控制结果集类型的具体例子。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: