2012-04-04 4 views
0

Java/Android経由でMySqlデータベースへの接続を確立する際に問題があります。ネットワーク上のWindows7コンピュータにデータベースファイル(MyDatabase.db)があります。私が別のWindows7コンピュータから開発しているとき(ファイルはWindowsエクスプローラからアクセス可能で、SQLDatabaseExplorer経由でデータベースに変更を加えることができます)、Eclipseの次のコードは動作しますが、Galaxyタブの "DriverManager" getConnection() "はnullを返します。"DriverManager.getConnection"メソッドのNullPointerException

のSQLExceptionがLogCatにログイン
 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()"); 
     } 

は次のとおりです。

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

私は私の問題は、URL文字列であると思いますか...?しかし、私はそれをどのように変更するかを理解していないので、接続を確立することができます。任意の助け

おかげで、 ティム

EDIT:これまでのあなたの助けのための ありがとう!私は昨日、自分のコードに目を通さずに、昨日質問を書いてきました...私はたくさんのものが混じっているので、残念です...それはMySqlデータベースではなくsqliteデータベースです...しかし、私はコーディングでそれほど変わらないと思います。私はjdbcのsqliteドライバを使用しています。 Java-Eclipseプロジェクトで以下の行を開始すると、すべて正常に動作し、接続が確立されます。しかし、私のデバイス上ではまだNullpointerを持っています...

昨日私はあなたのアドバイスに合うように自分のコードを変更しました。しかし、問題は依然として抵抗しています...いくつかの権利やネットワーク設定と関係なく、DB-FileをAndroiddeviceにコピーして、次のコード行で直接接続しようとしました:

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でデータをシンクロさせる方法は?](http://stackoverflow.com/questions/9998519/how-to-syncronize-data-with-a-serverdatabase) – Snicolas

+0

使用 'のgetConnection (URL、ユーザ名、パスワード) 'の代わりに' getConnection(url); ' –

答えて

3

MYSQLのconenction文字列のURLの形式は、それは、127.0.0.1デフォルト

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

です。ポートが指定されていない場合、デフォルトはMySQLサーバーのデフォルトポート番号3306になります。ここで

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

は、サンプルの接続URLです:ます。jdbc:mysqlの:///が、重複したコードを見て

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

はそれに応じて

0

JDBCのURLがフォームを持って変更してください。おそらく、このようなモバイルからデータベースに直接接続したくないかもしれませんが、それを行う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(); 
    } 
関連する問題