Logo

郎哥编程

ResultSet与SQL查询

2020-01-16 233

Statement接口执行SQL查询语句后,会以结果集的方式返回,查询到的数据库所有记录都会存储在结果集中,操作该结果集的接口就是ResultSet接口。

ResultSet接口的常用方法说明如下:

boolean    first()

该方法将光标移动到此ResultSet结果集中的第1行。

boolean    next()

该方法将光标从当前记录位置向后移动一行。

boolean    last()

该方法将光标移动到此ResultSet结果集中的最后一行。

int  getRow()

该方法返回当前光标所在ResultSet结果集中的行号。

int     getInt(int columnIndex)

该方法获取指定ResultSet结果集当前光标所在行中列号的内容,内容以int类型返回。

int     getInt(String columnLabel)

该方法获取指定ResultSet结果集当前光标所在行中列名称的内容,内容以int类型返回。

float   getFloat(int columnIndex)

该方法获取指定ResultSet结果集当前光标所在行中列号的内容,内容以float类型返回。

float   getFloat(String columnLabel)

该方法获取指定ResultSet结果集当前光标所在行中列名称的内容,内容以float类型返回。

double     getDouble(int columnIndex)

该方法获取指定ResultSet结果集当前光标所在行中列号的内容,内容以double类型返回。

double     getDouble(String columnLabel)

该方法获取指定ResultSet结果集当前光标所在行中列名称的内容,内容以double类型返回。

String getString(int columnIndex)

该方法获取指定ResultSet结果集当前光标所在行中列号的内容,内容以String类型返回。

String getString(String columnLabel)

该方法获取指定ResultSet结果集当前光标所在行中列名称的内容,内容以String类型返回。

Date   getDate(int columnIndex)

该方法获取指定ResultSet结果集当前光标所在行中列号的内容,内容以Date类型返回。

Date   getDate(String columnLabel)

该方法获取指定ResultSet结果集当前光标所在行中列名称的内容,内容以Date类型返回。

void   close()

该方法立即释放此结果集ResultSet对象占用的资源

案例1:查询shoper表的所有记录,并将记录内容输出到控制台。

在demo包下新建SqlDemoTest2类。代码如下:

import java.math.BigDecimal;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.Date;
 
/**
 * @ClassName: SqlDemoTest2
 * @Description: 数据库编程(ResultSet与SQL查询)案例1
 * @author 编程训练营
 * @date
 *
 */
 
public class SqlDemoTest2 {
 
    // 定义JDBC加载路径
    static String jdbc = "com.mysql.cj.jdbc.Driver";
    // 定义MySQL数据库的连接地址
    static String mysqlurl = "jdbc:mysql://localhost:3306/shop?serverTimezone=GMT%2B8";
    // 定义MySQL数据库的用户名
    static String username = "root";
    // 定义MySQL数据库的用户名登录密码
    static String password = "~123456q";
 
    /**
     * @Title: main
     * @Description: Java程序入口main方法
     * @param @param args 参数
     *
     * @return void 返回类型 @throws
     * @throws UnsupportedEncodingException
     */
 
    public static void main(String[] args)  {
       Connection conn = null;
       Statement statement = null;
       try {
           // 加载JDBC驱动
           Class.forName(jdbc);
           // 连接数据库
           conn = DriverManager.getConnection(mysqlurl, username, password);
           if (null != conn) {
              System.out.println(conn);
              // 获取表记录数的SQL语句
              String sql = "select * from shoper";
              // 实例化Statement对象
              statement = conn.createStatement();
              // 执行SQL查询语句
              ResultSet resultset = statement.executeQuery(sql);
              if (null != resultset) {
                  while( resultset.next() )
                  {
                     // 获取id字段内容
                     String id = resultset.getString("id");
                     // 获取userId字段内容
                     String userId = resultset.getString("userId");
                     // 获取name字段内容
                     String name = resultset.getString("name");
                     // 获取brief字段内容
                     String brief = resultset.getString("brief");
                     // 获取log字段内容
                     String log = resultset.getString("log");
                     // 获取shopMoney字段内容
                     BigDecimal shopMoney = resultset.getBigDecimal("shopMoney");
                     // 获取status字段内容
                     int status = resultset.getInt("status");
                     // 获取createDate字段内容
                     Date createDate = resultset.getDate("createDate");
                     System.out.printf("-----输出第%d条记录-----\n",resultset.getRow());
                     System.out.println("id:" + id + ";");
                     System.out.println("userId:" + userId + ";");
                     System.out.println("name:" + name + ";");
                     System.out.println("brief:" + brief + ";");
                     System.out.println("log:" + log + ";");
                     System.out.println("shopMoney:" + shopMoney.toString() + ";");
                     System.out.println("status:" + status + ";");
                     System.out.println("createDate:" + createDate.toString() + ";");
                     System.out.println("-------------------------------");
                  }
                 
                  resultset.close();
              } else {
                  System.out.println("SQL语句执行失败");
              }
              statement.close();
              conn.close();
           } else {
              System.out.println("数据库连接失败");
           }
       } catch (ClassNotFoundException e) {
           // TODO Auto-generated catch block
           e.printStackTrace();
       } catch (SQLException e) {
           // TODO Auto-generated catch block
           e.printStackTrace();
       }
 
    }
 
}

statement对象执行SQL查询语句后,会返回ResultSet结果集,ResultSet结果集存储了已查询到的数据库记录。遍历ResultSet结果集可以循环调用ResultSet接口的next()方法,next()方法将当前结果集的光标移动到下一行。因为ResultSet结果集的初始光标是在第1行记录的前面,因此在循环中第一次调用next()方法时,会将光标移动到结果集的第1行,当结果集的记录遍历完毕,next()方法返回false。

结果集当前记录的列内容可以调用ResultSet接口getXxx()方法获取,如果获取的是String类型的内容,当内容含有中文并且出现中文乱码时,需要检eclipse的字符编码和数据库的字符编码是否一致。

程序执行结果如下图所示:

image.png     

                                        

本课程不涉及到SQL语句的查询优化,关于SQL语句的查询优化可以学习相关的数据库课程。

代码在线纠错(通义千问 qwen-max)

支持粘贴多个代码文件,提交后由阿里云通义千问自动分析代码漏洞、语法错误、逻辑问题并给出修改建议。
您已解锁 AI 代码纠错功能,可正常使用!

评论区

登录 后发表评论
暂无评论