JDBC编程全解析:从安装到执行SQL命令
发布时间: 2025-08-18 00:08:25 阅读量: 2 订阅数: 8 

# JDBC编程全解析:从安装到执行SQL命令
## 1. 安装JDBC
在使用JDBC之前,需要完成以下准备工作:
- 准备一个与JDBC兼容的数据库程序,并创建一个用于实验的数据库,这里假设数据库名为 `COREJAVA`。你可以自己创建,也可以让数据库管理员以适当的权限创建。你需要具备创建、更新和删除表的权限。
- 若你从未安装过客户端/服务器数据库,可能会发现设置数据库有些复杂,且难以诊断失败原因。若设置不正确,最好寻求专家帮助。
- 另一种选择是安装纯Java数据库,如Cloudscape(http://www.cloudscape.com)、PointBase(http://www.pointbase.com)或InstantDB(http://www.lutris.com/products/instantDB)。这些数据库功能较弱,但设置简单,最复杂的部分是设置类路径,这对于有经验的Java程序员来说不应构成挑战。
几乎所有数据库供应商都有JDBC驱动程序。你需要找到供应商的说明,将驱动程序加载到你的程序中并连接到数据库。下面将介绍两种典型数据库(IBM DB2和Cloudscape)的设置,其他数据库的设置类似,但细节会有所不同。
不建议使用Java 2 SDK附带的JDBC/ODBC桥接驱动程序,更不建议将其与桌面数据库(如Microsoft Access)一起使用。因为安装和配置较为繁琐,且桥接驱动程序和桌面数据库都有一些限制,容易导致混淆,最终从这种设置中对真实数据库的了解非常有限。
### 1.1 基本SQL数据类型
| SQL数据类型 | 说明 |
| ---- | ---- |
| VARCHAR(n) | 最大长度为n的可变长度字符串 |
| BOOLEAN | 布尔值 |
| DATE | 日历日期,具体实现可能不同 |
| TIME | 一天中的时间,具体实现可能不同 |
| TIMESTAMP | 日期和时间,具体实现可能不同 |
| BLOB | 二进制大对象 |
| CLOB | 字符大对象 |
## 2. 基本JDBC编程概念
### 2.1 数据库URL
连接数据库时,必须指定数据源,可能还需要指定其他参数。例如,网络协议驱动程序可能需要端口,ODBC驱动程序可能需要各种属性。JDBC使用类似于普通URL的语法来描述数据源,示例如下:
- `jdbc:db2:COREJAVA`
- `jdbc:cloudscape:COREJAVA;create=true`
这些JDBC URL指定了名为 `COREJAVA` 的DB2或Cloudscape数据库。通用语法为 `jdbc:子协议名称:其他信息`,其中子协议用于选择连接数据库的特定驱动程序,“其他信息” 参数的格式取决于所使用的子协议,你需要查阅供应商的文档以获取具体格式。
### 2.2 建立连接
你需要找出供应商使用的JDBC驱动程序类的名称,典型的驱动程序名称如下:
- `COM.ibm.db2.jdbc.app.DB2Driver`
- `COM.cloudscape.core.JDBCDriver`
接下来,你必须找到驱动程序所在的库,如 `db2java.zip` 或 `cloudscape.jar`,并将该驱动程序的完整路径名添加到类路径中。可以使用以下三种方法之一:
- 使用 `-classpath` 命令行参数启动数据库程序。
- 修改 `CLASSPATH` 环境变量。
- 将数据库库复制到 `jre/lib/ext` 目录中。
`DriverManager` 类负责选择数据库驱动程序并创建新的数据库连接。但在驱动程序管理器激活驱动程序之前,必须先注册驱动程序。注册驱动程序有两种方法:
- `jdbc.drivers` 属性包含驱动程序管理器在启动时将注册的驱动程序类名列表,名称用冒号分隔。你可以使用命令行参数指定该属性,例如 `java -Djdbc.drivers=COM.ibm.db2.jdbc.app.DB2Driver MyProg`;或者你的应用程序可以读取包含 `jdbc.drivers=COM.ibm.db2.jdbc.app.DB2Driver` 行的属性文件,并将该设置添加到系统属性中。
- 也可以手动注册驱动程序,例如:
```java
Class.forName("COM.ibm.db2.jdbc.app.DB2Driver");
// force registration of driver
```
注册驱动程序后,可以使用以下代码打开数据库连接:
```java
String url = "jdbc:db2:COREJAVA";
String username = "db2inst1";
String password = "wombat";
Connection conn = DriverManager.getConnection(url,
username, password);
```
驱动程序管理器将通过遍历当前已注册的可用驱动程序,尝试找到一个可以使用数据库URL中指定协议的驱动程序。为了方便,示例程序从 `database.properties` 属性文件中读取所有数据库参数。以下是读取属性文件并打开数据库连接的代码:
```java
Properties props = new Properties();
FileInputStream in
= new FileInputStream("database.properties");
props.load(in);
in.close();
String drivers = props.getProperty("jdbc.drivers");
if (drivers != null)
System.setProperty("jdbc.drivers", drivers);
String url = props.getProperty("jdbc.url");
String username = props.getProperty("jdbc.username");
String password = props.getProperty("jdbc.password");
return DriverManager.getConnection(url, username, password);
```
`getConnection` 方法返回一个 `Connection` 对象,后续将介绍如何使用该连接对象执行SQL语句。
### 2.3 调试提示
调试与JDBC相关的问题的一个好方法是启用JDBC跟踪。调用 `DriverManager.setLogWriter` 方法将跟踪消息发送到 `PrintWriter`,跟踪输出将包含JDBC活动的详细列表。
## 3. 测试数据库安装
首次设置JDBC可能有点棘手,你需要一些特定于供应商的信息, slightest配置错误都可能导致非常令人困惑的错误消息。
### 3.1 手动测试
首先,不使用JDBC测试数据库设置。了解如何连接到数据库并输入SQL命令。除非数据库管理员要求你使用其他数据库,否则创建一个名为 `COREJAVA` 的数据库,并输入以下命令:
```sql
CREATE TABLE Greetings (Name CHAR(20))
INSERT INTO Greetings VALUES ('Hello, World!')
SELECT * FROM Greetings
```
此时,你应该看到 “Hello, World!” 条目显示。然后清理:
```sql
DROP TABLE Greetings
```
### 3.2 收集信息
一旦确认数据库安装正常且可以登录到数据库,你需要收集以下五方面信息:
- 数据库用户名和密码
- 要使用的数据库名称(如 `COREJAVA`)
- JDBC URL格式
- JDBC驱动程序名称
- 包含驱动程序代码的库文件位置
前两项取决于你的数据库设置,后三项可在数据库供应商的JDBC特定文档中找到。例如,对于IBM DB2:
- 数据库用户名 = `db2inst1`(安装默认值),密码 = 安装期间提供的密码
- 数据库名称 = `COREJAVA`
- JDBC URL格式 = `jdbc:db2:databaseName`
- JDBC驱动程序 = `COM.ibm.db2.jdbc.app.DB2Driver`
- 库文件 = `/usr/IBMdb2/V7.1/java/db2java.zip`
对于Cloudscape:
- 数据库用户名和密码为空
- 数据库名称 = `COREJAVA`
- JDBC URL格式 = `jdbc:cloudscape:databaseName;create=true`
- JDBC驱动程序 = `COM.cloudscape.core.JDBCDriver`
- 库文件 = `/usr/local/cloudscape/lib/cloudscape.jar`
### 3.3 测试程序
以下是一个小测试程序 `TestDB.java`,用于测试你的JDBC设置:
```java
import java.sql.*;
import java.io.*;
import java.util.*;
/**
* 这个程序测试数据库和JDBC驱动程序是否正确配置。
*/
class TestDB {
public static void main (String args[]) {
try {
Connection conn = getConnection();
Statement stat = conn.createStatement();
```
0
0
相关推荐










