AndroidStudioでJavaを用いてMysqlのデータベースからデータを取得しようとしています。
データベース接続を実行した際にエラーメッセージが発生しました。
発生している問題・エラーメッセージ
W/System.err: com.mysql.cj.jdbc.exceptions.CommunicationsException: Communications link failure The last packet sent successfully to the server was 0 milliseconds ago. The driver has not received any packets from the server. at com.mysql.cj.jdbc.exceptions.SQLError.createCommunicationsException(SQLError.java:174) W/System.err: at com.mysql.cj.jdbc.exceptions.SQLExceptionsMapping.translateException(SQLExceptionsMapping.java:64) at com.mysql.cj.jdbc.ConnectionImpl.createNewIO(ConnectionImpl.java:836) at com.mysql.cj.jdbc.ConnectionImpl.<init>(ConnectionImpl.java:456) at com.mysql.cj.jdbc.ConnectionImpl.getInstance(ConnectionImpl.java:246) W/System.err: at com.mysql.cj.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:199) at java.sql.DriverManager.getConnection(DriverManager.java:569) at java.sql.DriverManager.getConnection(DriverManager.java:219) at com.example.test1.check$DbConnect.doInBackground(check.java:101) W/System.err: at com.example.test1.check$DbConnect.doInBackground(check.java:67) at android.os.AsyncTask$2.call(AsyncTask.java:333) at java.util.concurrent.FutureTask.run(FutureTask.java:266) at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:245) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1162) W/System.err: at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:636) at java.lang.Thread.run(Thread.java:764) W/System.err: Caused by: com.mysql.cj.exceptions.CJCommunicationsException: Communications link failure The last packet sent successfully to the server was 0 milliseconds ago. The driver has not received any packets from the server. at java.lang.reflect.Constructor.newInstance0(Native Method) W/System.err: at java.lang.reflect.Constructor.newInstance(Constructor.java:334) at com.mysql.cj.exceptions.ExceptionFactory.createException(ExceptionFactory.java:61) at com.mysql.cj.exceptions.ExceptionFactory.createException(ExceptionFactory.java:105) at com.mysql.cj.exceptions.ExceptionFactory.createException(ExceptionFactory.java:151) W/System.err: at com.mysql.cj.exceptions.ExceptionFactory.createCommunicationsException(ExceptionFactory.java:167) at com.mysql.cj.protocol.a.NativeSocketConnection.connect(NativeSocketConnection.java:91) at com.mysql.cj.NativeSession.connect(NativeSession.java:144) at com.mysql.cj.jdbc.ConnectionImpl.connectOneTryOnly(ConnectionImpl.java:956) W/System.err: at com.mysql.cj.jdbc.ConnectionImpl.createNewIO(ConnectionImpl.java:826) W/System.err: ... 13 more W/System.err: Caused by: java.net.ConnectException: failed to connect to /10.0.2.2 (port 3306) from /:: (port 0): connect failed: ENETUNREACH (Network is unreachable) at libcore.io.IoBridge.connect(IoBridge.java:138) W/System.err: at java.net.PlainSocketImpl.socketConnect(PlainSocketImpl.java:129) at java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:356) at java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:200) at java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:182) W/System.err: at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:356) at java.net.Socket.connect(Socket.java:616) at com.mysql.cj.protocol.StandardSocketFactory.connect(StandardSocketFactory.java:155) W/System.err: at com.mysql.cj.protocol.a.NativeSocketConnection.connect(NativeSocketConnection.java:65) ... 16 more W/System.err: Caused by: android.system.ErrnoException: connect failed: ENETUNREACH (Network is unreachable) at libcore.io.Linux.connect(Native Method) W/System.err: at libcore.io.BlockGuardOs.connect(BlockGuardOs.java:126) at libcore.io.IoBridge.connectErrno(IoBridge.java:152) at libcore.io.IoBridge.connect(IoBridge.java:130) ... 24 more
該当のソースコード
package com.example.test1; import androidx.appcompat.app.AppCompatActivity; import android.app.Activity; import android.os.AsyncTask; import android.view.View; import android.os.Bundle; import android.widget.*; import android.widget.Spinner; import java.sql.Connection; import java.sql.ResultSet; import java.sql.SQLDataException; import java.sql.Statement; import java.sql.DriverManager; import android.widget.TextView; import java.sql.*; import android.os.AsyncTask; public class check extends AppCompatActivity { /** * Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.check); /** Spinnerオブジェクトを取得**/ Spinner spinner1 = (Spinner) findViewById(R.id.spinner1); TextView textView4 = (TextView) findViewById(R.id.textView4); String[] labels = getResources().getStringArray(R.array.spinner_items); ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, android.R.layout.simple_spinner_item, labels); spinner1.setAdapter(adapter); adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); /** 選択されているアイテムのIndexを取得*/ //int idx = spinner.getSelectedItemPosition(); /**選択されているアイテムを取得*/ String item = (String) spinner1.getSelectedItem(); textView4.setText(item); } public void onButton1(View view) { Spinner spinner1 = (Spinner) findViewById(R.id.spinner1); TextView textView4 = (TextView) findViewById(R.id.textView4); String str = spinner1.getSelectedItem().toString(); textView4.setText(str); try{ Class.forName("android.os.AsyncTask"); }catch(ClassNotFoundException e){} DbConnect task = new DbConnect(check.this); task.execute(); } public String roomGet() { //部屋番号取得 Spinner spinner1 = (Spinner) findViewById(R.id.spinner1); String room = spinner1.getSelectedItem().toString(); return room; } class DbConnect extends AsyncTask<Void, Void, String>{ //データベース参照・データ引用 Activity activity = null; public DbConnect(Activity act) { activity = act; } String driverName = "com.mysql.cj.jdbc.Driver"; //ドライバへのパス String jdbcUrl = "jdbc:mysql://10.0.2.2:3306/students?useUnicode=true&useJDBCCompliantTimezoneShift=true&useLegacyDatetimeCode=false&serverTimezone=UTC";//jdbcのurl String userId = "admin"; //dbのユーザー名 String userPass = "root"; //ユーザーのパスワード Connection con = null; Statement stmt = null; ResultSet rs = null; @Override protected String doInBackground(Void... params) { String text1 = ""; String room_id = roomGet(); System.out.println(room_id); int i = 0; //System.out.println("aaaa"); try { // JDBCドライバのロード - JDBC4.0(JDK1.6)以降は不 try { Class.forName(driverName); System.out.println("JDBCドライバロード完了"); } catch (ClassNotFoundException e) { e.printStackTrace(); //System.out.println("bbb"); } //MYSQLに接続 con = DriverManager.getConnection(jdbcUrl, userId , userPass); System.out.println("MySQLに接続できました。"); stmt = con.createStatement(); //String sql ="Select * from items WHERE item_room = '" +room_id +"'"; String sql = "Select * from items WHERE item_room = 'T001'"; rs = stmt.executeQuery(sql); while (rs.next()) { int id = rs.getInt(1); String item_name = rs.getString(3); String time = rs.getString(5); text1 += id + " " + item_name + " " + time + " " + "\r\n"; } rs.close(); stmt.close(); con.close(); } catch (SQLException e) { text1 = e.getMessage(); e.printStackTrace(); System.out.println("MySQLに接続できませんでした。"); } return text1; } protected void onPostExecute(String result) { TextView tv = (TextView) activity.findViewById(R.id.textView10); tv.setText(result); } } //データベース参照・データ引用 終わり }
補足情報
AndroidStudio3.5
JDK1.8.0.241 , API29
Mysql8.0
Connector/J 8.0.18
回答1件
あなたの回答
tips
プレビュー