一、JDBC基础示例

时间:2021-10-08 19:52:48

一、简介

JDBC全称叫做Java database connectivity,直译为Java语言的数据库连接。它主要针对于支持结构化查询语言(SQL)的数据源,与Java程序连接并操作数据。

JDBC的基础文档:https://docs.oracle.com/javase/tutorial/jdbc/basics/index.html

Java doc文档:https://blog.fondme.cn/apidoc/jdk-1.8-google/java/sql/package-frame.html

二、代码示例

这里以本地mysql数据库为例,准备一张"t_user"表

DROP TABLE IF EXISTS `t_user`;
CREATE TABLE `t_user`  (
  `id` ) NOT NULL AUTO_INCREMENT,
  `name` ) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT NULL,
  `age` ) NULL DEFAULT NULL,
  PRIMARY KEY (`id`) USING BTREE
) ENGINE  CHARACTER SET = utf8 COLLATE = utf8_bin ROW_FORMAT = Dynamic;

-- ----------------------------
-- Records of t_user
-- ----------------------------
, );

maven工程,引入依赖

<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
    <version>6.0.6</version>
</dependency>

Java代码示例

import java.sql.*;

public class JdbcDemo {

    static {
        try {
            // 加载驱动,并添加到DriverManager的list集合中
            Class.forName("com.mysql.cj.jdbc.Driver");
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        }
    }

    public static void main(String[] args) throws SQLException {
        Connection connection = null;
        PreparedStatement  statement  = null;
        ResultSet  resultSet  = null;
        try {
            // 获取连接
            connection = DriverManager.getConnection("jdbc:mysql://localhost:3306/test?serverTimezone=UTC&useSSL=true", "root", "password");
            // 创建statement对象,预编译SQL语句
            statement = connection.prepareStatement("SELECT * FROM t_user WHERE id = ?");
            // 设置参数
            statement.setLong(1, 1);
            // 执行查询语句
            resultSet = statement.executeQuery();
            // 遍历查询结果
            while (resultSet.next()) {
                // 打印字段
                System.out.println(resultSet.getString(1));
                System.out.println(resultSet.getString(2));
                System.out.println(resultSet.getString(3));
            }
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            // 关闭资源
            resultSet.close();
            statement.close();
            connection.close();
        }
    }
}

执行结果

1
lay
23

Java代码示例中使用了PreparedStatement,对SQL进行预编译操作,SQL会被发送到dbms系统进行编译。预编译操作可以防止SQL注入,提升数据的安全性。

另外,新版的JDBC会自动加载驱动,可以不用显示地去Class.forName来加载驱动了。