2012年2月7日星期二

Derby_002:使用Derby的两种方式

1. 嵌入式方式
单个用户使用,Derby数据库和Java程序运行在同一个JVM中。
在这种情况下,用户几乎不直接操作数据库,因为它的启动和终止都是由程序来完成的,几乎不需要管理。

1.1 使用ij
进入C:\Oracle\Java\jdk1.7.0_02\db\bin目录,执行ij命令进入交互模式。
ij> CONNECT 'jdbc:derby:d:\MyJavaDb;create=true';
执行后,会在D盘创建一个MyJavaDb目录,这个就是你的数据库。
如果创建数据库时,希望设置用户名/密码:CONNECT 'jdbc:derby://localhost:1527/MyJavaDb;create=true;user=admin;password=welcome1';
如下图示:
然后就可以使用SQL语句创建表、向表中插入数据,查询表中数据等等。
ij> CREATE TABLE test_table(id int primary key, name varchar(20));
ij> INSERT INTO test_table VALUES(1,'China');
ij> SELECT * FROM test_table;


1.2 使用Java编程访问嵌入式Derby数据库
(1)进入C:\Oracle\Java\jdk1.7.0_02\db\lib目录,执行:javac -cp .;derby.jar;derbynet.jar TestDerby.java
(2)进入C:\Oracle\Java\jdk1.7.0_02\db\lib目录,执行:java -cp .;derby.jar;derbynet.jar TestDerby

TestDerby.java内容如下:
import java.sql.*;

public class TestDerby {
    public static void main(String[] args) throws Exception {
        Class.forName("org.apache.derby.jdbc.EmbeddedDriver").newInstance();
        Connection conn = DriverManager.getConnection("jdbc:derby:D:/TEST_DB;create=true");
        Statement st = conn.createStatement();
        st.execute("CREATE TABLE test_table(ID INT NOT NULL,NAME VARCHAR(10) NOT NULL)");
        st.executeUpdate("INSERT INTO test_table(ID,NAME) values (1,'Zhang')");
        st.executeUpdate("INSERT INTO test_table(ID,NAME) values (2,'Wang')");
        ResultSet rs = st.executeQuery("select * from test_table");
        while (rs.next()){
            int id = rs.getInt(1);
            String name = rs.getString(2);
            System.out.println(">>> "+id+" "+name);
        }
    }
}

注意,这里使用的是EmbeddedDriver,即Derby数据库和Java程序运行在同一个JVM中,数据库的启动和停止都是由程序管理的,你并没有也不需要启动和停止Derby数据库。

执行后,会在D盘创建一个目录TEST_DB,并打印出:
>>> 1 Zhang
>>> 2 Wang

2. 服务器方式
多个用户使用,Derby数据库和Java程序运行在不同的JVM中。
在这种方式下,各个Java程序从不同的JVM上通过网络连接访问数据库。

2.1 首先要启动Derby数据库
进入C:\Oracle\Java\jdk1.7.0_02\db\lib目录,执行
java -cp .;derby.jar;derbynet.jar org.apache.derby.drda.NetworkServerControl start
注意,Derby默认占用端口1527。
如果想改成其它端口,需要加参数-p:
java -cp .;derby.jar;derbynet.jar org.apache.derby.drda.NetworkServerControl start -p 1537
要想停止数据库,执行
java -cp derby.jar;derbynet.jar org.apache.derby.drda.NetworkServerControl shutdown

2.1 使用Java编程访问远程的Derby数据库
(1)进入C:\Oracle\Java\jdk1.7.0_02\db\lib目录,执行:javac -cp .;derby.jar;derbynet.jar;derbyclient.jar TestDerby2.java
(2)进入C:\Oracle\Java\jdk1.7.0_02\db\lib目录,执行:java -cp .;derby.jar;derbynet.jar;derbyclient.jar TestDerby2

TestDerby2.java内容如下:
import java.sql.*;

public class TestDerby2 {
    public static void main(String[] args) throws Exception {
        Class.forName("org.apache.derby.jdbc.ClientDriver").newInstance();                      
        Connection conn = DriverManager.getConnection("jdbc:derby://localhost:1527/D:/TEST_DB2;create=true");
        Statement st = conn.createStatement();
        st.execute("CREATE TABLE test_table(ID INT NOT NULL,NAME VARCHAR(10) NOT NULL)");
        st.executeUpdate("INSERT INTO test_table(ID,NAME) values (1,'Zhang')");
        st.executeUpdate("INSERT INTO test_table(ID,NAME) values (2,'Wang')");
        ResultSet rs = st.executeQuery("select * from test_table");
        while (rs.next()){
            int id = rs.getInt(1);
            String name = rs.getString(2);
            System.out.println(">>> "+id+" "+name);
        }
    }
}


注意,这里使用的是ClientDriver,表明访问的是远程的Derby数据库。
执行后,会在D盘创建一个目录TEST_DB2,并打印出
>>> 1 Zhang
>>> 2 Wang

没有评论: