IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 大数据 -> JDBC核心API详解之ResultSet类 -> 正文阅读

[大数据]JDBC核心API详解之ResultSet类

ResultSet:结果集对象,封装结果对象,注意只有executeQuery方法执行才返回ResultSet对象

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
注意: java.sql.Date、Time、Timestamp(时间戳),三个共同父类是:java.util.Date

ResultSet类中常用的方法:

1.next():游标向下移动一行,判断当前行是否是最后一行之后(是否有数据),如果是,则返回false,如果不是则返回true

2.getXxx(参数):获得表中列的数据
    Xxx:代表是数据类型,如:int getInt(),String getString()
    参数:
    	1.int 代表是列的编号,注意编号是从1开始的,如:getString(1)
    	2.String 代表列名称,如:getDouble("balance"),getInt("id")
    
    
    注意:在使用ResultSet(对象)时应该先判断是否有数据
   		 使用的步骤
    		1.游标向下移动一行
    		2.判断是否有数据
    		3.获取数据
    
package com.haikang.jdbc;

import java.sql.*;

public class JDBCQuery {
    public static void main(String[] args) {
        Connection connection =null;
        Statement statement = null;
        ResultSet resultSet = null;

        //1.导入Jar包
        try {
            //2.注册驱动
            Class.forName("com.mysql.jdbc.Driver");
            //3.获得数据库连接对象
            connection = DriverManager.getConnection("jdbc:mysql://localhost:3306/user4","root","root");
            //4.定义Sql语句;查询account表中所有数据
            String sql = "select * from account";
            //5.获得执行Sql对象
            statement = connection.createStatement();
            //6.执行Sql语句
            resultSet = statement.executeQuery(sql);
            //7.处理返回的结果集
            //7.1使光标向下移
            resultSet.next();
            //7.2获得第一行的内容
            int id = resultSet.getInt("id");
            String name = resultSet.getString("name");
            double aDouble = resultSet.getDouble(3);
            System.out.println(id+"\t"+name+"\t"+aDouble);
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        } catch (SQLException throwables) {
            throwables.printStackTrace();
        }finally {
            //先开的后关
            if (resultSet!=null){
                try {
                    resultSet.close();
                } catch (SQLException throwables) {
                    throwables.printStackTrace();
                }
            }

            if (statement!=null){
                try {
                    statement.close();
                } catch (SQLException throwables) {
                    throwables.printStackTrace();
                }
            }
            if (connection!=null){
                try {
                    connection.close();
                } catch (SQLException throwables) {
                    throwables.printStackTrace();
                }
            }
        }
    }
}



优化代码区
    package com.haikang.jdbc;

import java.sql.*;

public class JDBCQuery02 {
    public static void main(String[] args) {
        Connection connection =null;
        Statement statement = null;
        ResultSet resultSet = null;
        //1.导入Jar包

        try {
            //2.注册驱动
            Class.forName("com.mysql.jdbc.Driver");
            //3.获得数据库连接对象
            connection = DriverManager.getConnection("jdbc:mysql://localhost:3306/user4","root","root");
            //4.定义Sql语句
            String  sql = "select * from account";
            //5.获得执行Sql对象
            statement = connection.createStatement();
            //6.执行sql语句
            resultSet = statement.executeQuery(sql);
            //处理返回的结果
            while(resultSet.next()!=false){
                int id = resultSet.getInt("id");
                String name = resultSet.getString("name");
                double aDouble = resultSet.getDouble(3);
                System.out.println(id+"\t"+name+"\t"+aDouble);
            }
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        } catch (SQLException throwables) {
            throwables.printStackTrace();
        }finally{
            //关流
            if (resultSet!=null){
                try {
                    resultSet.close();
                } catch (SQLException throwables) {
                    throwables.printStackTrace();
                }
            }

            if (statement!=null){
                try {
                    statement.close();
                } catch (SQLException throwables) {
                    throwables.printStackTrace();
                }
            }

            if (connection!=null){
                try {
                    connection.close();
                } catch (SQLException throwables) {
                    throwables.printStackTrace();
                }
            }
        }
    }
}
练习:定义一个定义方法,查询emp表的数据将其封装为对象,然后装载集合,返回集合
    1.定义Employee2.定义public List<Employee> findAll(){}
	3.实现方法,select * from employee


        
 @Data
@AllArgsConstructor
@NoArgsConstructor
public class Employee {
    private Integer id;
    private String name;
    private String gender;
    private double salary;
    private Date join_date;
    private Integer dept_id;
}

package com.haikang.jdbc;

import com.haikang.pojo.Employee;

import java.sql.*;
import java.util.ArrayList;
import java.util.List;

public class JDBCQuery03 {
    public static void main(String[] args) {
        List<Employee> all = findAll();
        int size = findAll().size();
        System.out.println(size);
        System.out.println(all);
    }

    public static List<Employee> findAll(){

        Connection connection = null;
        Statement statement = null;
        ResultSet resultSet = null;
        Employee employee = null;
        List<Employee> lists  = new ArrayList<>();;

        try {
            //1.注册驱动
            Class.forName("com.mysql.jdbc.Driver");
            //2.获得数据库连接对象
           connection = DriverManager.getConnection("jdbc:mysql://localhost:3306/test", "root", "root");
            //3.定义Sql语句
            String sql = "select * from emp";
            //4.获得执行Sql对象
           statement = connection.createStatement();
            //5.执行Sql语句
            resultSet = statement.executeQuery(sql);
            while (resultSet.next()!=false){
                int id = resultSet.getInt("id");
                String name = resultSet.getString("name");
                String gender = resultSet.getString("gender");
                double salary = resultSet.getDouble("salary");
                Date join_date = resultSet.getDate("join_date");
                int dept_id = resultSet.getInt("dept_id");

                //封装对象
                employee = new Employee(id,name,gender,salary,join_date,dept_id);

//                向集合中添加数据
                lists.add(employee);
            }
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        } catch (SQLException throwables) {
            throwables.printStackTrace();
        }
        finally {
            //关流
            if (resultSet!=null){
                try {
                    resultSet.close();
                } catch (SQLException throwables) {
                    throwables.printStackTrace();
                }
            }

            if (statement!=null){
                try {
                    statement.close();
                } catch (SQLException throwables) {
                    throwables.printStackTrace();
                }
            }

            if (connection!=null){
                try {
                    connection.close();
                } catch (SQLException throwables) {
                    throwables.printStackTrace();
                }
            }
        }
        return lists;
    }
}
练习:登录
	需要:
	1.通过键盘录入用户名和密码
	2.判断用户是否登录成功
	
	CREATE TABLE IF NOT EXISTS USER(
	id INT PRIMARY KEY AUTO_INCREMENT,
	username VARCHAR(32),
	PASSWORD VARCHAR(32)
);

INSERT INTO USER VALUES(NULL,'zs','123'),(NULL,'li','456');
	
    
package com.haikang.login;

/**
 *  1.导入驱动Jar包
 *     2.注册驱动
 *     3.获取数据库连接对象Connection
 *     4.定义Sql
 *     	注意:Sql的参数使用?作为占位符:如select * from user where username=? and password=?
 *     5.获取执行Sql语句对象PreparedStatement,同时并Sql语句传入
 *     如:connection.prepareStatement(sql);
 *
 * 	6.给?赋值
 *         a.方法:SetXxx(参数1,参数2)
 *         参数1:?的位置编号 ,注意编号是从1开始的
 *         参数2:?的值
 *     7.执行Sql语句,处理返回结果,不需要传入Sql语句了(注意由于上面已经传入了)
 *     8.释放资源
 */
public class JDBCLogin02 {

    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        for (int i=0;i<3;i++){
            System.out.println("请输入用户名:");
            String username = sc.nextLine();
            System.out.println("请输入密码:");
            String password = sc.nextLine();
            boolean login = login(username, password);
            if (login){
                System.out.println("登录成功:");
                break;
            }else {
                System.out.println("用户名或密码错误"+(2-i)+"次机会:");
            }
        }
    }

    public static boolean login(String username,String password){
        Connection connection = null;
        PreparedStatement preparedStatement = null;
        ResultSet resultSet = null;
        if (username==null||password==null){
            return false;
        }
        try {
            //注册驱动和获得数据库连接对象
            connection = JDBCUtils.getConnection();
            //定义Sql语句
            String sql = "select * from user where username=? and password=?";
            //获得Sql执行对象
            preparedStatement = connection.prepareStatement(sql);
            //给占位符赋值
            preparedStatement.setString(1,username);
            preparedStatement.setString(2,password);
            //执行Sql语句,注意不需要传入Sql语句了,如果传入那就是使用父类Statement的方法了
            resultSet = preparedStatement.executeQuery();
            //处理返回结果
            boolean next = resultSet.next();
            return next;
        } catch (SQLException throwables) {
            throwables.printStackTrace();
        }

        //关流
        JDBCUtils.close(resultSet,preparedStatement,connection);
        return false;
    }
}
  大数据 最新文章
实现Kafka至少消费一次
亚马逊云科技:还在苦于ETL?Zero ETL的时代
初探MapReduce
【SpringBoot框架篇】32.基于注解+redis实现
Elasticsearch:如何减少 Elasticsearch 集
Go redis操作
Redis面试题
专题五 Redis高并发场景
基于GBase8s和Calcite的多数据源查询
Redis——底层数据结构原理
上一篇文章      下一篇文章      查看所有文章
加:2021-12-06 15:20:17  更:2021-12-06 15:22:03 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 10:03:47-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码