2013-04-01 32 views
5

我爲我的應用程序使用嵌入式Apache derby。我有一個名爲createdb.sql SQL腳本,創建數據庫中的所有表和初始數據填充它,例如:從文件執行db語句

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 Client中使用它來手動創建和初始化數據庫。現在我想從我的應用程序中完成它。

回答

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/

+0

k,thx。這讓我想到將sqlStr字符串拆分爲多個字符串,基於「;」然後在for循環中爲每個命令運行execute語句。 – Marcin

+0

爲什麼你要循環?只需將sql文件提供給scriptrunner。 – Dhinakar

+0

我不想使用外部庫或腳本。這是唯一的原因。 – Marcin