5

我为我的应用程序使用嵌入式 Apache derby。我有一个名为createdb.sql的 SQL 脚本,它在数据库中创建所有表并用初始数据填充它,例如:

SET SCHEMA APP;


CREATE TABLE study (
    study_id    bigint  not null GENERATED ALWAYS AS IDENTITY  (START WITH 1, INCREMENT BY 1),
    name        varchar(50) not null,
    note         varchar(1000) DEFAULT '',      
    created TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    deleted boolean DEFAULT false,
    UNIQUE(name),
    CONSTRAINT primary_key PRIMARY KEY (study_id)

);

INSERT INTO "APP"."STUDY" (NAME) VALUES ('default');



CREATE TABLE img (
    img_id bigint not null GENERATED ALWAYS AS IDENTITY  (START WITH 1, INCREMENT BY 1),
    filename varchar(200) not null,
    path        varchar(300) not null,
    flipped boolean DEFAULT false,
    type      smallint not null, 
    note varchar(1000) DEFAULT '',
    created TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    PRIMARY KEY (img_id)    
);

ALTER TABLE img ADD COLUMN dpix integer DEFAULT -1;
ALTER TABLE img ADD COLUMN dpiy integer DEFAULT -1;

问题是如何加载此文件并使用 java 执行所有语句?我正在尝试不同的功能,但它们都不起作用。例如,

Statement s = conn.createStatement();
s.execute(sqlStr);

或者

Statement s = conn.createStatement();
s.executeUpdate(sqlStr);

其中sqlStr是一个字符串变量,其中包含createdb.sql文件的内容。如何执行脚本中包含的所有 SQL 命令,以便创建所有表并初始化它们?顺便说一句,SQL 脚本有效,因为我在 SQuirreL SQL 客户端中使用它来手动创建和初始化数据库。现在我想从我的应用程序中做到这一点。

4

2 回答 2

3

下面的教程给出了如何运行 mysql 脚本(.sql 文件)。您要做的是将mysql db连接更改为derby db并运行。它会起作用的。

http://www.mkyong.com/jdbc/how-to-run-a-mysql-script-using-java/

这是在不使用任何第三方库的情况下运行 MySQL 脚本的另一种方法。

http://coreyhulen.wordpress.com/2010/04/07/run-a-sql-script-for-mysql-using-java/

于 2013-04-01T09:45:40.767 回答
0

对于 Derby,您通常使用 'ij' 工具来执行此操作:

http://db.apache.org/derby/docs/10.9/tools/ttoolsij98878.html

如果您想通过自己的 Java 程序而不是命令行来执行此操作,您将需要研究 ij 的“运行脚本”功能;看到这个相关的问题:

如何运行 sql 脚本以从 java 代码更新 Derby 模式?

于 2013-04-01T15:59:03.823 回答