前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >JDBC 通过ResultSet执行查询操作(4)

JDBC 通过ResultSet执行查询操作(4)

作者头像
桑鱼
发布2020-03-17 16:47:47
9640
发布2020-03-17 16:47:47
举报

对数据库的查询操作,一般需要返回查询结果,在程序中,JDBC为我们提供了ResultSet接口来专门处理查询结果集

使用ResultSet的步骤:

1、加载数据库驱动程序:Class.forName(驱动程序类) 2、通过用户名密码和连接地址获取数据库连接对象:DriverManager.getConnection(连接地址,用户名,密码) 3、构造查询SQL语句

  1. 调用Statement 对象的executeQuery(sql) 可以得到结果集
  2. resultSet 实际上返回的就是一张数据表。有一个指针指向数据表的第一行的前面 6、处理结果 7、ResultSet 也需要关闭资源
  3. 可以调用next()方法检测下一行是够有效。若有效该方法返回true,且指针下移。相当于Interator对象的hasNext()和next()方法的结合体
  4. 当指针定位到一行时,可以通过getXxx(index)或getXxx(columnName) 获得每一列的值。例如:getInt(1),getString("name");
代码语言:javascript
复制
// 表结构
create database mydb; # 创建数据库

use mydb;#使用数据库

create table customer_table( #创建分类表
id int PRIMARY KEY AUTO_INCREMENT,  
name varchar(100),
age varchar(100),
birth DATE
);
代码语言:javascript
复制
class MyTest {
    // 关闭数据库资源(注意关闭要从里到外)
    public void releaseDB(ResultSet resultSet, Statement statement, Connection connection) {
        if (resultSet != null) {
            try {
                resultSet.close();
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
        if (statement != null) {
            try {
                statement.close();
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
        if (connection != null) {
            try {
                connection.close();
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    }

    // 获取数据库连接
    public Connection myConnection() throws Exception {
        String driverClass = "com.mysql.jdbc.Driver";
        String jdbcUrl = "jdbc:mysql://localhost:3306/mydb";
        String user = "user";
        String password = "password";

        Class.forName(driverClass);
        Connection connection = DriverManager.getConnection(jdbcUrl, user, password);
        return connection;
    }
    public void  testResultSet(){
        Connection conn = null;
        Statement statement = null;
        ResultSet rs = null;
        try{
            // 1. 获得Connection
            conn = myConnection();
            // 2. 获取Statement
            statement = conn.createStatement();
            // 3. 准备SQL
            String sql = "select id,name,email,birth from customers where id = 4";
            // 4. 执行查询,得到ResultSet
            rs = statement.executeQuery(sql);
            // 5. 处理ResultSet
            while(rs.next()){
                int id = rs.getInt(1);
                String name = rs.getString("name");
                String email = rs.getString(3);
                Date birth = rs.getData(4);
                System.out.println(id);
                System.out.println(name);
                System.out.println(email);
                System.out.println(birth);
            }
        }catch(Exception e){
            e.printStackTrace();
        }finally{
            releaseDB.release(rs,statement,conn);
        }
    }

    // 可以执行的sql:update、insert、delete
    public void myStatement() throws SQLException {
        Connection conn = null;
        Statement statement = null;
        try {
            // 1. 获取数据库连接
            conn = myConnection();
            // 2. 准备执行的SQL
            String sql = "Insert into table(name,email,birth) values('xyz','xyz@123.com','xxxx-xx-xx')";
            // 3. 执行SQL(注意执行的SQL可以是INSERT、UPDATE或DELETE。但不能是SELECT)
            // 1)获取操作SQL语句的Statement对象
            // 通过调用Connection的createStatement()方法来获取
            statement = conn.createStatement();
            // 2)调用Statement对象的executeUpdate(sql)执行SQL语句进行插入
            statement.executeUpdate(sql);
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            if (statement != null) {
                try {
                    statement.close();
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
            if (conn != null) {
                try {
                    conn.close();
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        }
    }
}

ResultSetMetaData类

利用ResultSet的getMetaData的方法可以获得ResultSetMetaData对象,ResultSetMetaData存储了 ResultSet对象中列的类型和属性信息的对象。

常见API

代码语言:javascript
复制
// 方法说明:获取指定列的名称
getColumnName(int column):
// 方法说明:返回当前ResultSet对象中的列数
getColumnCount():
// 获取用于打印输出和显示的指定列的建议标题。
String getColumnLabel(int column)
代码语言:javascript
复制
public void myTest01() throws ClassNotFoundException, SQLException {
    String driverClass = "com.mysql.jdbc.Driver";
    String jdbcUrl = null;
    String user = null;
    String password = null;
    Class.forName(driverClass);
    Connection connection = DriverManager.getConnection(jdbcUrl, user, password);
    String sql = "SELECT flow_id flowId, type, id_card idCard, "
                + "exam_card examCard, student_name studentName, "
                + "location, grade " + "FROM examstudent WHERE flow_id = ?";
    PreparedStatement preparedStatement = null;
    ResultSet resultSet = null;
    preparedStatement = connection.prepareStatement(sql);
    preparedStatement.setInt(1, 5);
    resultSet = preparedStatement.executeQuery();
    ResultSetMetaData rsmd = resultSet.getMetaData();
    String columnName = rsmd.getColumnName(1); // 获取指定列的名称
    int columCount = rsmd.getColumnCount();// 返回当前ResultSet对象中的列数
    String columnLabel= rsmd.getColumnLabel(1);//获取用于打印输出和显示的指定列的建议标题。
    }
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • ResultSetMetaData类
相关产品与服务
数据库
云数据库为企业提供了完善的关系型数据库、非关系型数据库、分析型数据库和数据库生态工具。您可以通过产品选择和组合搭建,轻松实现高可靠、高可用性、高性能等数据库需求。云数据库服务也可大幅减少您的运维工作量,更专注于业务发展,让企业一站式享受数据上云及分布式架构的技术红利!
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档