2017-06-13 71 views
0

我想在java應用程序中運行SQLQuery。 sqlquery連接兩個數據庫(不在同一臺服務器上)。難道更正一下,我在這裏做什麼:用mysql查詢在Java中加入兩個數據庫?

公共功能有:

private DatabaseData externaldb = new DatabaseData("com.mysql.jdbc.Driver", 
"...", "...", "..."); 
    private DatabaseData localdb = new DatabaseData("com.mysql.jdbc.Driver", 
"...", "...", "..."); 
    private Connection externalconnection = null; 
    private Connection localconnection = null; 

    function(externalconnection, c_id, u_d); 

調用的函數是:

private int function(Connection externalconnection, String c_Id, String u_Id) 
    throws SQLException{ 
       String query ="SELECT A.v_id, COUNT(I.v_id) AS v_count " 
         + "FROM externaldb.video_interaction I" 
         + " INNER JOIN localdb.video_additional A ON A.v_id = I.v_id" 
         + " WHERE I.c_id='" + c_id + "' AND I.user'" + u_Id + "';"; 

       Statement stmt = externaldb.createStatement(); 
       ResultSet rs = stmt.executeQuery(query); 

       int counter = 0; 

       if (rs.next()){ 
        counter = rs.getInt("video_count"); 
       } 

       return counter; 

      } 

謝謝!

+0

有你嘗試了上面的代碼??你遇到了什麼問題..與我們無法幫助你的那些細節分享 – Akshay

+0

謝謝。我們仍在準備服務器。這就是爲什麼我目前沒有反饋意見。 –

+0

一旦遇到問題就會回來。否則我們也可以推測 – XtremeBaumer

回答

0

你有兩個連接,你有兩個數據庫。本地服務器必須能夠訪問本地的外部和外部。然後,創建聯合表格,例如:

CREATE TABLE federated_table (
    id  INT(20) NOT NULL AUTO_INCREMENT, 
    name VARCHAR(32) NOT NULL DEFAULT '', 
    other INT(20) NOT NULL DEFAULT '0', 
    PRIMARY KEY (id), 
    INDEX name (name), 
    INDEX other_key (other) 
) 
ENGINE=FEDERATED 
DEFAULT CHARSET=latin1 
CONNECTION='mysql://[email protected]_host:9306/federated/test_table'; 

(從MySQL 5.0.13開始之前,請使用COMMENT而不是CONNECTION)

資料來源:MySQL Cross Server Select Query

更多信息:https://dev.mysql.com/doc/refman/5.7/en/federated-create-server.html

+0

謝謝你的回覆。問題是我沒有授權在外部服務器上創建表。 –

+0

您是否有權在內部服務器上創建表格? – barwnikk

+0

是的,我確實有。 –