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 }