2012-04-04 82 views
0

我通過Java/Android建立與MySql數據庫的連接時出現問題。我的網絡中有一個Windows7計算機上的數據庫文件(MyDatabase.db)。當我從另一臺Windows7計算機(該文件可通過Windows資源管理器進行訪問,並且可以通過SQLDatabaseExplorer對數據庫進行更改)開發出以下代碼時,但在Galaxy Tab上安裝我的應用程序時,會出現「DriverManager」。 getConnection()「返回null。「DriverManager.getConnection」方法中的NullPointerException

 try { 
      String url = "http://192.168.178.21/Users/test/userdata/Database/MyDatabase.db"; 
      Class.forName ("com.mysql.jdbc.Driver"); 
      Connection connection = DriverManager.getConnection (url); 
      System.out.println ("Database connection established"); 
     } catch (SQLException e) { 
      Log.d("SQLException", "e.toString()"); 
     } 

SQLException中登錄logcat的是:

java.sql.SQLException: path to '//192.168.178.21/Users/test/userdata/Database/MyDatabase.db': '/192.168.178.21' does not exist 

我想我的問題就出在URL字符串...?但我沒有弄清楚如何改變它,以便建立連接。

感謝您的幫助, 添

編輯: 感謝您的幫助迄今!我昨天寫了這個問題,但沒有看到我的代碼......我很抱歉,因爲我混淆了很多東西......它不是MySql數據庫,而是sqlite數據庫......但我認爲這在編碼上並沒有太大的改變。我正在使用jdbc sqlite驅動程序。在Java-Eclipse項目中啓動下面的代碼時,一切正常,並且可以建立連接。但在我的設備上,我仍然有Nullpointer ...

昨天我改變了我的代碼,以便它適合您的建議。但問題仍然存在......要確定它不需要處理某些權限或網絡設置,我已將DB-File複製到我的Android設備上,並嘗試使用以下代碼行直接連接它:

try { 
    Class.forName("org.sqlite.JDBC"); 
} catch (ClassNotFoundException e) { 
    e.printStackTrace(); 
} 

Connection conn = DriverManager.getConnection("jdbc:sqlite://mnt/sdcard/MyVideos34.db"); 

if (conn == null) { 
    Log.d("ConnectionError", "Connection is null"); 
return; 
} 

但在這裏getConnection拋出一個NullPointer,我不知道爲什麼......有人有一個假設,爲什麼連接可以建立在Eclipse之外,並在我的Androiddevice上失敗?我可能會有一個錯誤的驅動程序,這不適用於設備,但從Eclipse ...?

在此先感謝!

+0

【如何用ServerDatabase syncronize數據?(http://stackoverflow.com/questions/9998519/how-to-syncronize-data-with-a-serverdatabase) – Snicolas 2012-04-04 06:55:39

+0

使用'的getConnection的可能重複(網址,用戶名,密碼)'而不是'getConnection(url);' – 2012-04-04 06:57:56

回答

3

對於MySQL conenction字符串URL格式是

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

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

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

下面是一個簡單的連接網址:

jdbc:mysql://localhost:3306/sakila?profileSQL=true 

請相應地改變

0

JDBC網址的形式爲:jdbc:mysql的:///但看重複的代碼。你可能不想直接連接到像這樣的移動數據庫,但會更喜歡一個Web服務包裝器來做到這一點。

0
try { 
     String url = "jdbc:mysql://localhost:3306/MyDatabase?user=root&password=root"; 
     Class.forName ("com.mysql.jdbc.Driver").newInstance(); 
     Connection connection = DriverManager.getConnection (url); 
     System.out.println ("Database connection established"); 
    } catch (SQLException e) { 
     System.out.println("SQLException" + e.toString()); 
    } catch (ClassNotFoundException e) { 
     e.printStackTrace(); 
    } catch (InstantiationException e) { 
     e.printStackTrace(); 
    } catch (IllegalAccessException e) { 
     e.printStackTrace(); 
    } 
相關問題