AndroidStudioでDB接続
javaでConnecor/Jを用いてデータベースからデータを引用するプログラムを作っているのですが,エラーをはいて接続できません。初心者なので分かりやすく教えていただけたらありがたいです.
発生している問題・エラーメッセージ
E/AndroidRuntime: FATAL EXCEPTION: AsyncTask #1 Process: com.example.test1, PID: 16434 java.lang.RuntimeException: An error occurred while executing doInBackground() at android.os.AsyncTask$4.done(AsyncTask.java:399) at java.util.concurrent.FutureTask.finishCompletion(FutureTask.java:383) at java.util.concurrent.FutureTask.setException(FutureTask.java:252) at java.util.concurrent.FutureTask.run(FutureTask.java:271) at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:289) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1167) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:641) at java.lang.Thread.run(Thread.java:919) Caused by: java.lang.NoClassDefFoundError: Failed resolution of: Ljava/sql/SQLType; at com.mysql.cj.jdbc.DatabaseMetaData.getInstance(DatabaseMetaData.java:731) at com.mysql.cj.jdbc.ConnectionImpl.getMetaData(ConnectionImpl.java:1170) at com.mysql.cj.jdbc.ConnectionImpl.<init>(ConnectionImpl.java:447) at com.mysql.cj.jdbc.ConnectionImpl.getInstance(ConnectionImpl.java:246) at com.mysql.cj.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:199) at java.sql.DriverManager.getConnection(DriverManager.java:580) at java.sql.DriverManager.getConnection(DriverManager.java:218) at com.example.test1.check$DbConnect.doInBackground(check.java:100) at com.example.test1.check$DbConnect.doInBackground(check.java:67) at android.os.AsyncTask$3.call(AsyncTask.java:378) at java.util.concurrent.FutureTask.run(FutureTask.java:266) at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:289) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1167) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:641) at java.lang.Thread.run(Thread.java:919) Caused by: java.lang.ClassNotFoundException: Didn't find class "java.sql.SQLType" on path: DexPathList[[zip file "/data/app/com.example.test1-8ti2a_qLeM0Rxsjx6h9FCA==/base.apk"],nativeLibraryDirectories=[/data/app/com.example.test1-8ti2a_qLeM0Rxsjx6h9FCA==/lib/x86, /system/lib, /system/product/lib]] at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:196) at java.lang.ClassLoader.loadClass(ClassLoader.java:379) at java.lang.ClassLoader.loadClass(ClassLoader.java:312) at com.mysql.cj.jdbc.DatabaseMetaData.getInstance(DatabaseMetaData.java:731) at com.mysql.cj.jdbc.ConnectionImpl.getMetaData(ConnectionImpl.java:1170) at com.mysql.cj.jdbc.ConnectionImpl.<init>(ConnectionImpl.java:447) at com.mysql.cj.jdbc.ConnectionImpl.getInstance(ConnectionImpl.java:246) at com.mysql.cj.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:199) at java.sql.DriverManager.getConnection(DriverManager.java:580) at java.sql.DriverManager.getConnection(DriverManager.java:218) at com.example.test1.check$DbConnect.doInBackground(check.java:100) at com.example.test1.check$DbConnect.doInBackground(check.java:67) at android.os.AsyncTask$3.call(AsyncTask.java:378) at java.util.concurrent.FutureTask.run(FutureTask.java:266) at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:289) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1167) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:641) at java.lang.Thread.run(Thread.java:919)
該当のソースコード
[check.java] 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); } } //データベース参照・データ引用 終わり }
試したこと
AndroidManifest.xmlに
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.INTERNET" />
を追記
補足情報(FW/ツールのバージョンなど)
環境
MYSQL8.0
Connector/J 8.0.18
Androidstudio3.5 , JDK1.8.0.241 , API29
windows10
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/01/24 18:42
退会済みユーザー
2020/01/25 01:40
2020/01/25 05:33
2020/01/25 07:46