您的位置:首页 > 其它

derby教程使用总结及心得

2014-05-11 14:33 246 查看
最近项目需要在使用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 命令并直接执行。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: