2017-12-05 9 views
0

これで、mysql dbをメモリ内のhsqldbに移行しようとしています。私はこれに対称を使用しています。私は、次のプロパティを使用してMySQLに接続されたサービスとしてSymmetricDSはを開始しました:メモリ内のhsqldbを使った対称コード

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

enter image description here

私が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) 

完全なスタックトレースを接続します。

誰かが私がここで間違っていることを教えてもらえれば幸いです。

+0

@Borisを:uは私の質問を見れば、再びファイルベースのHSQLDBを私は、メモリ内HSQLDBを使用していますことに気づくとしません。はい、私のURLと構文はすべて正しいです。これが起こる可能性がある他の理由はありますか?見て私に知らせる – Edward

答えて

1

テーブルの作成に使用するステートメントを見ると、テーブル名とカラム名が引用符で囲まれて大文字と小文字が区別されます。同じケースを使用するようにSQLクエリを変更し、このように、引用:

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