很好的小应用适合的数据库。
关于derby是什么以及什么优点:
使用过程:
1.下载
2.解压缩至: x:/db-derby-10.5.1.1-bin/
3.两种使用方式
3.1 client-server(cs) 使用 :
3.1.1 运行 bin/startNetworkServer.bat 开始服务器监控 , 运行 bin/ij.bat 开始客户端操作。
3.1.2 准备数据库 install.sql
connect 'jdbc:derby://localhost:1527/content_admin;create=true;'; CREATE TABLE infos ( id int not null generated always as identity, type VARCHAR(32) not null, -- 类型 info Clob not null, --具体类型 region VARCHAR(32) , -- 地区 PRIMARY KEY (id) ); CREATE TABLE images ( id int not null generated always as identity, position VARCHAR(32) not null, -- 图片位置 title VARCHAR(4000) , --图片描述 href VARCHAR(4000) , -- 链接网址 content Clob , -- 自设置内容 region VARCHAR(32) , -- 地区, imageSrc VARCHAR(4000) , --图片地址 PRIMARY KEY (id) );
注意 derby 的 connection url 格式 :jdbc:derby://localhost:1527/content_admin;create=true ,create=true 表示如果本机不存在 content_admin 数据库就自动建立一个。
3.1.3 在 ij 的命令行下 运行 run "yourpath/install.sql" ,yourpath 为 install.sql 所在目录。
3.1.4 至此一个数据库以及它的两张表就建立起来了,可以看到 bin 下面 有一个 content_admin 目录,在derby 中一个数据库的内容放在以数据库命名的目录中,对于cs模式 ,默认则在server端建立 数据库对应目录。
3.1.5 修改 默认server端建立数据库目录路径
3.1.5.1 首先设置环境变量 DERBY_HOME 为 x:/db-derby-10.5.1.1-bin/
3.1.5.2 开启命令行 执行 bin/setNetworkServerCP.bat ,接着执行
java -Dderby.system.home=XX:/org.apache.derby.drda.NetworkServerControl start
来启动数据库服务器端。其中 XX:/ 为 客户端建立数据库的话,数据库目录存放的位置,如 ij命令 执行:
connect 'jdbc:derby://localhost:1527/content_admin2;create=true;'
则会建立对应数据库目录 XX:/content_admin2 存放 content_admin2 数据库的数据。
ps:也可在对应路径执行bat来指定数据库存储位置
假设derby目录为: x:/db-derby-10.5.1.1-bin/bin/startNetworkServer.bat
则在命令行到x盘执行: db-derby-10.5.1.1-bin/bin/startNetworkServer.bat 而不是直接点击 startNetworkServer.bat
则执行ij
connect 'jdbc:derby://localhost:1527/content_admin2;create=true;'
在x:/content_admin2生成数据库。
根本原理为 startNetworkServer.bat 中根据DERBY_HOME将derby的lib下相应jar添加到classpath中,然后执行
java org.apache.derby.drda.NetworkServerControl start
则默认在哪个目录下执行这条命令,server就将数据库生成在哪个目录下面。
3.2 嵌入式 使用
一般用于程序控制,见下所述。
4:程序操纵数据库。
4.1 cs 模式
这里采用 proxool 配置示意 , proxool 配置文件:
<proxool> <alias>xml-test</alias> <driver-url>jdbc:derby://localhost:1527/content_admin;create=true;</driver-url> <!-- <driver-url>jdbc:derby:content_admin;create=true;</driver-url> --> <driver-class>org.apache.derby.jdbc.ClientDriver</driver-class> <!-- <driver-class>org.apache.derby.jdbc.EmbeddedDriver</driver-class> --> <driver-properties> <property name="useUnicode" value="true"/> <property name="characterEncoding" value="GBK"/> </driver-properties> <maximum-connection-count>10</maximum-connection-count> <maximum-active-time>999999999</maximum-active-time> <house-keeping-test-sql>select CURRENT_DATE</house-keeping-test-sql> </proxool>
数据库控制连接建立管理:
package content.db; import org.logicalcobwebs.proxool.configuration.JAXPConfigurator; import java.sql.Connection; import java.sql.DriverManager; import java.sql.SQLException; import java.io.InputStreamReader; public class DBManager { static { initial(); } public static void initial() { try { JAXPConfigurator.configure(Path.getFullPathRelateClass("../../datasource.xml", Path.class), false); } catch (Exception e) { e.printStackTrace(); System.exit(1); } // The false means non-validating } public static Connection getConnection() { Connection t = null; try { t = DriverManager.getConnection("proxool.xml-test"); } catch (SQLException e) { e.printStackTrace(); } return t; } }
则 DBManager.getConnection() 后 即可对 数据库进行操作了。
4.2 嵌入模式
可以按照前面的 ij命令 进行操作,注意: sql第一行改做 :
connect 'jdbc:derby:x:/content_admin;create=true;';
x:/content_admin 为你所希望数据库数据所存在的硬盘目录。 一般可在 cs模式 建立数据库后 ,将 bin/content_admin (生成的数据库目录) 拷贝 某一目录,在程序中对其操作。
仿照 4.1 只需要更改 proxool 的数据库配置文件即可。
<?xml version="1.0" encoding="ISO-8859-1"?> <proxool> <alias>xml-test</alias> <!-- x:/content_admin 为数据库目录所在的位置。 --> <driver-url>jdbc:derby:x:/content_admin;create=true;</driver-url> <driver-class>org.apache.derby.jdbc.EmbeddedDriver</driver-class> <driver-properties> <property name="useUnicode" value="true"/> <property name="characterEncoding" value="GBK"/> </driver-properties> <maximum-connection-count>10</maximum-connection-count> <maximum-active-time>999999999</maximum-active-time> <house-keeping-test-sql>select CURRENT_DATE</house-keeping-test-sql> </proxool>