第六周作业(JDBC + MySQL 学习)

jdbc mysql connection 教程

翻译自:JDBC MySQL Connection Tutorial

Java Database Connectivity (JDBC) 是一个基于Java的数据访问技术,它定义了用户入户访问一个数据库。它提供了一组在数据库查询、修改数据的方法。JDBC类包含在java.sqljavax.sql包中。

按照如下步骤建立一个JDBC开发环境,并在这个环境上运行JDBC MYSQL示例程序。

1. 安装 Java

确认你已经安装了Java SE。安装参考 Windows Ubuntu

2. 下载并安装Eclipse IDE

Eclipse安装参考链接

3. 下载并安装MySQL数据库

MySQL安装参考链接

  • 此Java数据库应用程序以MySQL为例,参考次链接在MySQL上创建database、tables,插入数据等等。

4. Java MySQL连接器

JDBC API几乎包含了任意一个数据库的可独立工作的接口。每一种数据库都需要一个特有的驱动,该驱动实现了JDBC API。

JDBC数据库连接器提供了访问数据库的入口,为了能通过JDBC访问数据库,我们需要数据库厂商提供的JDBC驱动。这个驱动通常是以jar或zip文件或其它有效形式同数据库产品一起在官网发布的。这些文件必须放在classpath中(后面的“在Eclipse中配置JDBC驱动”步骤中会讲到),否则会出现class-not-found-exceptions,表示未在classpath中发现驱动。

  • MySQL Connector/J是官方的MySQL JDBC驱动。
  • 可以通过此链接下载Java语言访问MySQL的连接器的jar文件:http://dev.mysql.com/downloads/connector/j/。此教程使用JDBC MySQL连接器5.1版本,将下载文件解压。

5. JDBC MySQL示例数据库

此示例使用的database为"jdbcdb",其中包含下面的表;

  • 在MySQL中创建一个名为"jdbcdb"的database.
  • 在该database里创建下面的表.

代码:

sudo service mysql
mysql -u [此处username] -p
[此处password]
create database jdbcdb;
use jdbcdb;

5.1 Department Table:

Field Type Key Extra
dept_id int Primary Key auto_increment
dept_name varchar(50)
location varchar(50)

代码:

CREATE TABLE Department (
	dept_id int PRIMARY KEY AUTO_INCREMENT,
    dept_name varchar(50),
    location varchar(50)
);

5.2 Employee Table:

Field Type Key Extra
emp_id int Primary Key auto_increment
emp_name varchar(50)
dob date
salary double
dept_id int Foreign key references department(dept_id)

代码:

CREATE TABLE Employee (
	emp_id int PRIMARY KEY AUTO_increment,
    emp_name varchar(50),
    dob date,
    salary double,
    dept_id int,
    FOREIGN KEY (dept_id) REFERENCES Department(dept_id)
);

最后,我们分别向两个表插入一些数据,比如:

insert into Department value(1, 'Finace', 'Service Building');
insert into Department value(2, 'Technology', 'Center Building');
insert into Employee value(1, 'wcb', '2088-08-08', 2888.8, 2);

6. 在Eclipse IDE中建立Java项目

  • 打开Eclipse IDE
  • 建立一个新的Java项目,命名为”JDBCMySQLSample“。如果你是新手,参考此链接了解Java和Eclipse.

7. JDBC MySQL连接URL字符串

我们写一个类 (JDBCMySQLConnection) 来定义数据库连接的配置声明和方法,使JDBC连接到MySQL数据库。

7.1 使用java.sql 包的接口

你需要从java.sql.*包中导入需要的类/接口,它们是Java Application和数据库之间的桥梁。

7.2 加载MySQL Java的驱动

Java MySQL驱动(com.mysql.jdbc.Driver)可从下载的Java MySQL连接器的JAR文件中获得。这个连接器JAR文件要被包含到工程的classpath,后面的”在Eclipse中配置JDBC驱动“中会讲。
语句Class.forName("com.mysql.jdbc.driver")会使MySQL Java驱动被加载到内存。
在下面的代码中,我们创建一个静态字符串常量作为参数传递给Class.forName方法

public static final String DRIVER_CLASS = "com.mysql.jdbc.Driver";
Class.forName(DRIVER_CLASS);

7.3 建立Java MySQL连接

我们通过DriverManager类的getConnection()方法获取从Java到MySQL的连接对象,此方法需要JDBC MySQL连接URL字符串,MySQL数据库的用户名和密码作为参数。在此示例中,我们已将这些参数作为常量传递给getConnection()方法。

public static final String URL = "jdbc:mysql://localhost/jdbcdb";
public static final String USER = "YOUR_DATABASE_USERNAME";
public static final String PASSWORD = "YOUR_DATABASE_PASSWORD";
. . .
. . .
Connection connection = DriverManager.getConnection(URL, USER, PASSWORD);
7.3.1 Java-数据库连接URL字符串

jdbc:<DBMS>://<HOSTNAME>:<PORT_NUMBER>/YOUR_DATABASE_NAME
例如,Java-MySQL连接URL字符串:
jdbc:mysql://localhost:3306/jdbcdb
其中,

  • "jdbc" - 所有数据库都需要有的
  • "mysql" - 任何关系型数据库需要。此数据库是 mysql
  • "localhost" - 你的数据库的服务器主机名
  • 3306 - MySQL的默认端口号,如果没有改为其它端口可以省略
  • YOUR_DATABASE_NAME - MySQL database的名称,在此示例中就是"jdbcdb"

为了完成上面的步骤,新建一个类JDBCMySQLConnection,并放在包com.theopentutorials.jdbc.db中,然后复制下面的代码:

package com.theopentutorials.jdbc.db;
 
//Step 1: Use interfaces from java.sql package 
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
 
public class JDBCMySQLConnection {
    //static reference to itself
    private static JDBCMySQLConnection instance = new JDBCMySQLConnection();
    public static final String URL = "jdbc:mysql://localhost/jdbcdb";
    public static final String USER = "YOUR_DATABASE_USERNAME";
    public static final String PASSWORD = "YOUR_DATABASE_PASSWORD";
    public static final String DRIVER_CLASS = "com.mysql.jdbc.Driver"; 
     
    //private constructor
    private JDBCMySQLConnection() {
        try {
            //Step 2: Load MySQL Java driver
            Class.forName(DRIVER_CLASS);
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        }
    }
     
    private Connection createConnection() {
 
        Connection connection = null;
        try {
            //Step 3: Establish Java MySQL connection
            connection = DriverManager.getConnection(URL, USER, PASSWORD);
        } catch (SQLException e) {
            System.out.println("ERROR: Unable to Connect to Database.");
        }
        return connection;
    }   
     
    public static Connection getConnection() {
        return instance.createConnection();
    }
}

8. Employee类

我们写一个类Employee,其属性为数据库中Employee表的属性。
例如,为了查询Employee表,我们用下面代码实现Employee类;

package com.theopentutorials.jdbc.to;
 
import java.util.Date;
 
public class Employee {
     
    private int empId;
    private String empName;
    private Date dob;
    private double salary;
    private int deptId;
     
    public int getEmpId() {
        return empId;
    }
    public void setEmpId(int empId) {
        this.empId = empId;
    }
    public String getEmpName() {
        return empName;
    }
    public void setEmpName(String empName) {
        this.empName = empName;
    }
    public Date getDob() {
        return dob;
    }
    public void setDob(Date dob) {
        this.dob = dob;
    }
    public double getSalary() {
        return salary;
    }
    public void setSalary(double salary) {
        this.salary = salary;
    }
    public void setDeptId(int deptId) {
        this.deptId = deptId;
    }
    public int getDeptId() {
        return deptId;
    }
     
    //toString()
    @Override
    public String toString() {
        return "Employee [empId=" + empId + ", empName=" + empName + ", dob="
                + dob + ", salary=" + salary + ", deptId=" + deptId + "]";
    }       
}

9. Java Application Client (main())

  • 一个Java-数据库的Application处理任何的SQL语句必须经过以下几步:
    1. 建立一个连接。(上面提到的JDBCMySQLConnection类已经完成)
    2. 创建一个Statement对象(41行)
    3. 执行查询语句(execute(String sql)方法,42行)
    4. 处理ResultSet对象。仅在查询语句后需要。(44-51行)
    5. 关闭连接,立即释放Statement对象的数据库和JDBC资源。(57行)

我们写一个 “JDBCMySQLDemo” 类放在“com.theopentutorials.jdbc.main” 包中,来测试JDBC MySQL连接并执行一个简单的查询语句。

package com.theopentutorials.jdbc.main;
 
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import com.theopentutorials.jdbc.db.JDBCMySQLConnection;
import com.theopentutorials.jdbc.to.Employee;
 
public class JDBCMySQLDemo {
    public static void main(String[] args) {        
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        System.out.println("Enter the EmployeeID:");
         
        int employeeId;
        try {
            employeeId = Integer.parseInt(br.readLine()); //21行
            JDBCMySQLDemo demo = new JDBCMySQLDemo();
            Employee employee = demo.getEmployee(employeeId); //23行
            System.out.println(employee);           
        } catch (NumberFormatException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }       
    }
 
    public Employee getEmployee(int employeeId)  {      
        ResultSet rs = null;
        Connection connection = null;
        Statement statement = null; 
         
        Employee employee = null;
        String query = "SELECT * FROM Employee WHERE emp_id=" + employeeId; //38行
        try {           
            connection = JDBCMySQLConnection.getConnection();
            statement = connection.createStatement(); //41行
            rs = statement.executeQuery(query);  //42行
             
            if (rs.next()) {       //44行
                employee = new Employee();
                employee.setEmpId(rs.getInt("emp_id"));
                employee.setEmpName(rs.getString("emp_name"));
                employee.setDob(rs.getDate("dob"));
                employee.setSalary(rs.getDouble("salary"));
                employee.setDeptId((rs.getInt("dept_id")));
            }    //51行
        } catch (SQLException e) {
            e.printStackTrace();
        } finally {
            if (connection != null) {
                try {
                    connection.close();    //57行
                } catch (SQLException e) {
                    e.printStackTrace();
                }
            }
        }
        return employee;
    }
}

这个JDBC MySQL示例得到用户输入的employee ID,在数据库中找到这个employee并且利用标准输出显示详情。
这段程序步骤如下:

  • 21行根据用户输入得到employee ID
  • 23行调用getEmployee()方法,并传给参数employee ID
  • 38行为查询语句
  • 40行建立java-MySQL连接
  • 41行获得statement对象
  • 42行执行查询并返回ResultSet对象
  • 44-51行处理ResultSet对象
  • 57行关闭数据库连接

10. 在Eclipse中配置JDBC驱动

如果你此时运行JDBCMySQLDemo类会产生如下异常:
java.lang.ClassNotFoundException: com.mysql.jdbc.Driver
你需要将之前下载好的Java MySQL Connector JAR文件添加到工程的classpath中。
右击工程名(JDBCMySQLSample) -> Properties -> Buildpath -> Libraries -> Add External JAR 然后选择 “mysql-connector-java-5.1.14-bin.jar” JAR 文件.

11. 输出

运行JDBCMySQLDemo类,将得到如下的输出结果:

12. 文件结构

此示例项目的完整的文件结构如下所示:

原文地址:https://www.cnblogs.com/wcb-xtu/p/5353921.html