[英]How to load mysql dump to hsqldb database?
我有一個sql文件,在mysql中創建一個數據庫:
SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0;
SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0;
SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='TRADITIONAL';
CREATE SCHEMA IF NOT EXISTS `mydb` DEFAULT CHARACTER SET latin1 COLLATE latin1_swedish_ci ;
USE `mydb` ;
-- -----------------------------------------------------
-- Table `mydb`.`machine`
-- -----------------------------------------------------
CREATE TABLE IF NOT EXISTS `mydb`.`machine` (
`id` INT NOT NULL ,
`name` VARCHAR(45) NULL ,
PRIMARY KEY (`id`) );
SET SQL_MODE=@OLD_SQL_MODE;
SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS;
SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS;
現在我想將此文件加載到hsqldb 2數據庫中。 我需要在mysql轉儲中更改以將數據加載到hsqldb中?
目前我使用此代碼(groovy)來執行sql文件:
def embeddedDbSettings = [url:'jdbc:hsqldb:file:mydb', user:'sa', password:'', driver:'org.hsqldb.jdbcDriver'];
sql = Sql.newInstance(embeddedDb);
sql.executeInsert new File("./sql/create_database.sql").text;
我一直有這個加密的例外:
Exception in thread "main" java.sql.SQLException: unknown token
at org.hsqldb.jdbc.Util.sqlException(Unknown Source)
at org.hsqldb.jdbc.JDBCStatement.fetchResult(Unknown Source)
at org.hsqldb.jdbc.JDBCStatement.executeUpdate(Unknown Source)
at groovy.sql.Sql.executeInsert(Sql.java:1440)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at org.codehaus.groovy.runtime.callsite.PojoMetaMethodSite$PojoCachedMethodSiteNoUnwrapNoCoerce.invoke(PojoMetaMethodSite.java:229)
at org.codehaus.groovy.runtime.callsite.PojoMetaMethodSite.call(PojoMetaMethodSite.java:52)
at org.codehaus.groovy.runtime.callsite.CallSiteArray.defaultCall(CallSiteArray.java:40)
at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:117)
at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:125)
at de.hpi.ecir.eval_script.Convert2Excel.main(Convert2Excel.groovy:37)
Caused by: org.hsqldb.HsqlException: unknown token
at org.hsqldb.error.Error.error(Unknown Source)
at org.hsqldb.error.Error.error(Unknown Source)
at org.hsqldb.ParserBase.read(Unknown Source)
at org.hsqldb.ParserDDL.compileCreate(Unknown Source)
at org.hsqldb.ParserCommand.compilePart(Unknown Source)
at org.hsqldb.ParserCommand.compileStatements(Unknown Source)
at org.hsqldb.Session.executeDirectStatement(Unknown Source)
at org.hsqldb.Session.execute(Unknown Source)
... 13 more
CREATE SCHEMA mydb AUTHORIZATION DBA
if not exists
刪除所有 - hsqldb不支持此命令 分別執行每個命令:
String[] commands = new File("./sql/create_database.sql").text.split(";"); for(String command: commands) { // new line is a delimiter in hsqldb sql.execute command.replace("\\n", " "); } // remember to call shutdown otherwise hsqldb will not save your data sql.execute "SHUTDOWN" sql.close();
你還必須:
由此 :
CT_CLIENT integer NOT NULL DEFAULT '0',
對此:
CT_CLIENT integer DEFAULT '0' NOT NULL ,
使用IntelliJ IDEA解決了這個問題:
我依靠RazorSQL解決了這個問題。 它不是免費的,但是評估版本足以執行從MySQL到HSQLDB的轉換。 它還支持其他數據庫轉換。
我在轉換過程中檢測到的唯一問題是主鍵。 所以基本上,以下生成的代碼摘錄不會為我運行:
CREATE TABLE items_fractions (
id INTEGER IDENTITY NOT NULL,
item_id INTEGER NOT NULL,
fraction_id INTEGER NOT NULL,
PRIMARY KEY (id)
);
我不得不刪除IDENTITY位。
您不必單獨運行每個命令,只要您的所有令牌都有效,hsqldb就可以一次運行所有腳本。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.