簡體   English   中英

如何生成JDBC數據庫URL?

[英]How do I generate a JDBC database URL?

我今天已經研究了大約3個小時,我覺得我很接近,但我有幾個問題。 我到目前為止找到的最好的信息來源是: https//stackoverflow.com/a/2840358 ,但它沒有回答我的所有問題。

一點背景:我正在使用Microsoft SQL Server 2014,並且我已經驗證了IP地址127.0.0.1處於活動狀態並使用端口1433啟用。我在同一台計算機上通過SQL Server程序連接到數據庫沒有問題,但我正在嘗試通過我正在編寫的Java程序進行連接,並且它當前正在發出此錯誤:com.microsoft.sqlserver.jdbc.SQLServerException:端口號1433 / R2M_Database無效。 我對此感到困惑,因為我知道端口1433是正確的,我知道我要連接的數據庫叫做R2M_Database。 現在,這是我的問題以及我的源代碼。

1.)“mysql”和“sqlserver”子協議之間有什么區別,我怎么知道使用哪個? (我很確定我應該使用sqlserver,但以防萬一)

2.)我如何確保使用正確的主機名? (我很確定127.0.0.1 / localhost是我應該使用的那個,但是我怎樣才能從其他機器運行這個程序來訪問數據庫?)

3.)是否存在任何可能導致防火牆或密碼要求的外部問題? (我相當確定用戶名和密碼是正確的,因為它們是我用來在Microsoft SQL Server 2014中成功獲得連接的用戶名和密碼)

編輯:

import java.sql.DriverManager;
import java.io.BufferedReader;
import java.io.FileReader;
import org.apache.ibatis.jdbc.ScriptRunner;

public class SQLTest {
    public static void main(String[] args){
        String script = "CreatePersons.sql";
        try {
            Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
            new ScriptRunner(DriverManager.getConnection("jdbc:sqlserver://127.0.0.1:1433;databaseName=R2M_Database", userName, password))
                    .runScript(new BufferedReader(new FileReader(script)));
        } catch (Exception e) {
            System.err.println(e);
        }
    }
}

我做了一個輕微的語法更改(; databaseName =而不是/),現在我收到此錯誤:

com.microsoft.sqlserver.jdbc.SQLServerException:用戶'RSquaredMacro'登錄失敗。 ClientConnectionId:35281a40-0f87-42e4-BC46-b9a81a371529

  1. mysql是一個完全不同的數據庫服務器。 不要將它用於SQL Server。

  2. 您需要為數據庫服務器提供公共地址。 只要所有客戶都可以看到它,就可以使用ip或主機名。 如果你沒有,你可以嘗試使用dyndns.org或類似的東西。 請注意,您的客戶仍需要能夠訪問網絡上的服務器(潛在的防火牆問題)。 在不了解您的情況的情況下很難說更多。

  3. 防火牆可能是一個問題,但對於localhost來說這不太可能。 我猜測問題在於TCP / IP偵聽器,用戶名,密碼或數據庫名稱設置。

以下鏈接提供了有關構建JDBC連接字符串的更多信息: http//technet.microsoft.com/en-us/library/ms378428%28v=sql.110%29.aspx

還有一些附注:

  1. 您不需要包含1433端口號。

  2. 打印整個堆棧跟蹤將幫助您進行調試。 (見下面的代碼)

  3. 您應該為Connection聲明一個變量並確保它已關閉。 例:

     Connection c = null; try { Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver"); c = DriverManager.getConnection("jdbc:sqlserver://127.0.0.1:1433/R2M_Database", userName, password); new ScriptRunner(c).runScript(new BufferedReader(new FileReader(script))); } catch (Exception e) { e.printStackTrace(); } finally { if (c != null) try { c.close(); } catch (Exception e) { } } 

事實證明,問題在於我的JDBC URL的格式化。 我遇到的問題是不同的子協議具有不同的URL-s語法,但sqlserver協議的語法(以及如何查找每個部分)如下所示:

"jdbc:sqlserver://" + serverName + ";database=" + databaseName

1.)serverName:要查找服務器名稱,請連接到Microsoft SQL Server(這些說明基於SQL Server 2014),然后查看右側的“屬性”窗格。 在頂部的組合框中選擇“當前連接參數”,然后在“服務器名稱”字段的“連接詳細信息”下查找。

2.)databaseName:這個是相當簡單的,因為它是您要從中訪問數據的數據庫的名稱。 即使您登錄的用戶列在“主”數據庫下,您也不必登錄“master”,而是可以使用您想要的任何數據庫,只要您登錄的用戶具有權限即可完成你想要完成的任務。

最后:這是幫助我最終解決問題的鏈接,更詳細地說明了這一點: http//www.programcreek.com/2010/05/java-code-for-connecting-ms-sql-server-by-使用-SQL服務器的認證/

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM