2013-04-01 13 views
5

Używam wbudowanych apache derby dla mojej aplikacji. Mam skrypt SQL o nazwie CreateDb.sql, która tworzy wszystkie tabele w bazie danych i zapełnia go z wstępnych danych, na przykład:Wykonywanie instrukcji db z pliku

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; 

Pytanie brzmi: jak mogę załadować ten plik i wykonać wszystkie instrukcje używając Java ? Próbuję różnych funkcji, ale wszystkie nie działają. Na przykład,

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

lub

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

gdzie sqlStr jest zmienną łańcucha zawierającego zawartość CreateDb.sql pliku. Jak wykonać wszystkie polecenia SQL zawarte w skrypcie, aby utworzyć wszystkie tabele i zainicjować je? Btw, działa skrypt SQL, ponieważ używam go w SQL klienta SQuirreL do ręcznego tworzenia i inicjowania bazy danych. Teraz chciałbym to zrobić z poziomu mojej aplikacji.

Odpowiedz

3

Poniższy samouczek opisuje, jak uruchomić skrypt mysql (plik .sql). Co musisz zrobić, to zmienić połączenie mysql db do derby db i uruchomić. To będzie działać.

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

Oto alternatywny sposób uruchomić skrypt MySQL bez użycia biblioteki strony trzeciej.

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

+0

k, thx. To dało mi pomysł podzielenia łańcucha sqlStr na wiele łańcuchów na podstawie ";" a następnie uruchom instrukcję execute w pętli for dla każdego polecenia. – Marcin

+0

dlaczego szukasz zapętlenia? Po prostu daj plik sql do scriptrunner. – Dhinakar

+0

Nie chcę używać zewnętrznych bibliotek ani skryptów. To jedyny powód. – Marcin