zoukankan      html  css  js  c++  java
  • 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 }
  • 相关阅读:
    2012搜狗校园招聘笔试题(2)
    T-SQL中只截取日期的日期部分和日期的时间部分
    Delphi XE4 TStringHelper用法详解
    TScreen 类
    TScreen 类
    Delphi中Form的position属性与代码自定义窗体位置
    如何让窗口显示在电脑屏幕中间
    C#中整型数据类型
    C# WinForm开发系列
    SQL中EXCEPT和Not in的区别?
  • 原文地址:https://www.cnblogs.com/Satu/p/10652494.html
Copyright © 2011-2022 走看看