在PHP中连接MySQL是最简单的,PHP的发行包里通常带有MySQL驱动模块,只要简单修改一下PHP配置文件就可以加载MySQL驱动,而且PHP提供了很多专用于操作MySQL数据库的函数,用起来的确很爽。在Java、Ruby和Perl中连接MySQL也是比较简单的,这些语言都提供了某种抽象接口用于管理数据库驱动,无论用哪家的数据库,程序代码都几乎一样。
本文简单总结了Java连接MySQL数据库的一些基础问题,包括JDBC概述、四类JDBC驱动、Connector/J的安装、JDBC API的使用等。使用的软件版本是JDK 1.6.0.2 和 MySQL 5.1。
一、JDBC概述
Java通过JDBC连接数据库,JDBC是 Java Database Connectivity的缩写。JDBC属于Java核心API,它包含一组丰富的类和接口,支持ANSI SQL-92标准,为Java程序连接数据库提供了简单便捷的途径。
JDBC是一种 与平台无关的设计,它能够管理不同的数据库驱动程序,并为用户程序提供统一的接口。当用户需要连接几个不同的数据库时,只需通知JDBC加载相应的驱动程序,而不需要修改任何访问数据库的代码。
基于JDBC的应用程序系统具有如下所示的结构:
Java Application <--->
JDBC API <--->
JDBC DriverManager <--->
JDBC Database Driver <--->
Database
使用JDBC可以简化如下三种编程任务:
1. 连接到数据源,比如一个数据库
2. 发送查询和更新到数据库
3. 检索并处理从数据库接收到了结果
一个典型的 连接- 查询- 解析的过程如下所示:
Connection con = DriverManager.getConnection
( "jdbc:myDriver:wombat", "myLogin","myPassword");
Statement stmt = con.createStatement();
ResultSet rs = stmt.executeQuery("SELECT a, b, c FROM Table1");
while (rs.next()) {
int x = rs.getInt("a");
String s = rs.getString("b");
float f = rs.getFloat("c");
}
这段代码建立一个 DriverManager实例连接并登录数据库,一个 Statement实例把SQL查询提交到数据库,一个 ResultSet实例接收从数据库返回的查询结果,最后用一个简单的while循环从ResultSet中解析出感兴趣的数据。 就是这么简单!
二、四类JDBC驱动程序
由于JDBC是独立于数据库实现的,而每个数据库实现均有自己的通信协议,因此JDBC驱动程序通常由数据库软件商和第三方软件商提供,也就是说 在使用JDBC前,用户必须自己安装数据库驱动程序。
实际存在四种类型的JDBC驱动:
类型1: JDBC-ODBC Bridge。这类JDBC驱动实际上是通过ODBC访问数据库的,因此需要首先安装ODBC驱动,在程序运行时也要首先加载ODBC驱动。一般只用于系统开发和测试。
类型2: JDBC-Native API Bridge。同类型1一样,这类JDBC驱动也需要安装额外的Native驱动支持程序。
类型3: JDBC-Middleware。所谓的Middleware其实是一种代理,它全权负责数据库的管理和使用,因此本地计算机上不需要安装任何数据库驱动程序,只要确保应用程序可以和Middleware通信即可。这种结构模型多用于Java Applet和Client/Server环境中,所有访问数据库的任务都在Server端完成。
类型4: Pure JDBC Driver。此类驱动程序使用纯Java语言开发,能够直接连接数据库,通常是最好的选择。本文讲述的Java程序连接MySQL数据库的方法就是采用这种驱动程序。
三、安装Connector/J
MySQL官方发布的JDBC驱动程序称为 MySQL Connector/J。这是一个JDBC-3.0“ 类型4”的驱动,它是纯Java开发的,实现了JDBC-3.0的全部要求,使用MySQL协议与MySQL服务器直接通信。
官方下载页面: http://dev.mysql.com/downloads/connector/j/5.1.html
Connector/J是以.zip或.tar.gz存档形式发布的,其中包括源代码、说明文档、以及编译好的二进制文件的 JAR存档, .jar的名字就像" mysql-connector-java-[version]-bin-g.jar"。
Connector/J可以安装到任何位置, 只需要把包含所有class的JAR加入系统环境变量CLASSPATH,就可以在Java程序中使用它了。
如果想在Tomcat、JBoss等服务器中使用Connector/J,安装前请参考相关文档。
四、在Java程序中连接MySQL
假设Connector/J已经安装好了,在Java程序中访问MySQL需要遵循以下步骤:
(1) 在程序的首部引入java.sql包,通常可以简单地将其全部引入:
import java.sql.*;
注意: 不要引入com.mysql.jdbc.*,否则会出错!
(2) 使用Class.forName()方法加载Connector/J中的驱动类:
Class.forName("com.mysql.jdbc.Driver");
其中, com.mysql.jdbc.Driver类是对java.sql.Driver接口的实现, 它就在Connector/J提供的 .jar 包里。
有的文章里要求这样:
Class.forName("com.mysql.jdbc.Driver") .newInstance();
实际上这是没有必要的,调用Class.forName()自动创建一个驱动实例并把它注册到DriverManager,所以你不需要再创建一个驱动实例,如果你这么做了,就会创建一个多余的重复,但这也没有什么损害。
(3) 如果第二步没有抛出异常,表明加载Connector/J驱动程序成功,下面连接数据库:
Connection con = DriverManager.getConnection(conURL, user, password);
String conURL指明了要连接的数据库的URL,还可以在conURL中包含数据库名,用户名和密码等。
conURL一般遵循如下格式: jdbc:subprotocol://host.domain/database,对于Connector/J而言,subprotocal就是mysql。
例如访问本地计算机上的名为Company的数据库, conURL = " jdbc:mysql://localhost/Company";
(4) 如果一切正常,现在可以对数据库进行查询或修改了。
取得一个Statement实例(也只需要一个):
Statement s = con.createStatement();
可以使用Statement类的 executeQuery、 executeUpdate、 execute方法向MySQL服务器提交SQL语句。
e.g.
ResultSet rs = s .executeQuery(" SELECT * FROM Emplyee; ");
ResultSet类保存了查询操作返回的表格。
(5) 释放资源,关闭Java程序到MySQL服务器的连接:
s.close();
con.close();
五、一个完整的例子
//----------------------------------------------------------
import java.sql.*;
public class test {
public static void main(int Argc, String[] Argv) {
String JDriver = "com.mysql.jdbc.Driver"; // MySQL提供的JDBC驱动,要保证它在CLASSPATH里可见
String conURL = "jdbc:mysql://localhost/Company"; // 本地计算机上的MySQL数据库Company的URL
try {
Class.forName(JDriver);
}
catch(ClassNotFoundException cnf_e) { // 如果找不到驱动类
System.out.println("Driver Not Found: " + cnf_e);
}
try {
Connection con = DriverManager.getConnection(conURL, "root", "123456"); // 连接数据库
Statement s = con.createStatement(); // Statement类用来提交SQL语句
ResultSet rs = s.executeQuery("select * from Employee;"); // 提交查询,返回的表格保存在rs中
while(rs.next()) { // ResultSet指针指向下一个“行”
System.out.println(rs.getInt("No") + // 获取员工号
"\t" + rs.getString("Name") + // 获取员工名字
"\t" + rs.getInt("Age")); // 获取员工年龄
}
s.close(); // 释放Statement对象
con.close(); // 关闭到MySQL服务器的连接
}
catch(SQLException sql_e) { // 都是SQLException
System.out.println(sql_e);
}
} // main()
}
//----------------------------------------------------------
六、进一步的问题
1 prefer DataSource rather than DriverManager
2 Using <CallableStatements> to Execute [Stored Procedures]
3 Transactions
4 Metadata
5 ...
学会之后再补充上。
七、参考文献
1 Java 2 SE 6 Documentation API Specification, java.sql Packages.
2 The Java Tutorials, JDBC DataBase Access: http://java.sun.com/docs/books/tutorial/jdbc/
3 MySQL 5.0 Reference Manual, Connectors, MySQL Connector/J
本文简单总结了Java连接MySQL数据库的一些基础问题,包括JDBC概述、四类JDBC驱动、Connector/J的安装、JDBC API的使用等。使用的软件版本是JDK 1.6.0.2 和 MySQL 5.1。
一、JDBC概述
Java通过JDBC连接数据库,JDBC是 Java Database Connectivity的缩写。JDBC属于Java核心API,它包含一组丰富的类和接口,支持ANSI SQL-92标准,为Java程序连接数据库提供了简单便捷的途径。
JDBC是一种 与平台无关的设计,它能够管理不同的数据库驱动程序,并为用户程序提供统一的接口。当用户需要连接几个不同的数据库时,只需通知JDBC加载相应的驱动程序,而不需要修改任何访问数据库的代码。
基于JDBC的应用程序系统具有如下所示的结构:
Java Application <--->
JDBC API <--->
JDBC DriverManager <--->
JDBC Database Driver <--->
Database
使用JDBC可以简化如下三种编程任务:
1. 连接到数据源,比如一个数据库
2. 发送查询和更新到数据库
3. 检索并处理从数据库接收到了结果
一个典型的 连接- 查询- 解析的过程如下所示:
Connection con = DriverManager.getConnection
( "jdbc:myDriver:wombat", "myLogin","myPassword");
Statement stmt = con.createStatement();
ResultSet rs = stmt.executeQuery("SELECT a, b, c FROM Table1");
while (rs.next()) {
int x = rs.getInt("a");
String s = rs.getString("b");
float f = rs.getFloat("c");
}
这段代码建立一个 DriverManager实例连接并登录数据库,一个 Statement实例把SQL查询提交到数据库,一个 ResultSet实例接收从数据库返回的查询结果,最后用一个简单的while循环从ResultSet中解析出感兴趣的数据。 就是这么简单!
二、四类JDBC驱动程序
由于JDBC是独立于数据库实现的,而每个数据库实现均有自己的通信协议,因此JDBC驱动程序通常由数据库软件商和第三方软件商提供,也就是说 在使用JDBC前,用户必须自己安装数据库驱动程序。
实际存在四种类型的JDBC驱动:
类型1: JDBC-ODBC Bridge。这类JDBC驱动实际上是通过ODBC访问数据库的,因此需要首先安装ODBC驱动,在程序运行时也要首先加载ODBC驱动。一般只用于系统开发和测试。
类型2: JDBC-Native API Bridge。同类型1一样,这类JDBC驱动也需要安装额外的Native驱动支持程序。
类型3: JDBC-Middleware。所谓的Middleware其实是一种代理,它全权负责数据库的管理和使用,因此本地计算机上不需要安装任何数据库驱动程序,只要确保应用程序可以和Middleware通信即可。这种结构模型多用于Java Applet和Client/Server环境中,所有访问数据库的任务都在Server端完成。
类型4: Pure JDBC Driver。此类驱动程序使用纯Java语言开发,能够直接连接数据库,通常是最好的选择。本文讲述的Java程序连接MySQL数据库的方法就是采用这种驱动程序。
三、安装Connector/J
MySQL官方发布的JDBC驱动程序称为 MySQL Connector/J。这是一个JDBC-3.0“ 类型4”的驱动,它是纯Java开发的,实现了JDBC-3.0的全部要求,使用MySQL协议与MySQL服务器直接通信。
官方下载页面: http://dev.mysql.com/downloads/connector/j/5.1.html
Connector/J是以.zip或.tar.gz存档形式发布的,其中包括源代码、说明文档、以及编译好的二进制文件的 JAR存档, .jar的名字就像" mysql-connector-java-[version]-bin-g.jar"。
Connector/J可以安装到任何位置, 只需要把包含所有class的JAR加入系统环境变量CLASSPATH,就可以在Java程序中使用它了。
如果想在Tomcat、JBoss等服务器中使用Connector/J,安装前请参考相关文档。
四、在Java程序中连接MySQL
假设Connector/J已经安装好了,在Java程序中访问MySQL需要遵循以下步骤:
(1) 在程序的首部引入java.sql包,通常可以简单地将其全部引入:
import java.sql.*;
注意: 不要引入com.mysql.jdbc.*,否则会出错!
(2) 使用Class.forName()方法加载Connector/J中的驱动类:
Class.forName("com.mysql.jdbc.Driver");
其中, com.mysql.jdbc.Driver类是对java.sql.Driver接口的实现, 它就在Connector/J提供的 .jar 包里。
有的文章里要求这样:
Class.forName("com.mysql.jdbc.Driver") .newInstance();
实际上这是没有必要的,调用Class.forName()自动创建一个驱动实例并把它注册到DriverManager,所以你不需要再创建一个驱动实例,如果你这么做了,就会创建一个多余的重复,但这也没有什么损害。
(3) 如果第二步没有抛出异常,表明加载Connector/J驱动程序成功,下面连接数据库:
Connection con = DriverManager.getConnection(conURL, user, password);
String conURL指明了要连接的数据库的URL,还可以在conURL中包含数据库名,用户名和密码等。
conURL一般遵循如下格式: jdbc:subprotocol://host.domain/database,对于Connector/J而言,subprotocal就是mysql。
例如访问本地计算机上的名为Company的数据库, conURL = " jdbc:mysql://localhost/Company";
(4) 如果一切正常,现在可以对数据库进行查询或修改了。
取得一个Statement实例(也只需要一个):
Statement s = con.createStatement();
可以使用Statement类的 executeQuery、 executeUpdate、 execute方法向MySQL服务器提交SQL语句。
e.g.
ResultSet rs = s .executeQuery(" SELECT * FROM Emplyee; ");
ResultSet类保存了查询操作返回的表格。
(5) 释放资源,关闭Java程序到MySQL服务器的连接:
s.close();
con.close();
五、一个完整的例子
//----------------------------------------------------------
import java.sql.*;
public class test {
public static void main(int Argc, String[] Argv) {
String JDriver = "com.mysql.jdbc.Driver"; // MySQL提供的JDBC驱动,要保证它在CLASSPATH里可见
String conURL = "jdbc:mysql://localhost/Company"; // 本地计算机上的MySQL数据库Company的URL
try {
Class.forName(JDriver);
}
catch(ClassNotFoundException cnf_e) { // 如果找不到驱动类
System.out.println("Driver Not Found: " + cnf_e);
}
try {
Connection con = DriverManager.getConnection(conURL, "root", "123456"); // 连接数据库
Statement s = con.createStatement(); // Statement类用来提交SQL语句
ResultSet rs = s.executeQuery("select * from Employee;"); // 提交查询,返回的表格保存在rs中
while(rs.next()) { // ResultSet指针指向下一个“行”
System.out.println(rs.getInt("No") + // 获取员工号
"\t" + rs.getString("Name") + // 获取员工名字
"\t" + rs.getInt("Age")); // 获取员工年龄
}
s.close(); // 释放Statement对象
con.close(); // 关闭到MySQL服务器的连接
}
catch(SQLException sql_e) { // 都是SQLException
System.out.println(sql_e);
}
} // main()
}
//----------------------------------------------------------
六、进一步的问题
1 prefer DataSource rather than DriverManager
2 Using <CallableStatements> to Execute [Stored Procedures]
3 Transactions
4 Metadata
5 ...
学会之后再补充上。
七、参考文献
1 Java 2 SE 6 Documentation API Specification, java.sql Packages.
2 The Java Tutorials, JDBC DataBase Access: http://java.sun.com/docs/books/tutorial/jdbc/
3 MySQL 5.0 Reference Manual, Connectors, MySQL Connector/J