【问题标题】:symmetricds with in-memory hsqldb与内存中的 hsqldb 对称
【发布时间】:2017-12-05 13:35:29
【问题描述】:

所以,我正在尝试将 mysql db 迁移到内存中的 hsqldb。我为此使用对称。我已将 symbolicds 作为连接到 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 创建了一个客户端节点。这是我的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 获取相同的数据时,我得到 table object not found 异常。

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)

附加完整的堆栈跟踪。

如果有人能告诉我我在这里做错了什么,我将不胜感激。

【问题讨论】:

  • @Boris:如果您再次查看我的问题,您会注意到我使用的是内存中的 hsqldb,而不是基于文件的 hsqldb。是的,我的网址和语法都是正确的。是否有任何其他原因可能会发生这种情况?一定要看看,让我知道

标签: java mysql jdbc hsqldb symmetricds


【解决方案1】:

如果您查看它用于创建表的语句,表名和列名被引用,这使得它们区分大小写。更改您的 SQL 查询以使用相同的大小写和引号,如下所示:

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

【讨论】:

    猜你喜欢
    • 2012-10-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-04-08
    • 2014-05-05
    • 1970-01-01
    • 2010-10-19
    • 1970-01-01
    相关资源
    最近更新 更多