Java 从文件执行db语句

Java 从文件执行db语句,java,sql,database,derby,javadb,Java,Sql,Database,Derby,Javadb,我在应用程序中使用嵌入式ApacheDerby。我有一个名为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, n

我在应用程序中使用嵌入式ApacheDerby。我有一个名为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);


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

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

下面是一种不使用任何第三方库运行MySQL脚本的替代方法


对于Derby,您通常使用“ij”工具来执行以下操作:

如果您想从自己的Java程序而不是命令行执行此操作,那么您需要研究ij的“runscript”特性;见这一相关问题:


k,thx。这让我想到了根据“;”将sqlStr字符串拆分为多个字符串,然后在for循环中为每个命令运行execute语句?只需将sql文件交给scriptrunner即可。我不想使用外部库或脚本。这是唯一的原因。
Statement s = conn.createStatement();
s.executeUpdate(sqlStr);