使用 HSQLDB 自动增量 (2.2.8) + DDLU工具
我想使用 HSQLDB 作为嵌入式数据库,但无法使其自动增量。
据我了解, [CALL] IDENTITY()
可用于获取最后一个主键值。然而,通过 iBatis 和 HSQLDB 的 DatabaseManagerSwing
进行的实验不断返回 0 值。
如何让自动增量与 HSQLDB 一起使用?
编辑:
我没有提到我正在使用 DDLUtils 自动生成表。以下不适合 HSQLDB:
<?xml version="1.0"?>
<!DOCTYPE database SYSTEM "http://db.apache.org/torque/dtd/database.dtd">
<database name="testdb">
<table name="users">
<!-- using autoincrement attribute below causes
"primary key already exists" exception -->
<column name="id" type="INTEGER" primaryKey="true" />
<column name="username" type="VARCHAR" size="30" />
<column name="password" type="VARCHAR" size="100" />
</table>
</database>
另外,这里是用于域类的 iBatis SQL 映射:
<insert id="insertUser" parameterClass="user">
<selectKey keyProperty="id" resultClass="int">
CALL IDENTITY()
</selectKey>
INSERT INTO USERS
( USERNAME, PASSWORD )
VALUES
( #username#, #password#)
</insert>
I want to use HSQLDB as an embedded database but am having trouble getting it to auto-increment.
As far as I understand, [CALL] IDENTITY()
can be used to get the last primary key value. However, experiments through both iBatis and HSQLDB's DatabaseManagerSwing
continually return a 0 value.
How can I get auto-incrementation to work with HSQLDB?
Edit:
I didn't mention that I'm using DDLUtils to autogenerate tables. The following does not suit HSQLDB:
<?xml version="1.0"?>
<!DOCTYPE database SYSTEM "http://db.apache.org/torque/dtd/database.dtd">
<database name="testdb">
<table name="users">
<!-- using autoincrement attribute below causes
"primary key already exists" exception -->
<column name="id" type="INTEGER" primaryKey="true" />
<column name="username" type="VARCHAR" size="30" />
<column name="password" type="VARCHAR" size="100" />
</table>
</database>
Also, here is the iBatis SQL map used for the domain class:
<insert id="insertUser" parameterClass="user">
<selectKey keyProperty="id" resultClass="int">
CALL IDENTITY()
</selectKey>
INSERT INTO USERS
( USERNAME, PASSWORD )
VALUES
( #username#, #password#)
</insert>
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
打印的示例:
这是在我的机器上
Here's an example that prints out
on my machine:
如果您使用 ORM,他们将为您执行标识列工作。 sormula 通过注释让一切变得简单。有关示例,请参阅项目中的 org.sormula.tests.identity 包。
定义的行类:
来自 org.sormula.identity.tests.InsertTest:
HSQLDB 包含在测试中。
If you use an ORM, they will perform the identity column work for you. sormula makes it easy with an annotation. See org.sormula.tests.identity package within the project for examples.
Row class defined:
From org.sormula.identity.tests.InsertTest:
HSQLDB is included in the tests.