【发布时间】: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