第1关:JDBC程序设计
- 任务描述
- 相关知识
- JDBC程序设计
- JDBC主要功能
- JDBC主要接口和函数
- JDBC应用程序开发实例
- 编程要求
- 代码参考
任务描述
本关任务:使用 JDBC 往表中插入数据。
相关知识
为了完成本关任务,你需要掌握:
1.JDBC 主要功能;
2.JDBC 主要接口和函数;
3.如何使用 JDBC 进行应用程序开发。
JDBC程序设计
Java 是当前最广泛使用的编程语言之一,为便于 Java 应用访问和操作 DM8 数据库,DM8 也支持 JDBC 编程接口。Java 应用可借助 JDBC 驱动,使用 Java 语言开发应用系统。
JDBC主要功能
JDBC(Java DataBase Connectivity)是 Java 应用程序连接和操作关系型数据库的应用程序接口。其由一组规范的类和接口组成,通过调用类和接口所提供的方法,可访问和操作不同的关系型数据库系统。
DM8 遵循 JDBC 标准接口规范,提供了 DM JDBC 驱动程序,使得 Java 程序员可以通过标准的 JDBC 编程接口进行创建数据库连接、执行 SQL 语句、检索结果集、访问数据库元数据等操作,从而开发基于 DM8 数据库的应用程序,JDBC 体系结构如下图所示。
JDBC主要接口和函数
由于 DM JDBC 驱动遵照 JDBC 标准规范设计与开发,因此 DM ODBC 接口提供的函数与标准 JDBC 一致。JDBC 接口函数较多,下表仅列出了 DM JDBC 主要接口和函数,读者在开发基于 DM JDBC 应用程序和也可参阅标准 JDBC 编程接口。
JDBC应用程序开发实例
1.安装 DM JDBC 驱动
JDBC 驱动包(DmJdbcDriver18.jar)位于达梦安装目录的 drivers/jdbc/目录下,将其复制到 $JAVA_HOME/jre/lib/ext 目录下,即可编译运行达梦 JDBC 程序。
2.DM JDBC代码编写流程
由于 DM JDBC 接口遵循标准 JDBC 规范,因此,基于 DM JDBC 进行程序开发流程与标准 JDBC 开发流程一致,大致流程如下图所示。
1)建立数据库连接,获得 java.sql.Connection 对象。利用 DriverManager 或者数据源来建立同数据库的连接。
2)创建 Statement 等对象。建立数据库连接后,利用连接对象创建 java.sql.Statement 对象,也可创建 java.sql.PreparedStatement 或 java.sql.CallableStatement 对象。
3)数据操作。创建完 Statement 对象后,即可使用该对象执行 SQL 语句,进行数据操作。数据操作大致可分为两种类型,一种是更新操作,例如更新数据库、删除一行、创建一个新表等;另一种是查询操作,执行完查询之后,得到一个 java.sql.ResultSet 对象,可以操作该对象来获得指定列的信息、读取指定行的某一列的值。
4)释放资源。对数据操作完成之后,用户需要释放系统资源,主要是关闭结果集、关闭语句对象,释放连接。当然,这些动作也可以由 JDBC 驱动程序自动执行,但由于 Java 语言的特点,该过程较慢(需要等到 Java 进行垃圾回收时进行),容易出现意想不到的问题。
3.DM JDBC代码编写实例
【例1】 基于 DM JDBC 接口编写代码,要求向 DMHR.EMPLOYEE 员工表中插入一条员工信息
1007,"马德化","340102196202303001","madehuar@dameng.com", "15312377345","2012-02-25",42, 3290,0,1004,104
根据例 1 需求,程序实现过程如下。
1)建立数据库连接
本例中,定义了 loadJdbcDriver 和 connect 函数,分别完成驱动程序加载和数据库连接。在 loadJdbcDriver 函数中调用 forClass 用于加载 DM JDBC 驱动,在 connect 函数中调用 DriverManager.getConnection 创建数据库连接对象。
2)创建 Statement 对象
本例定义了 insertTable 函数完成数据插入操作。在该函数中调用数据库连接对象的 createStatement() 方法完成 Statement 对象的创建。
3)数据操作
查询和修改员工表数据时,定义需要执行的 SQL 语句字符串。同时,使用数据库连接对象的 prepareStatement(sql) 来创建 PreparedStatement 对象;然后,设置 SQL 语句相关参数;最后调用 PreparedStatement 对象的 executeUpdate()执行 SQL 语句。
4)释放资源
调用数据库连接对象的 close 方法即可关闭当前数据库连接。
参考代码如下所示。
import java.awt.Color;
……
public class BasicApp {
String jdbcString = "dm.jdbc.driver.DmDriver";// 定义 DM JDBC 驱动串
String urlString = "jdbc:dm://localhost:5236";// 定义 DM URL 连接串
String userName = "DMHR";// 定义连接用户名
String password = "dameng123";// 定义连接用户口令
Connection conn = null; // 定义连接对象
/* 加载 JDBC 驱动程序*/
public void loadJdbcDriver() throws SQLException {
try {
System.out.println("Loading JDBC Driver...");
// 加载 JDBC 驱动程序
Class.forName(jdbcString);
} catch (ClassNotFoundException e) {
throw new SQLException("Load JDBC Driver Error : " + e.getMessage());
} catch (Exception ex) {
throw new SQLException("Load JDBC Driver Error : "+ ex.getMessage());
}
}
/* 连接 DM 数据库 */
public void connect() throws SQLException {
try {
System.out.println("Connecting to DM Server...");
// 连接 DM 数据库
conn = DriverManager.getConnection(urlString, userName, password);
} catch (SQLException e) {
throw new SQLException("Connect to DM Server Error : "+ e.getMessage());
}
}
/* 关闭连接*/
public void disConnect() throws SQLException {
try {
// 关闭连接
conn.close();
} catch (SQLException e) {
throw new SQLException("close connection error : " + e.getMessage());
}
}
/* 向员工表中插入数据*/
public void insertTable() throws SQLException {
// 插入数据语句
String sql = "INSERT INTO dmhr.employee(EMPLOYEE_ID,EMPLOYEE_NAME, IDENTITY_CARD, EMAIL,"
+ "PHONE_NUM, HIRE_DATE, JOB_ID, SALARY, COMMISSION_PCT,"
+ "MANAGER_ID, DEPARTMENT_ID) "
+ "VALUES(?,?,?,?,?,?,?,?,?,?,?);";
PreparedStatement pstmt = conn.prepareStatement(sql); // 创建语句对象
pstmt.setInt(1, 1007); pstmt.setString(2, "马德化");
pstmt.setString(3, "340102196202303001");
pstmt.setString(4, "madehuar@dameng.com");
pstmt.setString(5, "15312377345"); pstmt.setDate(6, Date.valueOf("2012-02-25"));
pstmt.setInt(7, 42); pstmt.setInt(8, 3290); pstmt.setInt(9, 0); pstmt.setInt(10, 1004);
pstmt.setInt(11, 104);
pstmt.executeUpdate();// 执行语句
pstmt.close();// 关闭语句
}
public static void main(String args[]) {
try {
BasicApp basicApp = new BasicApp();// 定义类对象
basicApp.loadJdbcDriver();// 加载驱动程序
basicApp.connect();// 连接 DM 数据库
basicApp.insertTable();
basicApp.disConnect();// 关闭连接
} catch (SQLException e) {
System.out.println(e.getMessage());
}
}
}
编程要求
根据提示,在右侧编辑器补充代码,使用 JDBC 往 test.tb_class 表中插入数据(1,bob)。
数据库连接信息:
用户名:SYSDBA。
密码:SYSDBA。
url 连接串:“jdbc:dm://localhost:5236”。
test.tb_class 表字段信息:
字段名 | 字段类型 |
---|---|
id | int |
name | varchar(25) |
测试说明
平台会对你编写的代码进行测试:
预期输出:
ID NAME
----------- ----
1 bob
开始你的任务吧,祝你成功!
代码参考
import java.sql.*;
public class DmTest {
// 请在Begin-End间编写代码
/********** Begin **********/
String jdbcString = "dm.jdbc.driver.DmDriver";// 定义 DM JDBC 驱动串
String urlString = "jdbc:dm://localhost:5236";// 定义 DM URL 连接串
String userName = "SYSDBA";// 定义连接用户名
String password = "SYSDBA";// 定义连接用户口令
Connection conn = null; // 定义连接对象
/* 加载 JDBC 驱动程序*/
public void loadJdbcDriver() throws SQLException {
try {
// System.out.println("Loading JDBC Driver...");
// 加载 JDBC 驱动程序
Class.forName(jdbcString);
} catch (ClassNotFoundException e) {
throw new SQLException("Load JDBC Driver Error : " + e.getMessage());
} catch (Exception ex) {
throw new SQLException("Load JDBC Driver Error : "+ ex.getMessage());
}
}
/* 连接 DM 数据库 */
public void connect() throws SQLException {
try {
// System.out.println("Connecting to DM Server...");
// 连接 DM 数据库
conn = DriverManager.getConnection(urlString, userName, password);
} catch (SQLException e) {
throw new SQLException("Connect to DM Server Error : "+ e.getMessage());
}
}
/* 关闭连接*/
public void disConnect() throws SQLException {
try {
// 关闭连接
conn.close();
} catch (SQLException e) {
throw new SQLException("close connection error : " + e.getMessage());
}
}
/* 向员工表中插入数据*/
public void insertTable() throws SQLException {
// 插入数据语句
String sql = "INSERT INTO test.tb_class(id,name) "
+ "VALUES(?,?);";
PreparedStatement pstmt = conn.prepareStatement(sql); // 创建语句对象
pstmt.setInt(1, 1);
pstmt.setString(2, "bob");
pstmt.executeUpdate();// 执行语句
pstmt.close();// 关闭语句
}
public static void main(String args[]) {
try {
DmTest basicApp = new DmTest();// 定义类对象
basicApp.loadJdbcDriver();// 加载驱动程序
basicApp.connect();// 连接 DM 数据库
basicApp.insertTable();
basicApp.disConnect();// 关闭连接
} catch (SQLException e) {
System.out.println(e.getMessage());
}
}
/********** End **********/
}