簡體   English   中英

如何將mysql dump加載到hsqldb數據庫?

[英]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
  1. 刪除所有SET行
  2. 使用創建數據庫的命令更改一行: CREATE SCHEMA mydb AUTHORIZATION DBA
  3. if not exists刪除所有 - hsqldb不支持此命令
  4. 刪除所有表揚(不是必需的,但你需要在這篇文章中找到的代碼)
  5. 刪除所有`
  6. 用布爾值替換TINYINT(boolean的mysql等價物)
  7. 分別執行每個命令:

     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(); 

你還必須:

  • 將CREATE_TABLE中的“AUTO_INCREMENT”替換為“默認為默認生成”
  • 將“int”替換為“integer”
  • 例如,在列創建中移動“default”語句:

由此 :

CT_CLIENT integer NOT NULL DEFAULT '0',

對此:

CT_CLIENT integer DEFAULT '0' NOT NULL ,

使用IntelliJ IDEA解決了這個問題:

  1. 在數據庫選項卡中,添加與數據庫的連接(在本例中為MySQL)
  2. 右鍵單擊所需的數據庫,然后單擊“復制DDL”。

我依靠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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM