ITEEDU

入门准备

接触对象

对象导向

资源管理

对象容器(Container)

输入输出(I/O)

执行绪(Thread)

反射(Reflection)

metadata

数据库(JDBC)

舍遗补缺

Java Gossip: 连接数据库

为了要联机MySQL数据库,您必须要有MySQL JDBC驱动程序,请将下载的mysql-connector-java-*.jar加入至CLASSPATH中,这边先以Java Class来示范如何联机MySQL,Java类别中与数据库操作相关的类别都位于java.sql套件中。

要联机MySQL,必须经由几个动作:

  • 加载与注册JDBC驱动程序

透过java.lang.Class类别的forName()来加载并向DriverManager注册JDBC驱动程序(驱动程序会自动透过DriverManager.registerDriver()方法注册), MySQL的驱动程序类别是com.mysql.jdbc.Driver,您如下加载与注册JDBC驱动程序:

try {
	Class.forName("com.mysql.jdbc.Driver");
}
catch(ClassNotFoundException e) {
	System.out.println("找不到驱动程序类别");
}

如果找不到com.mysql.jdbc.Driver类别,就会丢出 ClassNotFoundException,这时请确定您的CLASSPATH中是否包括了mysql-connector-java-*.jar的位置。

  • 提供JDBC URL

JDBC URL定义了连接数据库时的协议、子协议、数据来源职别:

协定:子协定:资料来源识别

协议在JDBC中总是jdbc开始;子协议是桥接的驱动程序或是数据库管理系统名称,使用MySQL的话是 mysql;数据来源识别标出找出数据库来源的地址;MySQL的JDBC URL撰写方式如下:

jdbc:mysql://主机名称:连接端口/数据库名称?参数1=值1&参数2=值2

主机名称可以是本机localhost或是其它联机主机,连接端口为3306,假如我们要联机GUESTBOOK 数据库,并指明使用者名称与密码,可以如下指定:

jdbc:mysql://localhost:3306/GUESTBOOK?user=caterpillar&password=123456

如果要使用中文存取的话,还必须给定参数userUnicode及characterEncoding,表明是否使用Unicode,并指定字符编码方式,例如:

jdbc:mysql://localhost:3306/GUESTBOOK?user=caterpillar&password=123456 &useUnicode=true&characterEncoding=Big5

中文的编码方式除了Big5之外,还可以使用UTF8,这可以避免Big5中文字「许」、「功」、「盖」等存入 MySQL所发生的问题。

  • 从DriverManager取得Connection

要联机数据库,我们可以从DriverManager要求并取得Connection对象,它代表数据库联机对象,您可以直接给它JDBC URL作为参数并取回Connection对象:

try {
	String url =?"jdbc:mysql://localhost:3306/GUESTBOOK?" +
	"user=caterpillar&password=123456";
	Connection conn = DriverManager.getConnection(url);
	if(!conn.isClosed())
	System.out.println("数据库联机成功");
	conn.close();
}
catch(SQLException e) {
	....
}

取得Connection对象之后,您可以测试与数据库的联机是否关闭,即使用isClosed(),在操作完数据库之后,必须使用close()来关闭与数据库的联机。

getConnection()方法也提供给定使用者名称与密码的方式来给定参数,例如:

String url = "jdbc:mysql://localhost:3306/GUESTBOOK";
String user = "caterpillar";
String password = "123456";
Connection conn = DriverManager.getConnection(url,user, password);

下面这个程序是用来测试与数据库的联机是否成功的一个完整范例:

DBConnectionDemo.java
package onlyfun.caterpillar;
import java.sql.*;
public class DBConnectionDemo {
	public static void main(String[] args) {
		String driver = "com.mysql.jdbc.Driver";
		String url = "jdbc:mysql://localhost:3306/GUESTBOOK";
		String user = "caterpillar";
		String password = "123456";
		try {
			Class.forName(driver);
			Connection conn =
			DriverManager.getConnection(url,
			user, password);
			if(conn != null && !conn.isClosed()) {
				System.out.println("数据库联机测试成功!");
				conn.close();
			}
		}
		catch(ClassNotFoundException e) {
			System.out.println("找不到驱动程序类别");
			e.printStackTrace();
		}
		catch(SQLException e) {
			e.printStackTrace();
		}
	}
}