读取数据库的数据必须掌握ResultSet对象的属性和方法。
常用get方法对行中的数据进行访问
int getInt(int columnIndex)
int getInt(String columnName)
Date getDate(int columnIndex)
Date getDate(String columnName)
Public String getString(int columnIndex)
Public String getString(String columnName)
数据库基本访问格式
Class.forName(“JDBC驱动程序");
Connection con= DriverManager.getConnection(url);
Statement stmt=conn.createStatement(结果集类型,结果集并发性);
ResultSet rs=stmt.executeQuery(DQL语句); 查询
stmt.executeUpdate(DML语句);操作
结果集
Statement对象创建的常见用法
Statement stmt = conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_UPDATABLE);
结果集类型 决定这个Statement对象创建的Rs对象是否可以滚动,是否对数据库中的修改敏感。
ResultSet.TYPE_FORWORD_ONLY(默认值)
ResultSet.TYPE_SCROLL_INSENSITIVE(可滚动,不敏感)
ResultSet.TYPE_SCROLL_SENSITIVE(可滚动,敏感)
结果集并发性 决定Rs是否可以修改数据库中的行。
ResultSet.CONCUR_READ_ONLY(不可修改默认)
ResultSet.CONCUR_UPDATABLE(可以修改)
使用Rs更新,也可以实现添加、删除和修改。
对敏感与否的解释
rs对结果集的修改有两种。
内部修改:可更新结果集的修改,指rs的值变了。
外部修改:其它的程序修改了结果集原来读取的行,指数据库修改了。
由于修改导致结果集和原来的值不同。
修改对结果集的影响如下表:
但是我们可以使用ResultSet对象的refreshRow()方法刷新结果集的当前行,覆盖默认的可见性。将所有的否都变为是。
更新:
rs.absolute(3);//定位更新哪一行
rs.updateInt(“数学”,100);//更新记录集
rs.updateRow();//将更新发送到数据库
删除:
rs.absolute(3);//定位要删除的行
rs.deleteRow();//将删除发送到数据库
添加:
rs.moveToInsertRow();//首先调用moveToInsertRow()创建新行
rs.updateInt(“数学”,100);//利用update设置新行的值
rs.updateString(“姓名”,“张三”);
rs.insertRow();//将新行发送到数据库
光标的维护方法 :
在JDBC1.0中,光标只能利用next方法向前移动一条记录,在2.0中,增加了可滚动结果集,使其可以任意跳转。
next()下一条,true/false
previous()前一条,true/false
first()第一条true/false
last()最后一条true/false
beforeFirst()第一条之前true/false
afterLast()最后一行后面true/false
absolute(int num)移动到指定行,若指定为负数,则从最后一行向前移动。
Relative( int relativeRowNumber)移动到当前行的相对行,参数可以为负数,指当前行之前的行。
在使用可滚动结果集方法移动时,如果不清楚当前位置,可以使用如下方法:
getRow() 返回当前行,若无,则0
isfirst() true/false
isLast() true/false
isBeforeFirst() true/false
isAfterLast() true/false
例:使用javabean和resultSet读取数据库。
准备:
创建数据库dataBase,用户名sa,密码sa
创建表userlist(id,username,addtime)
id:int 主键,标识,自动增加1
username:nvarchar
addtime:smalldatetime,默认值getdate()
随意添加几条数据用来测试
ceshi_sql.jsp用来测试sql是否联结成功
index.jsp使用了javabean连接数据库