JDBC学习(四) --- ResultSet结果集

 ResultSet是JDBC中的一个接口,用于表示由数据库执行查询操作后返回的结果集。使用ResultSet接口,可以访问查询结果的当前行,并可以逐行移动结果集,从而让我们能够对结果集中的每行数据进行处理。在JDBC中,ResultSet接口由Statement.executeQuery()方法或PreparedStatement.executeQuery()方法返回

 使用ResultSet接口时,通常是以以下步骤进行操作:

  1. 将光标移动到结果集的第一行
  2. 访问当前行的数据
  3. 在结果集中移动光标
  4. 释放资源

 现给出一个完整的基础示例:

import org.junit.Test;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;

public class JdbcResultSetExample {
    static String user = "YourName";
    static String password = "YourPassword";
    static String url = "jdbc:mysql://localhost:3306/jdbcdata";
    static String className = "com.mysql.cj.jdbc.Driver";
    // 获取数据库连接操作
    public Connection getJDBCConnection() throws Exception{
        Class.forName(className);
        Connection connection = DriverManager.getConnection(url, user, password);
        if(connection != null) {
            return connection;
        }
        return null;
    }

    @Test
    public void resultSetTest() throws Exception{
        // 获取连接
        Connection conn = getJDBCConnection();
        if(conn != null){
            // 待执行的SQL语句
            String sql = "select job_id, job_title, min_salary, max_salary from jobs where min_salary > ? and max_salary < ?";
            // 预编译
            PreparedStatement preparedStatement = conn.prepareStatement(sql);
            // 设置参数
            preparedStatement.setInt(1,8000);
            preparedStatement.setInt(2,20000);
            // 执行SQL语句,获取结果集
            ResultSet resultSet = preparedStatement.executeQuery();
            while (resultSet.next()){
                // 获取一个对象的信息
                String job_id = resultSet.getString("job_id");
                String job_title = resultSet.getString(2);
                int min_salary = resultSet.getInt("min_salary");
                int max_salary = resultSet.getInt(4);
                // 输出
                System.out.println(job_id + " " + job_title + " " + min_salary + " " + max_salary) ;
            }
            // 关闭
            conn.close();
            preparedStatement.close();
            resultSet.close();
        }
    }
}

 运行结果:

AC_MGR Accounting Manager 8200 16000
FI_MGR Finance Manager 8200 16000
MK_MAN Marketing Manager 9000 15000

结果集

 SQL语句从数据库中查询获取数据并将数据返回到结果集中。SELECT语句就是一个经典例子,它从一个数据库中选择行记录,并显示在一个结果集中。ResultSet接口就表示一个数据库查询的结果集

 一个ResultSet对象控制着一个光标执行当前行的结果集。“结果集”是指包含在ResultSet对象中的行和列的数据。

 ResultSet接口的方法可划分为三类:

  • 导航方法:用于移动光标
  • 获取方法:查看被光标所指向的当前行的列中的数据。
  • 更新方法:用于更新当前行的列中的数据,更新的同时也会影响到数据库中的数据。

光标的移动是基于ResultSet属性。我们在生成ResultSet对象的同时也会生成ResultSet属性。我们通过连接对象所提供的下述方法即可获得ResultSet对象:

  • createStatement(int RSType, int RSConcurrency)
  • prepareStatement(String SQL, int RSType, int RSConcurrency)
  • prepareCall(String sql, int RSType, int RSConcurrency)

 上述参数中的RSType用于表示返回的结果集类型,具体见下表:

结果集类型

类型描述
ResultSet.TYPE_FORWARD_ONLY光标只能在结果集中向前移动。
ResultSet.TYPE_SCROLL_INSENSITIVE光标可以向前和向后移动。当结果集创建后,其他人对数据库的操作不会影响结果集的数据。
ResultSet.TYPE_SCROLL_SENSITIVE.光标可以向前和向后移动。当结果集创建后,其他人对数据库的操作会影响结果集的数据。

结果集并发性

RSConcurrency参数用于指定结果集的并发类型,具体见下表:

并发性描述
ResultSet.CONCUR_READ_ONLY创建一个只读结果集,这是默认的值。
ResultSet.CONCUR_UPDATABLE创建一个可修改的结果集。

结果集导航

S.N.方法 & 描述
1public void beforeFirst() throws SQLException
将光标移动到第一行之前。
2public void afterLast() throws SQLException
将光标移动到最后一行之后。
3public boolean first() throws SQLException
将光标移动到第一行。
4public void last() throws SQLException
将光标移动到最后一行。
5public boolean absolute(int row) throws SQLException
将光标移动到指定的第 row 行。
6public boolean relative(int row) throws SQLException
将光标移动到当前指向的位置往前或往后第 row 行的位置。
7public boolean previous() throws SQLException
将光标移动到上一行,如果超过结果集的范围则返回 false。
8public boolean next() throws SQLException
将光标移动到下一行,如果是结果集的最后一行则返回 false。(常用)
9public int getRow() throws SQLException
返回当前光标指向的行数的值。
10public void moveToInsertRow() throws SQLException
将光标移动到结果集中指定的行,可以在数据库中插入新的一行。当前光标位置将被记住。
11public void moveToCurrentRow() throws SQLException
如果光标处于插入行,则将光标返回到当前行,其他情况下,这个方法不执行任何操作。

 例如之前介绍的例子:

ResultSet resultSet = preparedStatement.executeQuery();
// 不断导航到当前光标的下一行,直到光标达到最后一行
while (resultSet.next()){
    // 具体操作
}

结果集查看

 ResultSet接口中含有几十种从当前行获取数据的方法,每个可能的数据类型,ResultSet接口都有一个get方法用于获取数据,并且每个get方法都有两种调用方式:

  • 通过列名
  • 通过列的索引,从1开始

 例如上面介绍的例子:


String sql = "select job_id, job_title, min_salary, max_salary from jobs where min_salary > ? and max_salary < ?";

while (resultSet.next()){
    // 获取一个对象的信息
    String job_id = resultSet.getString("job_id"); // 通过列名获取数据
    String job_title = resultSet.getString(2);// 通过列的索引
    int min_salary = resultSet.getInt("min_salary");
    int max_salary = resultSet.getInt(4);
    // 输出
    System.out.println(job_id + " " + job_title + " " + min_salary + " " + max_salary) ;
}

结果集的更新

 ResultSet 接口包含了一系列的更新方法,该方法用于更新结果集中的数据。

 与结果集的get方法一样,结果集的更新update方法也有两种调用方式:

  • 通过列名
  • 通过列的索引

 例如要更新当前行的String列的数据,可以使用下面两种方法进行更新或修改:

S.N.方法 & 描述
1public void updateString(int columnIndex, String s) throws SQLException
将指定列的字符串的值改为 s。
2public void updateString(String columnName, String s) throws SQLException
类似于前面的方法,不同之处在于指定的列是用名字来指定的,而不是它的索引。

 同样的,要更新一个int类型的列,调用updateInt方法就行了。但上述所提到的更新方式只能修改结果集中的数据,并不会影响数据库中的数据,要想修改数据库中的数据,可以使用下述几个方法:

S.N.方法 & 描述
1public void updateRow()
通过更新数据库中相对应的行来更新当前行。
2public void deleteRow()
从数据库中删除当前行。
3public void refreshRow()
在结果集中刷新数据,以反映数据库中最新的数据变化。
4public void cancelRowUpdates()
取消对当前行的任何修改。
5public void insertRow()
在数据库中插入一行。本方法只有在光标指向插入行的时候才能被调用。

练习

 练习使用的都是employess表,数据库的数据在JDBC学习一中已给出,答案在最后的所有代码里。

  • 查询薪资大于等于10000的所有员工的姓名first_name和last_name、电话号码phone_number和salary
  • 随机生成(1~250)员工id(employee_id),若员工存在,则将该员工的薪资提高10%,并输出提高前和提高后的信息(fist_name,last_name,salary,email,phone_number),否则,输出“No information about (此处补充输入的ID) was found in the database”
import org.junit.Test;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.util.Random;
import java.util.Scanner;


public class JdbcResultSetExample {
    static String user = "YourName";
    static String password = "YourPassword";
    static String url = "jdbc:mysql://localhost:3306/jdbcdata";
    static String className = "com.mysql.cj.jdbc.Driver";
    public Connection getJDBCConnection() throws Exception{
        Class.forName(className);
        Connection connection = DriverManager.getConnection(url, user, password);
        if(connection != null) {
            return connection;
        }
        return null;
    }

    @Test
    public void resultSetTest() throws Exception{
        // 获取连接
        Connection conn = getJDBCConnection();
        if(conn != null){
            // 待执行的SQL语句
            String sql = "select job_id, job_title, min_salary, max_salary from jobs where min_salary > ? and max_salary < ?";
            // 预编译
            PreparedStatement preparedStatement = conn.prepareStatement(sql);
            // 设置参数
            preparedStatement.setInt(1,8000);
            preparedStatement.setInt(2,20000);
            // 执行SQL语句,获取结果集
            ResultSet resultSet = preparedStatement.executeQuery();
            while (resultSet.next()){
                // 获取一个对象的信息
                String job_id = resultSet.getString("job_id");
                String job_title = resultSet.getString(2);
                int min_salary = resultSet.getInt("min_salary");
                int max_salary = resultSet.getInt(4);
                // 输出
                System.out.println(job_id + " " + job_title + " " + min_salary + " " + max_salary) ;
            }
            // 关闭
            conn.close();
            preparedStatement.close();
            resultSet.close();
        }
    }

    @Test
    public void resultSetExample1() throws Exception{
        /*
        查询薪资大于等于10000的所有员工的姓名first_name和last_name、电话号码phone_number和salary
         */
        Connection conn = getJDBCConnection();

        if(conn != null){
            String sql = "SELECT first_name, last_name, phone_number, salary FROM employees WHERE salary >= ?";

            PreparedStatement preparedStatement = conn.prepareStatement(sql);
            if(preparedStatement != null){

                preparedStatement.setInt(1,10000);
                ResultSet resultSet = preparedStatement.executeQuery();
                if(resultSet != null){
                    while (resultSet.next()){
                        String first_name = resultSet.getString("first_name");
                        String last_name =resultSet.getString("last_name");
                        String phone_number = resultSet.getString("phone_number");
                        int ansSalary = resultSet.getInt("salary");
                        System.out.println(first_name + "·" + last_name + " " + phone_number + " " + ansSalary);
                    }
                    resultSet.close();
                    preparedStatement.close();
                    conn.close();
                }
            }
        }
    }

    @Test
    public void resultSetExample2() throws Exception{
        /*
        随机生成(1~250)员工id(employee_id),若员工存在,则将该员工的薪资提高10%,并输出提高前和提高后的信息(fist_name,last_name,salary,email,phone_number),
        否则,输出“No information about (此处补充输入的ID) was found in the database”
         */
        Connection conn = getJDBCConnection();
        if(conn != null){
            // 待执行的SQL语句
            String sql = "select * from employees where employee_id = ?";
            PreparedStatement preparedStatement = conn.prepareStatement(sql,ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_UPDATABLE);
            if(preparedStatement != null){
                int id = 100 +  new Random().nextInt(151);
//                System.out.println(id + "-------");
                preparedStatement.setInt(1,id);
                ResultSet resultSet = preparedStatement.executeQuery();

                if(resultSet != null){

                    while (resultSet.next()){

                        String first_name = resultSet.getString("first_name");
                        String last_name = resultSet.getString("last_name");
                        int salary = resultSet.getInt("salary");
                        String email = resultSet.getString("email");
                        String phone_number = resultSet.getString("phone_number");
                        System.out.println(first_name + " " + last_name + " " + salary + " " + email + " " + phone_number);
                        resultSet.updateInt("salary",salary + (int)((double)salary * 0.1));
                        resultSet.updateRow();
                        int salaryAfter = resultSet.getInt("salary");
                        System.out.println(first_name + " " + last_name + " " + salaryAfter + " " + email + " " + phone_number);
                    }
                    resultSet.close();
                    preparedStatement.close();
                    conn.close();
                }else{
                    System.out.println("No information about " + id +" was found in the database");
                    preparedStatement.close();
                    conn.close();
                }
            }

        }
    }

    @Test
    public void test(){
        Scanner scan = new Scanner(System.in);
        int i = scan.nextInt();
//        int i = 32;
        System.out.println(i);
    }
}
  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
package com.hexiang.utils; import java.sql.*; import java.util.*; /** * * Title: 数据库工具类 * * * Description: 将大部分的数据库操作放入这个类中, 包括数据库连接的建立, 自动释放等. * * * @author beansoft 日期: 2004年04月 * @version 2.0 */ public class DatabaseUtil { /** 数据库连接 */ private java.sql.Connection connection; /** * All database resources created by this class, should be free after all * operations, holds: ResultSet, Statement, PreparedStatement, etc. */ private ArrayList resourcesList = new ArrayList(5); public DatabaseUtil() { } /** 关闭数据库连接并释放所有数据库资源 */ public void close() { closeAllResources(); close(getConnection()); } /** * Close given connection. * * @param connection * Connection */ public static void close(Connection connection) { try { connection.close(); } catch (Exception ex) { System.err.println("Exception when close a connection: " + ex.getMessage()); } } /** * Close all resources created by this class. */ public void closeAllResources() { for (int i = 0; i < this.getResourcesList().size(); i++) { closeJDBCResource(getResourcesList().get(i)); } } /** * Close a jdbc resource, such as ResultSet, Statement, Connection.... All * these objects must have a method signature is void close(). * * @param resource - * jdbc resouce to close */ public void closeJDBCResource(Object resource) { try { Class clazz = resource.getClass(); java.lang.reflect.Method method = clazz.getMethod("close", null); method.invoke(resource, null); } catch (Exception e) { // e.printStackTrace(); } } /** * 执行 SELECT 等 SQL 语句并返回结果. * * @param sql * 需要发送到数据库 SQL 语句 * @return a ResultSet object that contains the data produced * by the given query; never null */ public ResultSet executeQuery(String sql) { try { Statement statement = getStatement(); ResultSet rs = statement.executeQuery(sql); this.getResourcesList().add(rs); this.getResourcesList().add(statement);// BUG fix at 2006-04-29 by BeanSoft, added this to res list // MySql 数据库要求必需关闭 statement 对象, 否则释放不掉资源 // - 此观点错误, 因为关闭此对象后有时数据无法读出 //statement.close(); return rs; } catch (Exception ex) { System.out.println("Error in executeQuery(\"" + sql + "\"):" + ex); // ex.printStackTrace(); return null; } } /** * Executes the given SQL statement, which may be an INSERT, * UPDATE, or DELETE statement or an SQL * statement that returns nothing, such as an SQL DDL statement. 执行给定的 SQL * 语句, 这些语句可能是 INSERT, UPDATE 或者 DELETE 语句, 或者是一个不返回任何东西的 SQL 语句, 例如一个 SQL * DDL 语句. * * @param sql * an SQL INSERT,UPDATE or * DELETE statement or an SQL statement that * returns nothing * @return either the row count for INSERT, * UPDATE or DELETE statements, or * 0 for SQL statements that return nothing */ public int executeUpdate(String sql) { try { Statement statement = getStatement(); return statement.executeUpdate(sql); // MySql 数据库要求必需关闭 statement 对象, 否则释放不掉资源 // - 此观点错误, 因为关闭此对象后有时数据无法读出 //statement.close(); } catch (Exception ex) { System.out.println("Error in executeUpdate(): " + sql + " " + ex); //System.out.println("executeUpdate:" + sql); ex.printStackTrace(); } return -1; } /** * 返回记录总数, 使用方法: getAllCount("SELECT count(ID) from tableName") 2004-06-09 * 可滚动的 Statement 不能执行 SELECT MAX(ID) 之类的查询语句(SQLServer 2000) * * @param sql * 需要执行的 SQL * @return 记录总数 */ public int getAllCount(String sql) { try { Statement statement = getConnection().createStatement(); this.getResourcesList().add(statement); ResultSet rs = statement.executeQuery(sql); rs.next(); int cnt = rs.getInt(1); rs.close(); try { statement.close(); this.getResourcesList().remove(statement); } catch (Exception ex) { ex.printStackTrace(); } return cnt; } catch (Exception ex) { System.out.println("Exception in DatabaseUtil.getAllCount(" + sql + "):" + ex); ex.printStackTrace(); return 0; } } /** * 返回当前数据库连接. */ public java.sql.Connection getConnection() { return connection; } /** * 连接新的数据库对象到这个工具类, 首先尝试关闭老连接. */ public void setConnection(java.sql.Connection connection) { if (this.connection != null) { try { getConnection().close(); } catch (Exception ex) { } } this.connection = connection; } /** * Create a common statement from the database connection and return it. * * @return Statement */ public Statement getStatement() { // 首先尝试获取可滚动的 Statement, 然后才是普通 Statement Statement updatableStmt = getUpdatableStatement(); if (updatableStmt != null) return updatableStmt; try { Statement statement = getConnection().createStatement(); this.getResourcesList().add(statement); return statement; } catch (Exception ex) { System.out.println("Error in getStatement(): " + ex); } return null; } /** * Create a updatable and scrollable statement from the database connection * and return it. * * @return Statement */ public Statement getUpdatableStatement() { try { Statement statement = getConnection() .createStatement(ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_UPDATABLE); this.getResourcesList().add(statement); return statement; } catch (Exception ex) { System.out.println("Error in getUpdatableStatement(): " + ex); } return null; } /** * Create a prepared statement and return it. * * @param sql * String SQL to prepare * @throws SQLException * any database exception * @return PreparedStatement the prepared statement */ public PreparedStatement getPreparedStatement(String sql) throws SQLException { try { PreparedStatement preparedStatement = getConnection() .prepareStatement(sql, ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_UPDATABLE); this.getResourcesList().add(preparedStatement); return preparedStatement; } catch (Exception ex) { ex.printStackTrace(); } return null; } /** * Return the resources list of this class. * * @return ArrayList the resources list */ public ArrayList getResourcesList() { return resourcesList; } /** * Fetch a string from the result set, and avoid return a null string. * * @param rs * the ResultSet * @param columnName * the column name * @return the fetched string */ public static String getString(ResultSet rs, String columnName) { try { String result = rs.getString(columnName); if (result == null) { result = ""; } return result; } catch (Exception ex) { } return ""; } /** * Get all the column labels * * @param resultSet * ResultSet * @return String[] */ public static String[] getColumns(ResultSet resultSet) { if (resultSet == null) { return null; } try { ResultSetMetaData metaData = resultSet.getMetaData(); int numberOfColumns = metaData.getColumnCount(); if (numberOfColumns <= 0) { return null; } String[] columns = new String[numberOfColumns]; //System.err.println("numberOfColumns=" + numberOfColumns); // Get the column names for (int column = 0; column < numberOfColumns; column++) { // System.out.print(metaData.getColumnLabel(column + 1) + "\t"); columns[column] = metaData.getColumnName(column + 1); } return columns; } catch (Exception ex) { ex.printStackTrace(); } return null; } /** * Get the row count of the result set. * * @param resultset * ResultSet * @throws SQLException * if a database access error occurs or the result set type is * TYPE_FORWARD_ONLY * @return int the row count * @since 1.2 */ public static int getRowCount(ResultSet resultset) throws SQLException { int row = 0; try { int currentRow = resultset.getRow(); // Remember old row position resultset.last(); row = resultset.getRow(); if (currentRow > 0) { resultset.absolute(row); } } catch (Exception ex) { ex.printStackTrace(); } return row; } /** * Get the column count of the result set. * * @param resultSet * ResultSet * @return int the column count */ public static int getColumnCount(ResultSet resultSet) { if (resultSet == null) { return 0; } try { ResultSetMetaData metaData = resultSet.getMetaData(); int numberOfColumns = metaData.getColumnCount(); return numberOfColumns; } catch (Exception ex) { ex.printStackTrace(); } return 0; } /** * Read one row's data from result set automatically and put the result it a * hashtable. Stored as "columnName" = "value", where value is converted to * String. * * @param resultSet * ResultSet * @return Hashtable */ public static final Hashtable readResultToHashtable(ResultSet resultSet) { if (resultSet == null) { return null; } Hashtable resultHash = new Hashtable(); try { String[] columns = getColumns(resultSet); if (columns != null) { // Read data column by column for (int i = 0; i < columns.length; i++) { resultHash.put(columns[i], getString(resultSet, columns[i])); } } } catch (Exception ex) { ex.printStackTrace(); } return resultHash; } /** * Read data from result set automatically and put the result it a * hashtable. Stored as "columnName" = "value", where value is converted to * String. * * Note: assume the default database string encoding is ISO8859-1. * * @param resultSet * ResultSet * @return Hashtable */ @SuppressWarnings("unchecked") public static final Hashtable readResultToHashtableISO(ResultSet resultSet) { if (resultSet == null) { return null; } Hashtable resultHash = new Hashtable(); try { String[] columns = getColumns(resultSet); if (columns != null) { // Read data column by column for (int i = 0; i < columns.length; i++) { String isoString = getString(resultSet, columns[i]); try { resultHash.put(columns[i], new String(isoString .getBytes("ISO8859-1"), "GBK")); } catch (Exception ex) { resultHash.put(columns[i], isoString); } } } } catch (Exception ex) { ex.printStackTrace(); } return resultHash; } /** Test this class. */ public static void main(String[] args) throws Exception { DatabaseUtil util = new DatabaseUtil(); // TODO: 从连接池工厂获取连接 // util.setConnection(ConnectionFactory.getConnection()); ResultSet rs = util.executeQuery("SELECT * FROM e_hyx_trans_info"); while (rs.next()) { Hashtable hash = readResultToHashtableISO(rs); Enumeration keys = hash.keys(); while (keys.hasMoreElements()) { Object key = keys.nextElement(); System.out.println(key + "=" + hash.get(key)); } } rs.close(); util.close(); } }
计算机程序设计(Java)-教案--单元十--数据库编程技术全文共11页,当前为第1页。计算机程序设计(Java)-教案--单元十--数据库编程技术全文共11页,当前为第1页。课堂教学计划表 计算机程序设计(Java)-教案--单元十--数据库编程技术全文共11页,当前为第1页。 计算机程序设计(Java)-教案--单元十--数据库编程技术全文共11页,当前为第1页。 课程名称 Java程序设计 教师姓名 专业班级 授课时间 授课地点 学时数 8 授课题目 §10数据库编程技术 教学目标及要求 知识目标 ・:・JDBC基本概念; JDBC驱动程序; :・JDBC的主要功能; :・使用JDBC进行数据库编程的基本过程; Driver接口; DriverManager类; Connection接口; Statement#口; ResultSet接口; :・JDBC连接和访问数据库的步骤; 技能目标 :・掌握JDBC进行数据库编程的基本过程; :・掌握数据库驱动程序的加栽方法; 掌握DriverManager类中用于连接数据库方法; 熟练使用Connection接口中的方法; :・熟练使用Statement接口中的方法; ・: 熟练使用ResultSet接口中的方法; :・掌握利用JDBC技术连接和访问数据库的基本步骤; :・能在具体应用环境中实现数据库的连接和访问; 教学重点 :・利用JDBC连接数据库的技术; 访问数据库的基本步骤; 教学难点 :・使用JDBC的高级特性开发应用程序; 工程描述 :・利用本章将要学习Java数据库编程技术,编程开发一个"学生信息管理小工具"; 教学方法 :・问题导引法:通过给学生提出实际编程中出现的问题来引入教学内容,使学生在主动分析、讨论和解决问题的过程中掌握所学知 计算机程序设计(Java)-教案--单元十--数据库编程技术全文共11页,当前为第2页。计算机程序设计(Java)-教案--单元十--数据库编程技术全文共11页,当前为第2页。intget!nt(Stringcolumnindex)throwsSQLException 计算机程序设计(Java)-教案--单元十--数据库编程技术全文共11页,当前为第2页。 计算机程序设计(Java)-教案--单元十--数据库编程技术全文共11页,当前为第2页。 以int的形式获取当前行中指定列名的值 StringgetString(intcolumnindex)throwsSQLException 以String的形式获取当前行中指定列索引的值 StringgetString(Stringcolumnindex)throwsSQLException 以String的形式获取当前行中指定列名的值 booleanprevious()throwsSQLException 将指针移动到此ResultSet对象的上一行,如果不存在,那么返回false booleannext()throwsSQLException 将指针移动到此ResultSet对象的下一行,如果不存在,那么返回false voidclose()throwsSQLException 关闭ResultSet对象,释放相关资源 booleanisClosed()throwsSQLException 查询此ResultSet对象是否已经被关闭 StatementgctStatcmcnt()throwsSQLException 获取生成此ResultSet对象的Statement对象 (4)数据库的查询和更新操作 Java数据库应用程序中实现数据库查询和更新操作的主要过程包括以下几步: /调用Connection对象的createStatement()创立用于执行SQL语句的Statement对象;/定义SQL查询和更新语句,如SQL中的SELECT、INSERT.DELETE、UPDATE语句;/调用Statement对象的executeQuery()方法执行SQL查询语句,并获得一个ResultSet类型的查询结果对象,调用executeUpdate()方法执行SQL更新语句更新数据库中的数据;/根据应用程序的具体要求调用ResultSet对象的相关方法,如next()>getlnt()以及getString()等对查询结果进行处理; /调用close()方法关闭ResultSet>Statement和Connection对象,释放系统资源。 【实例10.2:实现数据库的查询操作】 【实例10-3:实现数据库的插入操作】 【实例10-4:实现数据库的修改操作】 【实例10-5:实现数据库的删除操作】 (实例代码详见教材) 计算机程序设计(Java)-教案--单元十--数据库编程技术全文共1
JDBCJava Database Connectivity)是Java语言操作数据库的基础API,它提供了一种标准的方法来连接和操作各种关系型数据库JDBC的基本使用分为以下几个步骤: 1. 加载驱动程序:在使用JDBC操作数据库之前,需要先加载相应的驱动程序。不同的数据库需要加载不同的驱动程序,一般情况下驱动程序的jar包都会提供。 ```java Class.forName("com.mysql.jdbc.Driver"); ``` 2. 建立连接:使用DriverManager类的getConnection()方法连接数据库。 ```java String url = "jdbc:mysql://localhost:3306/test?useSSL=false"; String username = "root"; String password = "123456"; Connection conn = DriverManager.getConnection(url, username, password); ``` 其中url为连接数据库的URL,username和password为连接数据库的用户名和密码。 3. 创建Statement对象:通过Connection对象的createStatement()方法创建一个Statement对象,用于执行SQL语句。 ```java Statement stmt = conn.createStatement(); ``` 4. 执行SQL语句:可以通过Statement对象的execute()或executeQuery()方法执行SQL语句,如果是更新操作则使用executeUpdate()方法。 ```java ResultSet rs = stmt.executeQuery("SELECT * FROM users"); ``` 5. 处理结果:如果执行的SQL语句返回了结果,则可以通过ResultSet对象进行处理。 ```java while (rs.next()) { int id = rs.getInt("id"); String name = rs.getString("name"); System.out.println("id: " + id + ", name: " + name); } ``` 6. 关闭连接:使用完数据库后需要关闭连接,释放资源。 ```java rs.close(); stmt.close(); conn.close(); ``` 以上就是JDBC的基本使用过程,通过JDBC可以实现Java程序与数据库的交互,完成各种数据库操作。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

PG Thinker

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值