greatwqs 发表于 2013-1-30 02:12:28

Derby通过JDBC操作数据库(两种)

Derby版本 :   db-derby-10.8.1.2
目录解析:
1) bin目录,包含了一些工具脚本和设备环境的脚本;
2) demo目录,包含了一些实例程序;
3) docs目录,包含了Derby的文档;
4) javadoc目录,包含了Derby的API文档;
5) lib目录,包含了Derby数据库的jar文件;
6) test目录,Derby的一些测试jar包;
 
 
Derby操作通过JDBC操作数据库有两种:
 
一种是网络模式,通过网络的链接形式(通常我们的mysql/oracle数据库,都是IP+端口),
二种是内嵌模式,即是通过文件的形式.
 
数据库来源:里面的数据库都是在第一篇帖子中的通过ij命令行写入的数据,这里进行的查询.
获得Derby数据库:http://db.apache.org/derby/
 
1. 网络模式如下代码:
 
package com.greatwqs.eagle;import java.sql.Connection;import java.sql.DriverManager;import java.sql.ResultSet;import java.sql.Statement;/** * @author greatwqs * */public class DerbyTest {public static void main(String[] args) {DerbyTest testClient = new DerbyTest();testClient.showTableContents();}public void showTableContents() {try {String driver = "org.apache.derby.jdbc.ClientDriver";Class.forName(driver).newInstance();Connection conn = null;conn = DriverManager.getConnection("jdbc:derby://localhost:1527/ij_cmd_test_db");Statement s = conn.createStatement();ResultSet rs = s.executeQuery("SELECT * FROM ijtest");while (rs.next()) {System.out.println("序号 : " + rs.getInt(1));}rs.close();s.close();conn.close();} catch (Exception e) {System.out.println("Exception: " + e);e.printStackTrace();}}} 
 
注意第23行的代码:
 
conn = DriverManager.getConnection("jdbc:derby://localhost:1527/ij_cmd_test_db"); 
注意:使用ip+端口的链接derby数据时,必须启动网络链接.
执行/derby_home/bin/startNetworkServer
 
 
2. 内嵌模式的JDBC查询:
 
测试代码如下:
 
package com.greatwqs.eagle.coll;import java.sql.Connection;import java.sql.DriverManager;import java.sql.ResultSet;import java.sql.SQLException;import java.sql.Statement;import java.util.Properties;/** * @author greatwqs * @date 2011-8-12 */public class DerbyTest_File {private final static String DB_URL = "jdbc:derby:D:\\Program Files\\derby\\db-derby-10.8.1.2-bin\\bin\\ij_cmd_test_db";private final static String DERBY_DRIVER = "org.apache.derby.jdbc.EmbeddedDriver";public static void main(String[] args) {Connection conn = null;try {Class.forName(DERBY_DRIVER);Properties properties = new Properties();// properties.put("create", "false"); // 新建数据库// properties.put("user", "APP");   // 用户名// properties.put("password", "APP"); // 密码// properties.put("retreiveMessagesFromServerOnGetMessage", "true");conn = DriverManager.getConnection(DB_URL, properties);Statement stat = conn.createStatement();ResultSet result = stat.executeQuery("SELECT * FROM ijtest");while (result.next()) {System.out.println("序号 : " + result.getInt(1));}result.close();stat.close();conn.close();} catch (ClassNotFoundException e) {e.printStackTrace();} catch (SQLException e) {e.printStackTrace();} finally {// 内嵌模式数据库操作用完之后需要关闭数据库,这里没有执行数据库名称则全部关闭.try {DriverManager.getConnection("jdbc:derby:;shutdown=true");} catch (SQLException e) {e.getMessage();}}}} 
 
注意里面的15行代码:
 
private final static String DB_URL = "jdbc:derby:D:\\Program Files\\derby\\db-derby-10.8.1.2-bin\\bin\\ij_cmd_test_db"; 
 
通过Java应用程序访问内嵌模式Derby数据库时,应用程序有责任需要在程序结束时关闭Derby数据库,如上面代码finally中的
 DriverManager.getConnection("jdbc:derby:;shutdown=true");
shutdown参数用于关闭Derby数据库,如果url中指定了数据库命,则只会关闭指定的数据库,而不会关闭整个Derby数据库。数据库关闭成功时,Derby会抛出一个错误码为XJ015和一个08006的异常表示关闭成功,应用程序可以不处理这两个异常。
 
 
内嵌模式和网络模式的区别:
A. 数据库连接URL的不同;
    内嵌模式是以准确地址为基准,网络模式ip+端口+数据库
B. 应用程序退出时无效关闭Derby数据库;
    内嵌模式退出需要关闭数据库,网络模式Derby数据库做为一个独立运行的数据库,可以被多个应用程序所访问,所以应用程序在运行结束时不应该关闭Derby数据库。
C. 数据库驱动的不同;
    内嵌模式使用org.apache.derby.jdbc.EmbeddedDriver,网络模式使用org.apache.derby.jdbc.ClientDriver
 
 
 链接derby总结: 
 
 在测试的过程中需要加入驱动程序到classpath;
一般情况下驱动的jar包的路径为:\derby_home\lib
 
异常情况的处理:
在链接derby时不能同时链接ij和ip+端口的查询,同时链接ij和文件的jdbc查询ok.
 
 数据库文件存放的位置:/derby_home/bin/ij_cmd_test_db
 
 这里数据库的数据来源为上一篇中的derby的ij测试工具添加的数据.
 见 : http://greatwqs.iteye.com/blog/1147397
 
 
 
 
运行上面的程序后,成功截图:

http://dl.iteye.com/upload/attachment/535395/7defd611-055a-38c1-939d-4eeb2b17ef43.jpg
 
页: [1]
查看完整版本: Derby通过JDBC操作数据库(两种)