代码之家  ›  专栏  ›  技术社区  ›  Skarab

如何将mysql dump加载到hsqldb数据库?

  •  14
  • Skarab  · 技术社区  · 14 年前

    我有一个在mysql中创建数据库的sql文件:

    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;
    

    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
    
    5 回复  |  直到 14 年前
        1
  •  13
  •   imaginaryboy    12 年前
    1. 删除所有设置行
    2. CREATE SCHEMA mydb AUTHORIZATION DBA
    3. 全部删除 if not exists -hsqldb不支持此命令
    4. 删除所有推荐(不是必需的,但是您在本文中找到的代码需要)
    5. 用boolean替换TINYINT(相当于boolean的mysql)
    6. 分别执行每个命令:

      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();
      
        2
  •  7
  •   Antoine    13 年前

    • 将CREATE\表中的“AUTO\ INCREMENT”替换为“GENERATED by DEFAULT AS IDENTITY”
    • 将“int”替换为“integer”
    • 在列创建中移动“default”语句,例如:

    由此:

    CT_CLIENT integer NOT NULL DEFAULT '0',
    

    对此:

    CT_CLIENT integer DEFAULT '0' NOT NULL ,
    
        3
  •  0
  •   Baz    12 年前

    您不必分别运行每个命令,如果您一次运行所有脚本,只要您的所有令牌都有效,hsqldb就可以正常工作。

        4
  •  0
  •   Florian Lopes    10 年前

    1. 在数据库选项卡中,添加到数据库的连接(本例中为MySQL)
    2. 右键单击所需的数据库并单击“复制DDL”。
        5
  •  0
  •   narko    9 年前

    RazorSQL . 它不是免费的,但是有了评估版本,您就可以执行从MySQL到HSQLDB的转换了。它还支持其他DB转换。

    我在转换过程中发现的唯一问题是主键。因此,基本上,以下生成的代码摘录不会为我运行:

    CREATE TABLE items_fractions (
      id INTEGER IDENTITY NOT NULL,
      item_id INTEGER NOT NULL,
      fraction_id INTEGER NOT NULL,
      PRIMARY KEY (id)
    );