JDBC Java 连接 MySQL 数据库

时间:2021-02-03 13:06:21

MySQL 版本:Server version: 5.7.17-log MySQL Community Server (GPL)

 


 

用于测试的 MySQL 数据库:game

查看数据库中的表

mysql> SHOW TABLES;
+----------------+
| Tables_in_game |
+----------------+
| user           |
+----------------+
1 row in set (0.00 sec)

查看表的定义

mysql> DESC user;
+----------+-------------+------+-----+---------+----------------+
| Field    | Type        | Null | Key | Default | Extra          |
+----------+-------------+------+-----+---------+----------------+
| id       | int(8)      | NO   | PRI | NULL    | auto_increment |
| username | varchar(16) | NO   |     | NULL    |                |
| password | varchar(16) | NO   |     | NULL    |                |
+----------+-------------+------+-----+---------+----------------+
3 rows in set (0.00 sec)

查看表中的数据

mysql> SELECT * FROM user;
+----+----------+----------+
| id | username | password |
+----+----------+----------+
|  1 | mk       | 123      |
|  2 | seven    | 456      |
+----+----------+----------+
2 rows in set (0.00 sec)

 

使用 Java 连接 MySQL 数据库,查询表中的数据。

Java 工程结构:

JDBC Java 连接 MySQL 数据库

Demo.java 文件中的内容:

 1 package com.mk;
 2 
 3 import java.sql.Connection;
 4 import java.sql.DriverManager;
 5 import java.sql.PreparedStatement;
 6 import java.sql.ResultSet;
 7 import java.sql.SQLException;
 8 
 9 public class Demo {
10 
11   public static void main(String[] args) {
12     Connection connection = null;
13     PreparedStatement ps = null;
14     ResultSet rs = null;
15     try {
16       // 加载 MySQL JDBC 驱动类
17       Class.forName("com.mysql.jdbc.Driver");
18       // 建立连接(连接对象内部其实包含了Socket对象,是一个远程的连接,比较耗时!这是Connection对象管理的一个要点!)
19       // 真正开发中,为了提高效率,都会使用连接池来管理连接对象!
20       connection = DriverManager.getConnection("jdbc:mysql://localhost:3306/game", "root", "123456");
21       // 查询语句
22       String sql = "SELECT * FROM user WHERE username=?";   // ? 占位符
23       // 使用 PreparedStatement,防止 SQL 注入
24       ps = connection.prepareStatement(sql);
25       // 设置占位符参数
26       ps.setString(1, "mk");
27       // 返回查询结果
28       rs = ps.executeQuery();
29       while (rs.next()) {
30         System.out.println("id: " + rs.getInt("id"));
31         System.out.println("username: " + rs.getString("username"));
32         System.out.println("password: " + rs.getString("password"));
33       }
34     } catch (ClassNotFoundException e) {
35       e.printStackTrace();
36     } catch (SQLException e) {
37       e.printStackTrace();
38     } finally {
39       if (rs != null) {
40         try {
41           rs.close();
42         } catch (SQLException e) {
43           e.printStackTrace();
44         }
45       }
46       if (ps != null) {
47         try {
48           ps.close();
49         } catch (SQLException e) {
50           e.printStackTrace();
51         }
52       }
53       if (connection != null) {
54         try {
55           connection.close();
56         } catch (SQLException e) {
57           e.printStackTrace();
58         }
59       }
60     }
61   }
62 }

查询结果通过控制台输出:

id: 1
username: mk
password: 123

 


 

相关参考:Java 从资源文件(.properties)中读取数据

改进一下上面的例子,将连接 MySQL 数据库的 url、user、password 等参数放置在一个资源文件中,通过 Java 程序读取资源文件,获取相关信息。这样可以提高程序的灵活性,如果 url、user、password 等参数发生变更,只需修改资源文件即可。

 

在 Java 工程目录 src 下,添加一个文件:db.properties

JDBC Java 连接 MySQL 数据库

db.properties 文件中的内容:

mysqlDriver=com.mysql.jdbc.Driver
mysqlUrl=jdbc\:mysql\://localhost\:3306/game
mysqlUser=root
mysqlPassword=123456

修改 Demo.java 文件中的内容:

 1 package com.mk;
 2 
 3 import java.io.IOException;
 4 import java.sql.Connection;
 5 import java.sql.DriverManager;
 6 import java.sql.PreparedStatement;
 7 import java.sql.ResultSet;
 8 import java.sql.SQLException;
 9 import java.util.Properties;
10 
11 public class Demo {
12   static Properties properties = null;  // 用于读取和处理资源文件中的信息
13   static {                              // 类加载的时候被执行一次
14     properties = new Properties(); 15     try { 16       properties.load(Thread.currentThread().getContextClassLoader().getResourceAsStream("db.properties")); 17 // System.out.println(properties.getProperty("mysqlDriver")); // 根据提供的键找到值 18 // System.out.println(properties.getProperty("mysqlUrl")); 19 // System.out.println(properties.getProperty("mysqlUser")); 20 // System.out.println(properties.getProperty("mysqlPassword"));
21     } catch (IOException e) { 22  e.printStackTrace(); 23  } 24  } 25   
26   public static void main(String[] args) {
27     Connection connection = null;
28     PreparedStatement ps = null;
29     ResultSet rs = null;
30     try {
31       // 加载 MySQL JDBC 驱动类
32       Class.forName(properties.getProperty("mysqlDriver")); 33       // 建立连接(连接对象内部其实包含了Socket对象,是一个远程的连接,比较耗时!这是Connection对象管理的一个要点!)
34       // 真正开发中,为了提高效率,都会使用连接池来管理连接对象!
35       String mysqlUrl = properties.getProperty("mysqlUrl"); 36       String mysqlUser = properties.getProperty("mysqlUser"); 37       String mysqlPassword = properties.getProperty("mysqlPassword"); 38       connection = DriverManager.getConnection(mysqlUrl, mysqlUser, mysqlPassword); 39       // 查询语句
40       String sql = "SELECT * FROM user WHERE username=?";   // ? 占位符
41       // 使用 PreparedStatement,防止 SQL 注入
42       ps = connection.prepareStatement(sql);
43       // 设置占位符参数
44       ps.setString(1, "mk");
45       // 返回查询结果
46       rs = ps.executeQuery();
47       while (rs.next()) {
48         System.out.println("id: " + rs.getInt("id"));
49         System.out.println("username: " + rs.getString("username"));
50         System.out.println("password: " + rs.getString("password"));
51       }
52     } catch (ClassNotFoundException e) {
53       e.printStackTrace();
54     } catch (SQLException e) {
55       e.printStackTrace();
56     } finally {
57       if (rs != null) {
58         try {
59           rs.close();
60         } catch (SQLException e) {
61           e.printStackTrace();
62         }
63       }
64       if (ps != null) {
65         try {
66           ps.close();
67         } catch (SQLException e) {
68           e.printStackTrace();
69         }
70       }
71       if (connection != null) {
72         try {
73           connection.close();
74         } catch (SQLException e) {
75           e.printStackTrace();
76         }
77       }
78     }
79   }
80 }