从文件执行db语句

时间:2013-04-01 09:32:04

标签: java sql database derby javadb

我在我的应用程序中使用嵌入式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 是一个String变量,包含 createdb.sql 文件的内容。如何执行脚本中包含的所有SQL命令,以便创建所有表并初始化它们?顺便说一下,SQL脚本可以工作,因为我在SQuirreL SQL Client中使用它来手动创建和初始化数据库。现在我想在我的申请中做到这一点。

2 个答案:

答案 0 :(得分:3)

以下教程介绍了如何运行mysql脚本(.sql文件)。你要做的是将mysql数据库连接更改为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/

答案 1 :(得分:0)

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

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

如果你想从你自己的Java程序而不是从命令行执行此操作,你将需要研究ij的'runscript'功能;看到这个相关的问题:

How to run sql scripts in order to update a Derby schema from java code?