0

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

       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()");
       }

LogCat に記録された SQLException は次のとおりです。

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ファイルを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 から接続を確立でき、私の Android デバイスで失敗する理由を推測しましたか? デバイスではなくEclipseから動作する間違ったドライバーを使用できますか...?

前もって感謝します!

4

3 に答える 3

3

MYSQL 接続文字列の URL 形式は次のとおりです。

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

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

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

接続 URL の例を次に示します。

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

それに応じて変更してください

于 2012-04-04T06:54:32.977 に答える
0

JDBC URL の形式は jdbc:mysql:/// ですが、重複したコードを見てください。おそらく、このようにモバイルからデータベースに直接接続するのは望ましくありませんが、Web サービス ラッパーを使用することをお勧めします。

于 2012-04-04T06:55:20.507 に答える
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();
    }
于 2012-04-04T07:31:31.250 に答える