2012-10-20 46 views
0

[解決]的jdbc - 連接遠程MySQL數據庫錯誤

我終於得到解決的問題,就是一切好的和連接...

的問題是在一個SQL查詢,我在做一個選擇在名爲「arduinoData」的表中,真正的名字是「arduinodata」。

這種方式適用於本地,但是當我在網上嘗試時,它並沒有。

因爲這樣,返回值爲'null',Java試圖解析並顯示錯誤。

我很抱歉遇到麻煩,謝謝大家。


我使用JDBC將我的程序連接到MySQL數據庫。

我已經把端口號和是的,我的數據庫有權限訪問。

當我使用本地主機完美工作,但是當我嘗試連接到遠程MySQL數據庫時,在控制檯上顯示此錯誤。

java.lang.ExceptionInInitializerError 
Caused by: java.lang.NumberFormatException: null 
    at java.lang.Integer.parseInt(Integer.java:454) 
    at java.lang.Integer.parseInt(Integer.java:527) 
    at serial.BDArduino.<clinit>(BDArduino.java:25) 
Exception in thread "main" Java Result: 1 
CONSTRUÍDO COM SUCESSO (tempo total: 1 segundo) 

謝謝您提前!

+0

你還必須在mysql中啓用遠程訪問,默認情況下它只接受來自localhost的訪問,你啓用了它嗎? – Stefan

回答

-1

我想你錯過了連接字符串中的端口號。

static String url = "jdbc:mysql://mysql.mydomain.com.br:3306/myDB"; 

而不是

static String url = "jdbc:mysql://mysql.mydomain.com.br/myDB"; 

現在,如果得到同樣的錯誤意味着你可以用IP地址如下取代mysql.mydomain.com.br

只需提供IP /主機名你的數據庫連接字符串中的遠程機器,而不是mysql.mydomain.com.br。例如:

jdbc:mysql://172.16.15.225:3306/yourdatabase 

還要檢查有沒有防火牆阻止訪問端口3306

確保您與被允許從該特定的主機連接連接用戶。對於開發環境是安全的

'username'@'%' 

這是爲用戶 GRANT manual.

+0

我以前都做過,不工作:c –

+0

您是否使用IP地址和端口號?現在有什麼錯誤? – Ami

+0

@GuilhermeRuiz請更新您的問題,您的堆棧跟蹤它會幫助FUL所有 – gks

-1

你應該在你connection url as 3306使用port numbers授予的權限要做到這一點,還請確保對用戶權限的數據庫訪問如果不被授予,你應該授權用戶訪問遠程數據庫,請參考link

+0

我確定即時消息使用端口號和我的數據庫有權限 –

+0

「arduinoData」的表設計是什麼?從我的理解表明,該應用程序試圖將字符串轉換爲其中一種數字類型,我認爲如此 – gks

+0

請讓我知道投票的理由,它可以幫助我糾正我的錯誤?感謝downvote – gks

2

注意:這是或最初的評論,但太長了。看來人們看到NFE,並猜測它的端口是空的。這是誤導。這是一個顯示端口沒有必要的工作代碼。請避免誤導性答案。

 try { 
      Class.forName("com.mysql.jdbc.Driver"); 
      String sourceURL = "jdbc:mysql://localhost/sodb"; 

      Connection conn = DriverManager.getConnection(sourceURL, "naishe", "p2ssword"); 
      Statement st = conn.createStatement(); 
      ResultSet rs = st.executeQuery("select count(*) from test_tab"); 
      while(rs.next()){ 
       System.out.println(rs.getString(1)); 
      } 
     } catch(ClassNotFoundException cnfe) { 
      System.err.println(cnfe); 
     } catch(SQLException sqle) { 
      System.err.println(sqle); 
     } 

它打印3(這是表中的test_tab記錄數)正確。


如果您正在使用標準驅動,你不需要端口,則默認爲3306!在這裏看到 http://dev.mysql.com/doc/refman/5.5/en/connector-j-reference-configuration-properties.html

JDBC URL格式

爲MySQL連接器的JDBC URL格式/ J爲如下,其中在方括號中的項目([,])是可選的:

jdbc:mysql://[host][,failoverhost...][:port]/[database] » [?propertyName1][=propertyValue1][&propertyName2][=propertyValue2]...

如果未指定主機名,則默認爲127.0.0.1。 如果未指定端口,則默認爲3306,即MySQL服務器的默認端口號。

+0

-1他正在使用mysql,您必須提供端口號 –

+0

@NandkumarTekale您是否真正閱讀過代碼。我正在使用MySQL和不使用端口,它的工作!你不必提供端口。它默認爲3306. – Nishant

+0

如果你在文檔中給我看證據,我將刪除downvote –