jdbc2.0的主要特性之java篇

JDBC 2.0实现可滚动结果集,并使用结果集控制游标,访问整张表;

package com.mldn;

import java..DriverManager;

import java..Connection;

import java..PreparedStatement;

import java..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 = “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篇
本文地址:https://www.zhiletu.com/archives-162.html
关注公众号:智乐兔

赞赏

wechat pay微信赞赏alipay pay支付宝赞赏

上一篇
下一篇

相关文章

在线留言

你必须 登录后 才能留言!

在线客服
在线客服 X

售前: 点击这里给我发消息
售后: 点击这里给我发消息

智乐兔官微