使用jdbc查询mysql

使用JDBC访问mysql, JDBC 是 Java DataBase Connectivity (Java 数据连接)技术的简称,是一种可用于执行 SQL 语句的
Java API。
加载mysql数据库驱动Class.forName("com.mysql.cj.jdbc.Driver"); 的这一步骤不需要写代码了, java会通过SPI机制
自动去发现驱动并加载驱动,初学者知道有这回事即可

  1. 在maven的pom.xml文件中添加mysql数据库驱动的依赖包
<!-- mysql驱动包 -->
<dependency>
    <groupId>com.mysql</groupId>
    <artifactId>mysql-connector-j</artifactId>
    <version>8.4.0</version>
</dependency>

要学会在maven中心仓库寻找第三方的依赖包,
上面这个依赖在maven仓库的地址是点击直达

  1. 在mysql数据库中, 创建数据库test 创建用户表user,id为主键字段,唯一标识一行数据,包含了常用的三种数据类型,字符串类型长度使用默认的255,
    添加一些用于测试的数据
-- 创建数据库test
create database if not exists test;

-- 建用户表
CREATE TABLE `user` (
  `id` int NOT NULL,
  `username` varchar(255) DEFAULT NULL,
  `email` varchar(255) DEFAULT NULL,
  `createtime` datetime DEFAULT NULL,
  PRIMARY KEY (`id`)
);

-- 插入表数据
INSERT INTO `test`.`user` (`id`, `username`, `email`, `createtime`) VALUES (51, '测试用户1', 'ceshi1@google.com', '2024-08-05 11:04:18');
INSERT INTO `test`.`user` (`id`, `username`, `email`, `createtime`) VALUES (60, 'vip用户', 'vip1@qq.com', '2024-08-01 11:05:12');


  1. 使用jdbc代码查询数据库
import java.sql.*;
import java.time.LocalDateTime;

public class JdbcTest {


    public static void main(String[] args) {
        // 数据库连接配置, 包括 ip,端口,用户名,密码, (数据库驱动的类路径,如 com.mysql.cj.jdbc.Driver ,此处只使用了一种数据库所以不需要)
        String databaseUrl = "jdbc:mysql://127.0.0.1:3306/test";
        String databaseUsername = "root";
        String databasePassword = "root";
        // 要执行的查询sql
        String selectSql = "select * from user";
        Connection connection = null;
        Statement statement = null;
        try {
            // 获取数据库连接
            connection = DriverManager.getConnection(databaseUrl, databaseUsername, databasePassword);
            statement = connection.createStatement();
            ResultSet resultSet = statement.executeQuery(selectSql);
            // 获取 sql执行结果的元数据, 也就是数据格式, 如查询结果包含的那些字段名,字段类型等
            ResultSetMetaData metaData = resultSet.getMetaData();
            int columnCount = metaData.getColumnCount();
            // 注意索引从1开始,
            System.out.println("查询结果包含的字段开始: ");
            for (int i = 1; i <= columnCount; i++) {
                String columnName = metaData.getColumnName(i);
                String columnTypeName = metaData.getColumnTypeName(i);
                String columnClassName = metaData.getColumnClassName(i);
                System.out.println("字段名: " + columnName + " ,数据库类型: " + columnTypeName + ", 对应的java类型: " + columnClassName);
            }
            System.out.println("查询结果包含的字段结束");

            // 按行读取查询结果, 就像一个指针, 调用一次next()方法, 指针指向下一行并返回true, 如果没有下一行则返回false, while循环结束
            System.out.println("按行打印查询的结果: ");
            while (resultSet.next()) {
                // 根据建表语句,可以知道 查询的结果为user表的所有字段: id,username,email,createtime ,所以我们可以这样获取结果
                // 获取指定字段的值, 对应sql查询结果的字段, 不同方法会把值转换为对应的类型返回, 如 getInt 会把字段的值转换为int对象返回
                int id = resultSet.getInt("id");
                String username = resultSet.getString("username");
                String email = resultSet.getString("email");
                // 对数据库时间字段可以转换为很多种java类型, 如下, java8之后, 所有对时间的处理都推荐转换为LocalDateTime对象进行运算
                java.sql.Date date = resultSet.getDate("createtime");
                java.sql.Time time = resultSet.getTime("createtime");
                java.sql.Timestamp timestamp = resultSet.getTimestamp("createtime");
                // 转换为LocalDateTime对象
                LocalDateTime localDateTime = resultSet.getObject("createtime", LocalDateTime.class);
                // 输出数据
                System.out.println("id: " + id + " ,username: " + username + " ,email: " + email + " ,createtime: " + localDateTime);

                // 如果要执行其他selectSql,查的表或查的字段变了, 那么上面的获取字段值的代码显然每次都要改变, 所以我们开动🧠
                // 更通用的获取查询结果
                for (int i = 1; i <= columnCount; i++) {
                    String columnName = metaData.getColumnName(i);
                    String columnClassName = metaData.getColumnClassName(i);
                    try {
                        Object columnValue = resultSet.getObject(i, Class.forName(columnClassName));
                        System.out.print(columnName + ": " + columnValue + " ,");
                    } catch (ClassNotFoundException e) {
                        throw new RuntimeException(e);
                    }
                }
                System.out.println();
            }
        } catch (SQLException e) {
            throw new RuntimeException(e);
        } finally {
            // 关闭资源
            if (connection != null) {
                try {
                    connection.close();
                } catch (SQLException ignore) {
                }
            }
            if (statement != null) {
                try {
                    statement.close();
                } catch (SQLException ignore) {
                }
            }
        }
    }
} 

cook

  1. 把查询的结果放入List<Map<String, Object>>类型的对象, 每一行是列表中的一个元素, 字段名为哈希表的key,字段值为哈希表的value
  • 3
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值