2017-06-13 69 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

是的,我确实有。 –