JDBC は、待ち時間が短く、帯域幅の広い接続で使用するのが最適であることを知っています。PHPサービスを使用することをお勧めします。
サーバー上にあるデータベースからデータを取得するレストランメニューアプリを開発しています。ターゲットデバイスとしてSamsung galaxy tab2 7インチを使用し、高帯域幅の安定したワイヤレス接続を備えています.私の最初の試みは、データベースを持ち、データを取得して送信する多くのスレッドを持つ同じマシンでJavaサーバーを実行することでした. TCPソケットを介してAndroidデバイスに。
バックグラウンドで多くのスレッドが動作しているため、この実装により、ホスト マシンと Android デバイスの両方で CPU 使用率が高くなりました。
このような実装を使用できる環境があるため、JDBC を試してみることにしました。しかし、これまでのところDBへの接続に成功していません.Androidアプリケーションマニフェストでインターネットアクセス許可を持っていても.
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
try {
Class.forName("com.mysql.jdbc.Driver");
this.setTitle("Driver started ");
Connection con = (Connection) DriverManager.getConnection("jdbc:mysql://192.168.1.3/cafe", "root", "1234");
this.setTitle("Connected to db");
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
このコードは私に次のエラーを与えます
04-07 15:22:41.222: W/System.err(11318): com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: Communications link failure
04-07 15:22:41.222: W/System.err(11318): The last packet sent successfully to the server was 0 milliseconds ago. The driver has not received any packets from the server.
04-07 15:22:41.238: W/System.err(11318): at java.lang.reflect.Constructor.constructNative(Native Method)
04-07 15:22:41.238: W/System.err(11318): at java.lang.reflect.Constructor.newInstance(Constructor.java:417)
04-07 15:22:41.238: W/System.err(11318): at com.mysql.jdbc.Util.handleNewInstance(Util.java:411)
04-07 15:22:41.238: W/System.err(11318): at com.mysql.jdbc.SQLError.createCommunicationsException(SQLError.java:1121)
04-07 15:22:41.238: W/System.err(11318): at com.mysql.jdbc.MysqlIO.<init>(MysqlIO.java:355)
04-07 15:22:41.238: W/System.err(11318): at com.mysql.jdbc.ConnectionImpl.coreConnect(ConnectionImpl.java:2479)
04-07 15:22:41.238: W/System.err(11318): at com.mysql.jdbc.ConnectionImpl.connectOneTryOnly(ConnectionImpl.java:2516)
04-07 15:22:41.245: W/System.err(11318): at com.mysql.jdbc.ConnectionImpl.createNewIO(ConnectionImpl.java:2301)
04-07 15:22:41.245: W/System.err(11318): at com.mysql.jdbc.ConnectionImpl.<init>(ConnectionImpl.java:834)
04-07 15:22:41.245: W/System.err(11318): at com.mysql.jdbc.JDBC4Connection.<init>(JDBC4Connection.java:47)
04-07 15:22:41.245: W/System.err(11318): at java.lang.reflect.Constructor.constructNative(Native Method)
04-07 15:22:41.245: W/System.err(11318): at java.lang.reflect.Constructor.newInstance(Constructor.java:417)
04-07 15:22:41.245: W/System.err(11318): at com.mysql.jdbc.Util.handleNewInstance(Util.java:411)
04-07 15:22:41.245: W/System.err(11318): at com.mysql.jdbc.ConnectionImpl.getInstance(ConnectionImpl.java:416)
04-07 15:22:41.245: W/System.err(11318): at com.mysql.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:317)
04-07 15:22:41.245: W/System.err(11318): at java.sql.DriverManager.getConnection(DriverManager.java:175)
04-07 15:22:41.245: W/System.err(11318): at java.sql.DriverManager.getConnection(DriverManager.java:209)
04-07 15:22:41.245: W/System.err(11318): at com.example.anndroidjdbc.MainActivity.onCreate(MainActivity.java:23)
04-07 15:22:41.245: W/System.err(11318): at android.app.Activity.performCreate(Activity.java:4465)
04-07 15:22:41.245: W/System.err(11318): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1053)
04-07 15:22:41.245: W/System.err(11318): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1934)
04-07 15:22:41.245: W/System.err(11318): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1995)
04-07 15:22:41.245: W/System.err(11318): at android.app.ActivityThread.access$600(ActivityThread.java:128)
04-07 15:22:41.245: W/System.err(11318): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1161)
04-07 15:22:41.245: W/System.err(11318): at android.os.Handler.dispatchMessage(Handler.java:99)
04-07 15:22:41.245: W/System.err(11318): at android.os.Looper.loop(Looper.java:137)
04-07 15:22:41.253: W/System.err(11318): at android.app.ActivityThread.main(ActivityThread.java:4514)
04-07 15:22:41.253: W/System.err(11318): at java.lang.reflect.Method.invokeNative(Native Method)
04-07 15:22:41.253: W/System.err(11318): at java.lang.reflect.Method.invoke(Method.java:511)
04-07 15:22:41.253: W/System.err(11318): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:790)
04-07 15:22:41.253: W/System.err(11318): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:557)
04-07 15:22:41.253: W/System.err(11318): at dalvik.system.NativeStart.main(Native Method)
04-07 15:22:41.253: W/System.err(11318): Caused by: java.net.SocketException: android.os.NetworkOnMainThreadException
04-07 15:22:41.253: W/System.err(11318): at com.mysql.jdbc.StandardSocketFactory.unwrapExceptionToProperClassAndThrowIt(StandardSocketFactory.java:410)
04-07 15:22:41.253: W/System.err(11318): at com.mysql.jdbc.StandardSocketFactory.connect(StandardSocketFactory.java:271)
04-07 15:22:41.253: W/System.err(11318): at com.mysql.jdbc.MysqlIO.<init>(MysqlIO.java:305)
04-07 15:22:41.253: W/System.err(11318): ... 27 more
PHP Webサービスに関しては、私はそれを使用する方法やセットアップする方法を本当に知りません。私は何をすべきだと思いますか?最初の実装を続行するか、php サービスを使用して Android デバイスから mysql db への直接的なアプローチに切り替えます。
申し訳ありませんが、これは重複と見なされます。抱えている問題についてあなたの意見が欲しいだけです。誰かが私にもっと良いアプローチを教えてくれたり、JDBC からのエラーを手伝ってくれたりしたら、私は感謝します。