最近项目需要在使用Apache 的Derby 数据库,Apache Derby 是一个JAVA编写与平台无关的数据库引擎,它以 Java 类库的形式对外提供服务。
下载db-derby-10.9.1.0-bin,并配置进入path,进入命令行窗口:
连接Derby
以服务方式连接
开启服务
java -jarD:\db-derby-10.9.1.0-bin\lib\derbyrun.jar server start(改成你的derby目录)
连接数据库
connect'jdbc:derby://localhost:1527/myDemo';
以文件方式连接
进入目录C:\Users\Administrator\Desktop\test\database
输入ij
输入connect 'jdbc:derby:test;'
tip:该方式每次只允许连接一次,否则会报连接不上.
使用Derby
创建主键自增长数据库
create tableT_SC_LOG(
LOG_ID INTEGER NOT NULL GENERATED BYDEFAULT AS IDENTITY (START WITH 100, INCREMENT BY 1),
LOG_TYPE VARCHAR(8),
LOG_DATE TIMESTAMP,
LOG_CONTENT VARCHAR(1024),
REMARK VARCHAR(1024),
OPT_CODE VARCHAR(32),
OPT_DATE TIMESTAMP,
constraint PK_T_SC_LOG primary key (LOG_ID)
);
创建主键有2中模式:
“GENERATED ALWAYS AS IDENTITY” – Derby always provides auto-incremented sequence values to this column. You are not allowed to specify your own values. 由Derby负责提供自增的主键值, 该值不允许插入.
“GENERATED BY DEFAULT AS IDENTITY” – Derby provides auto-incremented sequence values to this as default only when you are not providing values. 仅在未提供主键值时, 由Derby负责插入.
相比BY ALWARYS, BY DEFAULT可Insert主键值.参考: http://liguoliang.com/2010/create-autoincrement-column-in-derby
因为Derby不支持通过Alert创建IDENTITY列,最好重建table.否则会报错:
Error: ALTER TABLEstatement cannot add an IDENTITY column to a table.
你也可以使用序列来定义主键.
获取当前时间
VALUES CURRENT_TIME
VALUESCURRENT_TIMESTAMP
CURRENT_DATE
时间比较
select语句:select count(*) from test where id='1' and {fnTIMESTAMPDIFF(SQL_TSI_SECOND,LOEKED_DATE, CURRENT_TIMESTAMP)}>100;
解释:TIMESTAMPDIFF(interval,timestampExpression1,timestampExpression2 )
三个参数,第二和第三个参数是timestamp类型的时间函数,第一个参数是(timestampExpression2-timestampExpression1)的时间差的表示单位,如SQL_TSI_SECOND是以秒为单位,返回两个查询参数的时间差。
CURRENT_TIMESTAMP是Derby SQL当前函数,代表当前时间的timestamp.
tip:
1)interval的类型还有:SQL_TSI_DAY、SQL_TSI_FRAC_SECOND、SQL_TSI_HOUR、SQL_TSI_MINUTE、SQL_TSI_MONTH、SQL_TSI_QUARTER、SQL_TSI_SECOND、SQL_TSI_WEEK、SQL_TSI_YEAR
2)关于时间差值函数,还有一个对应的函数TIMESTAMPADD的,
具体的讲解见derby的官方网站:http://db.apache.org/derby/docs/10.2/ref/rrefjdbc88908.html,http://blog.sina.com.cn/s/blog_73044b920100nyzb.html
Derby 命令
SHOW [ TABLES | VIEWS | PROCEDURES | FUNCTIONS | SYNONYMS ] { IN sche
-- 列出表、视图、过程、函数或同义词
SHOW INDEXES { IN schema | FROM table };
-- 列出模式中的索引或表的索引
SHOW ROLES; -- 列出数据库中所有已定义的角色
-- 并排序
SHOW ENABLED_ROLES; -- 列出针对当前连接启用的角
-- 色(要查看当前角色,请使用
-- VALUES CURRENT_ROLE)并排序
SHOW SETTABLE_ROLES; -- 列出可以为当前连接设置的角色
-- 并排序
DESCRIBE name; -- 列出指定的表中的列
COMMIT; -- 落实当前事务
ROLLBACK; -- 回滚当前事务
PREPARE name AS 'SQL-J text'; -- 预编译 SQL-J 文本
EXECUTE { name | 'SQL-J text' } [ USING { name | 'SQL-J text' } ] ;
-- 使用来自 USING 结果集行的参数
-- 执行语句
REMOVE name; -- 删除指定的以前预编译的语句
RUN 'filename'; -- 从指定的文件运行命令
ELAPSEDTIME [ ON | OFF ]; -- 为 ij 设
置耗用时间模式
MAXIMUMDISPLAYWIDTH integerValue;
-- 将每列的最大显示宽度
-- 设置为整数值
ASYNC name 'SQL-J text'; -- 在另一线程中运行命令
WAIT FOR name; -- 等待 ASYNC'd 命令的结果
GET [SCROLL INSENSITIVE] [WITH {HOLD | NOHOLD}] CURSOR name AS 'SQL
-- 在查询中获取游标(JDBC 结果集)
-- 缺省游标是具有保持能力的只能向前移动
NEXT name; -- 从指定的游标获取下一行
FIRST name; -- 从指定的滚动游标获取第一行
LAST name; -- 从指定的滚动游标获取最后一行
PREVIOUS name; -- 从指定的滚动游标获取前一行
ABSOLUTE integer name; -- 将指定的游标定位在绝对行号上
--(负数表示从最后一行定位。)
RELATIVE integer name; -- 相对与当前行定位已命名的滚动游标
--(整数是行号)
AFTER LAST name; -- 将已命名的滚动游标定位于最后一行的后
BEFORE FIRST name; -- 将已命名的滚动游标定位于第一行的前面
GETCURRENTROWNUMBER name; -- 返回已命名的滚动游标当前位置的行号
--(当游标的位置不在一个行上时返回 0。)
CLOSE name; -- 关闭已命名的游标
LOCALIZEDDISPLAY [ ON | OFF ];
-- 控制语言环境敏感数据表示法
EXIT; -- 退出 ij
HELP; -- 显示此消息
任何无法识别的命令都将被视为可能的 SQL-J 命令并直接执行。