2013-04-01 4 views
5

Я использую встроенное дерби Apache для своего приложения. У меня есть SQL скрипт createdb.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 на несколько строк на основе «;» а затем запустите команду execute в цикле for для каждой команды. – Marcin

+0

Почему вы идете на цикл? Просто дайте sql-файлу scriptrunner. – Dhinakar

+0

Я не хочу использовать внешние библиотеки или скрипты. Это единственная причина. – Marcin

0

С Дерби, вы обычно используете инструмент «IJ», чтобы сделать это:

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

Если вы хотите сделать это из программы Java свой собственный, а не от в командной строке вы захотите изучить функцию «runcript» ij; см. этот вопрос:

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