簡體   English   中英

與內存中的hsqldb對稱

[英]symmetricds with in-memory hsqldb

因此,我正在嘗試將mysql db遷移到內存中的hsqldb。 我為此使用對稱。 我已經使用以下屬性將對稱對象作為連接到mysql的服務啟動:

engine.name=corp-000
db.driver=com.mysql.jdbc.Driver
db.url=jdbc:mysql://localhost/corp?tinyInt1isBit=false
db.user=root
db.password=
registration.url=
sync.url=http://localhost:31415/sync/corp-000
group.id=corp
external.id=000
job.purge.period.time.ms=7200000
job.routing.period.time.ms=5000
job.push.period.time.ms=10000
job.pull.period.time.ms=10000
initial.load.create.first=true
auto.registration=true
auto.reload=true

用所需的數據創建並加載所有sym表。

接下來,我使用ClientSymmetricEngine通過java創建了一個clientnode。 這是我的Java代碼:

public ClientNode(File file) throws FileNotFoundException, IOException {
  propFile = file;
  Properties propertiesFile = new Properties();
  propertiesFile.load(new FileReader(propFile));
  cEngine = new ClientSymmetricEngine(propertiesFile, true);
  //getcEngine().openRegistration("store", "001");// client is the name of the node group and 001 is the ID
  getcEngine().setup();
  getcEngine().start();
  }    
public ClientSymmetricEngine getcEngine() {
  return cEngine;
}

這是clientNode屬性文件:

engine.name=store-001
db.driver=org.hsqldb.jdbcDriver
db.url=jdbc:hsqldb:mem:store001
db.user=sa
db.password=
registration.url=http://localhost:31415/sync/corp-000
group.id=store
external.id=001
job.routing.period.time.ms=5000
job.push.period.time.ms=10000
job.pull.period.time.ms=10000

以下是我的代碼,用於啟動clientNode並從在同一JVM上運行的復制表中獲取數據:

public static void main(String[] args) {    
  try {             
    new ClientNode(new File("C:/Train/src/main/resources/store-001.properties"));
    Thread.currentThread();
    Thread.sleep(40000);
    Class.forName("org.hsqldb.jdbcDriver");
    con = DriverManager.getConnection("jdbc:hsqldb:mem:store001;create=false", "sa", "");
    System.out.println("Connection created successfully");
    stmt = con.createStatement();    
    rs = stmt.executeQuery("SELECT item_id, name FROM item");
    while (rs.next()) {
      System.out.println(rs.getInt("item_id") + " | " + rs.getString("name"));
    }               
  } catch (Exception e) {
    e.printStackTrace(System.out);
  }
}

在此處輸入圖片說明

當我運行main()時,我看到symmetricds從mysql復制到hsql。 但是,當我嘗試從hsql獲取相同的數據時,出現表對象未找到異常。

java.sql.SQLException: user lacks privilege or object not found: ITEM
at org.hsqldb.jdbc.JDBCUtil.sqlException(Unknown Source)
at org.hsqldb.jdbc.JDBCStatement.fetchResult(Unknown Source)
at org.hsqldb.jdbc.JDBCStatement.executeQuery(Unknown Source)
at hsqlDB.FetchData.<init>(FetchData.java:24)
at hsqlDB.ConnectDatabase.main(ConnectDatabase.java:15)

附加完整的堆棧跟蹤。

如果有人可以告訴我我在做什么錯,我將不勝感激。

如果查看它用於創建表的語句,則會引用表名和列名,這使它們區分大小寫。 更改您的SQL查詢以使用相同的大小寫和引用,如下所示:

rs = stmt.executeQuery("SELECT \"item_id\", \"name\" FROM \"item\"");

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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