JDBC Java 连接 MySQL 数据库

Posted satu

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了JDBC Java 连接 MySQL 数据库相关的知识,希望对你有一定的参考价值。

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 工程结构:

技术图片

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

技术图片

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 

 

以上是关于JDBC Java 连接 MySQL 数据库的主要内容,如果未能解决你的问题,请参考以下文章

jdbc连接数据库my sql 后台java代码怎么写

Java JDBC连接MySQL数据库,基础语法及自定义JDBC的MySQL工具类

java连接mysql的配置文件

MySQL学习——Java连接MySQL数据库

Java JDBC 连接 MySQL8 数据库

使用 JDBC 将 Java 代码与远程 MySQL 数据库连接 [重复]