jdbc2.0的主要特性之java篇
JDBC 2.0实现可滚动结果集,并使用结果集控制游标,访问整张表;
package com.mldn;
import java.sql.DriverManager;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
public class ScrollResult
{
// 连接驱动路径
public static final String DRIVER = “com.mysql.jdbc.Driver”; // “org.gjt.mm.mysql.driver”
// 定义数据源URL:数据库地址
public static final String DBURL = “jdbc:mysql://localhost:3306/school?characterEncoding=utf8”;
// 定义数据库登录的用户名:
public static final String USERNAME = “root”;
// 定义数据库登录的密码:
public static final String PASSWORD = “123456”;
public static void main(String[] args) throws Exception // 抛出所有异常
{
Connection conn = null; // 数据库连接
PreparedStatement pstmt = null; // 预编译语句
ResultSet rs = null; // 结果集
// 加载数据库驱动
Class.forName(DRIVER);
// 获取数据库连接
conn = DriverManager.getConnection(DBURL, USERNAME, PASSWORD);
String sql = “select id, name, age, sex, birthday from student order by id asc”;
// 获取可滚动的结果集: 对并发更改敏感,并发只读,这是jdbc2.0的api
pstmt = conn.prepareStatement(sql, ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_READ_ONLY);
// 查询
rs = pstmt.executeQuery(); // 默认地, rs的游标在First行之前,此时读不出数据
rs.next(); // 游标下移一行
print(rs); // ubuntu@xu-desktop:~$ java com.mldn.ScrollResult id:1 姓名:王敏 年龄:王敏 性别:女 生日:2009-01-05
rs.absolute(2); // 游标定位在第二行
print(rs); // id:3 姓名:王方 年龄:王方 性别:女 生日:2009-01-05 // 这是第二行
rs.first(); // 游标定位第一行 等价于 absolute(1)
print(rs); // id:1 姓名:王敏 年龄:王敏 性别:女 生日:2009-01-05
rs.afterLast(); // 游标到Last行后面
rs.previous(); // 游标往前移动一行到最后一行上
print(rs); // id:25 姓名:k187 年龄:k187 性别:男 生日:1982-02-25 // 最后一行
rs.beforeFirst(); // 游标到First行前面
rs.next(); // 游标往下移动一行到第一行上
print(rs); // id:1 姓名:王敏 年龄:王敏 性别:女 生日:2009-01-05
rs.absolute(-1); // 等价于 last(); 最后一行
print(rs); // id:25 姓名:k187 年龄:k187 性别:男 生日:1982-02-25
rs.close();
pstmt.close();
conn.close();
}
public static void print(ResultSet rs) throws Exception
{
if (rs.getRow() > 0)
{
int id = rs.getInt(1);
String name = rs.getString(2);
int age = rs.getInt(3);
String sex = rs.getString(4);
java.util.Date birth = rs.getDate(5);
System.out.println(“id:” + id + ” 姓名:” + name + ” 年龄:” + name + ” 性别:” + sex + ” 生日:” + birth);
}
}
}
/*
此种操作,不宜在开发中使用,因为大量的可滚动的查询,将占用大量的内存空间!
*/
———-使用可滚动的结果集插入一行:
package com.mldn;
import java.sql.DriverManager;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
public class ScrollResultUpdate
{
// 连接驱动路径
public static final String DRIVER = “com.mysql.jdbc.Driver”; // “org.gjt.mm.mysql.driver”
// 定义数据源URL:数据库地址
public static final String DBURL = “jdbc:mysql://localhost:3306/school?characterEncoding=utf8”;
// 定义数据库登录的用户名:
public static final String USERNAME = “root”;
// 定义数据库登录的密码:
public static final String PASSWORD = “123456”;
public static void main(String[] args) throws Exception // 抛出所有异常
{
Connection conn = null; // 数据库连接
PreparedStatement pstmt = null; // 预编译语句
ResultSet rs = null; // 结果集
// 加载数据库驱动
Class.forName(DRIVER);
// 获取数据库连接
conn = DriverManager.getConnection(DBURL, USERNAME, PASSWORD);
String sql = “select id, name, age, sex, birthday from student”;
// 获取可滚动的结果集: 对并发更改敏感,并发可更新,这是jdbc2.0的api
pstmt = conn.prepareStatement(sql, ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_UPDATABLE);
// 查询
rs = pstmt.executeQuery();
// 移动游标到插入行
rs.moveToInsertRow();
// 设置插入值
rs.updateString(2, “k187”);
rs.updateInt(3, 2);
rs.updateString(4, “女”);
rs.updateDate(5, new java.sql.Date(new java.util.Date().getTime())); // 日期必须用sql支持的
// 执行插入
rs.insertRow();
// 移动到当前行:插入的行的前面
//rs.moveToCurrentRow(); // 只有insertRow有效,但此时的位置不是插入的行,而是插入的行的前面
//rs.last(); // 这才是插入的行
rs.next(); // id:1 姓名:王敏 年龄:王敏 性别:女 生日:2009-01-05,这也是插入的行,如果没有这样的操作,print不会打印内容1
print(rs); // 打印插入的行
}
public static void print(ResultSet rs) throws Exception
{
if (rs.getRow() > 0)
{
int id = rs.getInt(1);
String name = rs.getString(2);
int age = rs.getInt(3);
String sex = rs.getString(4);
java.util.Date birth = rs.getDate(5);
System.out.println(“id:” + id + ” 姓名:” + name + ” 年龄:” + name + ” 性别:” + sex + ” 生日:” + birth);
}
}
}
———使用可滚动结果集更新一行:
package com.mldn;
import java.sql.DriverManager;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
public class ScrollResultUpdate
{
// 连接驱动路径
public static final String DRIVER = “com.mysql.jdbc.Driver”; // “org.gjt.mm.mysql.driver”
// 定义数据源URL:数据库地址
public static final String DBURL = “jdbc:mysql://localhost:3306/school?characterEncoding=utf8”;
// 定义数据库登录的用户名:
public static final String USERNAME = “root”;
// 定义数据库登录的密码:
public static final String PASSWORD = “123456”;
public static void main(String[] args) throws Exception // 抛出所有异常
{
Connection conn = null; // 数据库连接
PreparedStatement pstmt = null; // 预编译语句
ResultSet rs = null; // 结果集
// 加载数据库驱动
Class.forName(DRIVER);
// 获取数据库连接
conn = DriverManager.getConnection(DBURL, USERNAME, PASSWORD);
String sql = “select id, name, age, sex, birthday from student”;
// 获取可滚动的结果集: 对并发更改敏感,并发可更新,这是jdbc2.0的api
pstmt = conn.prepareStatement(sql, ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_UPDATABLE);
// 查询
rs = pstmt.executeQuery();
// 移动游标到更新行
rs.absolute(5);
// 设置更新值
rs.updateString(“name”, “k187”);
rs.updateInt(3, 2);
rs.updateString(4, “女”);
rs.updateDate(5, new java.sql.Date(new java.util.Date().getTime())); // 日期必须用sql支持的
// 执行更新
rs.updateRow();
print(rs); // 打印更新的行
rs.close();
pstmt.close();
conn.close();
}
public static void print(ResultSet rs) throws Exception
{
if (rs.getRow() > 0)
{
int id = rs.getInt(1);
String name = rs.getString(2);
int age = rs.getInt(3);
String sex = rs.getString(4);
java.util.Date birth = rs.getDate(5);
System.out.println(“id:” + id + ” 姓名:” + name + ” 年龄:” + age + ” 性别:” + sex + ” 生日:” + birth);
}
}
}
/*
ubuntu@xu-desktop:~$ java com.mldn.ScrollResultUpdate
id:5 姓名:k187 年龄:2 性别:女 生日:2010-04-17
// 第5行被更新了!当然也可以采用PreparedStatement对象的set方法设置选择更新哪一行;
*/
——取消更新:
package com.mldn;
import java.sql.DriverManager;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
public class ScrollResultUpdate
{
// 连接驱动路径
public static final String DRIVER = “com.mysql.jdbc.Driver”; // “org.gjt.mm.mysql.driver”
// 定义数据源URL:数据库地址
public static final String DBURL = “jdbc:mysql://localhost:3306/school?characterEncoding=utf8”;
// 定义数据库登录的用户名:
public static final String USERNAME = “root”;
// 定义数据库登录的密码:
public static final String PASSWORD = “123456”;
public static void main(String[] args) throws Exception // 抛出所有异常
{
Connection conn = null; // 数据库连接
PreparedStatement pstmt = null; // 预编译语句
ResultSet rs = null; // 结果集
// 加载数据库驱动
Class.forName(DRIVER);
// 获取数据库连接
conn = DriverManager.getConnection(DBURL, USERNAME, PASSWORD);
String sql = “select id, name, age, sex, birthday from student”;
// 获取可滚动的结果集: 对并发更改敏感,并发可更新,这是jdbc2.0的api
pstmt = conn.prepareStatement(sql, ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_UPDATABLE);
// 查询
rs = pstmt.executeQuery();
// 移动游标到更新行
rs.absolute(5);
// 设置更新值
rs.updateString(“name”, “k187”);
rs.updateInt(3, 2);
rs.updateString(4, “女”);
rs.updateDate(5, new java.sql.Date(new java.util.Date().getTime())); // 日期必须用sql支持的
// 取消更新
rs.cancelRowUpdates(); // 只有在更新前面被调用时才可以取消
// 执行更新
rs.updateRow();
print(rs); // 打印更新的行
rs.close();
pstmt.close();
conn.close();
}
public static void print(ResultSet rs) throws Exception
{
if (rs.getRow() > 0)
{
int id = rs.getInt(1);
String name = rs.getString(2);
int age = rs.getInt(3);
String sex = rs.getString(4);
java.util.Date birth = rs.getDate(5);
System.out.println(“id:” + id + ” 姓名:” + name + ” 年龄:” + age + ” 性别:” + sex + ” 生日:” + birth);
}
}
}
/*
ubuntu@xu-desktop:~$ java com.mldn.ScrollResultUpdate
id:5 姓名:www 年龄:20 性别:女 生日:2010-04-17
// 第5行没有被修改
*/
——-使用可滚动的结果集删除一行:
package com.mldn;
import java.sql.DriverManager;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
public class ScrollResultDelete
{
// 连接驱动路径
public static final String DRIVER = “com.mysql.jdbc.Driver”; // “org.gjt.mm.mysql.driver”
// 定义数据源URL:数据库地址
public static final String DBURL = “jdbc:mysql://localhost:3306/school?characterEncoding=utf8”;
// 定义数据库登录的用户名:
public static final String USERNAME = “root”;
// 定义数据库登录的密码:
public static final String PASSWORD = “123456”;
public static void main(String[] args) throws Exception // 抛出所有异常
{
Connection conn = null; // 数据库连接
PreparedStatement pstmt = null; // 预编译语句
ResultSet rs = null; // 结果集
// 加载数据库驱动
Class.forName(DRIVER);
// 获取数据库连接
conn = DriverManager.getConnection(DBURL, USERNAME, PASSWORD);
String sql = “select id, name, age, sex, birthday from student”;
// 获取可滚动的结果集: 对并发更改敏感,并发可更新,这是jdbc2.0的api
pstmt = conn.prepareStatement(sql, ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_UPDATABLE);
// 查询
rs = pstmt.executeQuery();
// 移动游标到要删除的行
rs.absolute(20);
// 执行删除
rs.deleteRow();
rs.close();
pstmt.close();
conn.close();
}
}
/*
ubuntu@xu-desktop:~$ java com.mldn.ScrollResultUpdate
id:5 姓名:www 年龄:20 性别:女 生日:2010-04-17
// 第5行没有被修改
//
*/
// jdbc2.0对结果集的提升很方便,但是效率不高,正常情况下不如直接使用PreparedStatement;
声明: 除非转自他站(如有侵权,请联系处理)外,本文采用 BY-NC-SA 协议进行授权 | 嗅谱网
转载请注明:转自《jdbc2.0的主要特性之java篇》
本文地址:http://www.xiupu.net/archives-162.html
关注公众号:
微信赞赏
支付宝赞赏