一、JDBC 连接mysql

113 阅读2分钟

本文中用到的sql语句

CREATE DATABASE
IF
	NOT EXISTS mybatis;
USE mybatis;

CREATE TABLE `blog` (
  `bid` int(11) NOT NULL AUTO_INCREMENT,
  `name` varchar(255) DEFAULT NULL,
  `author_id` int(11) DEFAULT NULL,
  PRIMARY KEY (`bid`)
) ENGINE=InnoDB  DEFAULT CHARSET=utf8;

INSERT INTO `blog` (`bid`, `name`, `author_id`) VALUES (1, 'RabbitMQ延时消息', 1001);
INSERT INTO `blog` (`bid`, `name`, `author_id`) VALUES (2, 'MyBatis源码分析', 1008);

JDBC 是啥

JDBC(Java Database Connectivity): java 数据库连接

JDBC 示例

JDBC 连接的步骤

  1. Class.forName 注册驱动
  2. 获取一个Connection, Connection 用来连接数据库
  3. 创建一个 Statement, Statement 是用来执行sql 语句的
  4. 通过 statement 的 execute() 方法 执行sql 语句
  5. 通过ResultSet 获取数据, 给 POJO 赋值
  6. 关闭资源。

我们来看下代码演示, 代码中用到的数据库 sql 文件, 请参考附件

    @Test
    public void testJdbc() throws IOException {
        Connection conn = null;
        Statement stmt = null;
        Blog blog = new Blog();

        try {
            // 注册 JDBC 驱动
            Class.forName("com.mysql.jdbc.Driver");
            // 打开连接
            conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/mybatis", "root", "root");

            // 执行查询
            stmt = conn.createStatement();
            String sql = "SELECT bid, name, author_id FROM blog where bid = 1";
            ResultSet rs = stmt.executeQuery(sql);

            // 获取结果集
            while (rs.next()) {
                Integer bid = rs.getInt("bid");
                String name = rs.getString("name");
                Integer authorId = rs.getInt("author_id");
                blog.setAuthorId(authorId);
                blog.setBid(bid);
                blog.setName(name);
            }
            System.out.println(blog);

            rs.close();
            stmt.close();
            conn.close();
        } catch (SQLException se) {
            se.printStackTrace();
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            try {
                if (stmt != null) stmt.close();
            } catch (SQLException se2) {
            }
            try {
                if (conn != null) conn.close();
            } catch (SQLException se) {
                se.printStackTrace();
            }
        }
    }

上面的代码看上去有什么问题吗 ?

1 重复代码

  • 注册驱动
  • 创建连接
  • 关闭连接

2 java 代码里面冗余了sql 语句
3 sql 执行结果映射到 java 对象复杂
4 资源管理,管理连接资源的创建和释放等。需要人为处理,容易忘记关闭资源。

针对上面的问题,我们怎么去解决 ? 自己造轮子处理,当然不是啦, 有轮子先看看已有的轮子好不好用(手动狗头)。后面我们会对 工具包,orm 框架分别做简单介绍: 主要有以下内容: 希望我能坚持输出下去,哈哈

工具包

  1. Apache DBUtils
  2. Spring JDBC

工具包虽然 相对 jdbc 来说简化了我们很多的操作, 但是还是有很多不便之处,具体细节我们在后面介绍。

orm 框架

1.hibernate

2.mybatis