翻译自:JDBC MySQL Connection Tutorialjava
Java Database Connectivity (JDBC) 是一个基于Java的数据访问技术,它定义了用户入户访问一个数据库。它提供了一组在数据库查询、修改数据的方法。JDBC类包含在java.sql
和javax.sql
包中。mysql
按照以下步骤创建一个JDBC开发环境,并在这个环境上运行JDBC MYSQL示例程序。linux
确认你已经安装了Java SE。安装参考 Windows Ubuntusql
MySQL安装参考连接ubuntu
JDBC API几乎包含了任意一个数据库的可独立工做的接口。每一种数据库都须要一个特有的驱动,该驱动实现了JDBC API。windows
JDBC数据库链接器提供了访问数据库的入口,为了能经过JDBC访问数据库,咱们须要数据库厂商提供的JDBC驱动。这个驱动一般是以jar或zip文件或其它有效形式同数据库产品一块儿在官网发布的。这些文件必须放在classpath中(后面的“在Eclipse中配置JDBC驱动”步骤中会讲到),不然会出现class-not-found-exceptions
,表示未在classpath中发现驱动。服务器
此示例使用的database为"jdbcdb",其中包含下面的表;app
代码:eclipse
sudo service mysql mysql -u [此处username] -p [此处password] create database jdbcdb; use jdbcdb;
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) );
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);
咱们写一个类 (JDBCMySQLConnection) 来定义数据库链接的配置声明和方法,使JDBC链接到MySQL数据库。
你须要从java.sql.*包中导入须要的类/接口,它们是Java Application和数据库之间的桥梁。
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);
咱们经过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);
jdbc:<DBMS>://<HOSTNAME>:<PORT_NUMBER>/YOUR_DATABASE_NAME
例如,Java-MySQL链接URL字符串:
jdbc:mysql://localhost:3306/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(); } }
咱们写一个类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 + "]"; } }
咱们写一个 “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而且利用标准输出显示详情。
这段程序步骤以下:
若是你此时运行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 文件.
运行JDBCMySQLDemo类,将获得以下的输出结果:
此示例项目的完整的文件结构以下所示: