derby 使用小记
?很好的小应用适合的数据库。
?
关于derby是什么以及什么优点:
Apache 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>
?