JDBC + MySQL 示例
jdbc mysql connection 教程
翻译自:JDBC MySQL Connection Tutorial
Java Database Connectivity (JDBC) 是一个基于Java的数据访问技术,它定义了用户入户访问一个数据库。它提供了一组在数据库查询、修改数据的方法。JDBC类包含在java.sql
和javax.sql
包中。
按照如下步骤建立一个JDBC开发环境,并在这个环境上运行JDBC MYSQL示例程序。
1. 安装 Java
确认你已经安装了Java SE。安装参考 Windows Ubuntu
2. 下载并安装Eclipse IDE
3. 下载并安装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语句必须经过以下几步:
- 建立一个连接。(上面提到的JDBCMySQLConnection类已经完成)
- 创建一个Statement对象(41行)
- 执行查询语句(execute(String sql)方法,42行)
- 处理ResultSet对象。仅在查询语句后需要。(44-51行)
- 关闭连接,立即释放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. 文件结构
此示例项目的完整的文件结构如下所示:
JDBC + MySQL 示例的更多相关文章
- JDBC代码示例
package test; import java.sql.Connection;import java.sql.DriverManager;import java.sql.ResultSet;imp ...
- JDBC MySQL
JDBC连接MySQL 加载及注册JDBC驱动程序 Class.forName("com.mysql.jdbc.Driver"); Class.forName("com. ...
- Java JDBC MySQL
一.驱动 下载地址:https://dev.mysql.com/downloads/connector/j/ 二.数据库连接配置 jdbc:mysql://address:port/database? ...
- JDBC简单示例代码
本文章教程中将演示如何创建一个简单的JDBC应用程序的示例. 这将显示如何打开数据库连接,执行SQL查询并显示结果. 这个示例代码中涉及所有步骤,一些步骤将在本教程的后续章节中进行说明. 创建JDBC ...
- 一、JDBC基础示例
一.简介 JDBC全称叫做Java database connectivity,直译为Java语言的数据库连接.它主要针对于支持结构化查询语言(SQL)的数据源,与Java程序连接并操作数据. JDB ...
- JDBC MySQL 多表关联查询查询
public static void main(String[] args) throws Exception{ Class.forName("com.mysql.jdbc.Driver&q ...
- jdbc mysql写入中文乱码解决
一. 问题 数据库编码:utf8 mysql> create database dbnameDEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci; ...
- jdbc mysql crud dao模型 sql注入漏洞 jdbc 操作大文件
day17总结 今日内容 l JDBC 1.1 上次课内容总结 SQL语句: 1.外键约束:foreign key * 维护多个表关系! * 用来保证数据完整性! 2.三种关系: * 一对多: * 一 ...
- jdbc mysql 取数,突然取不到数据,数据库中有数据
项目用的是jdbc+mysql,局网取数据的时候,数据一切正常,但是传到服务器上以后,曾经是好的 不知道为什么,近期一传就取不到数据,发现android写的也没有问题,至少大体上没有语法问题. 跟踪后 ...
随机推荐
- Asp.Net Razor中的Consistent Layout
有意义的参考:http://www.asp.net/web-pages/tutorials/working-with-pages/3-creating-a-consistent-look Asp.ne ...
- AD10的PCB设计规则
PCB布线规则,布板需要注意的点很多,但是基本上注意到了下面的这此规则,LAYOUT PCB应该会比较好,不管是高速还是低频电路,都基本如此. 1. 一般规则 1.1 PCB板上预划分数字.模拟.DA ...
- Spotlight的连接设置
- C#数组的声明
C#一维数组的声明方式 int[] myArray; string[] myStrArr; 但是在访问数组之前必须初始化. C#数组的初始化方式有两种,第一种是在声明数组的时候为数组的元素赋初值: i ...
- 浅谈大型web系统架构
动态应用,是相对于网站静态内容而言,是指以c/c++.php.Java.perl..net等服务器端语言开发的网络应用软件,比如论坛.网络相册.交友.BLOG等常见应用.动态应用系统通常与数据库系统. ...
- 在virtualbox中安装CentOS-7
当初才接触linux的时候,因为条件限制,只能在虚拟机中安装linux系统使用,由于是小白,爬了好多坑.于是决定写一篇关于在虚拟机中安装linux系统的博客.一是为了巩固自己的知识,二是希望能够对新手 ...
- Windows Phone 六、JSON序列化
JSON序列化 public class Person { public int Id { get; set; } public string Name { get; set; } public in ...
- Flex 布局2
Flex 布局2 你会看到,不管是什么布局,Flex往往都可以几行命令搞定. 我只列出代码,详细的语法解释请查阅<Flex布局教程:语法篇>.我的主要参考资料是Landon Sch ...
- Python字符串格式化
一.使用格式化符来格式化字符串: Python支持的所有格式化符 格式化符 意义 'd' 返回要格式化对象的十进制表示,如果可以 'i' 返回要格式化对象的十进制表示,如果可以 'o' 返回要格式化对 ...
- Excel应该这么玩——5、三种数据:Excel也是系统
Excel最常用的功能就是记录数据,把数据按照行列记录下来.这部分数据是源数据,是业务活动中最原始的流水账,作为后续操作的依据.为了从源数据中得出一定的结论,需要对源数据进行分析得出报表数据. ...