これは、 AndroidからMySQLへの接続を行う好ましい方法ではありませんが、私はそれが実行可能であることを知っています。AndroidスタジオアプリケーションがJDBCを使用してMySQLに接続する際の問題点を教えてください。
私はこの問題をDaysに取り組んで、新しい方法を研究し、適用してきました。私は接続することができなかった以外は接続に近づいてしまった。エラーが消えてまだ説明できないエラーが発生するまで、私はさまざまなバージョンのJDBCコネクタを使用しました。私はこれを見て、それをあきらめるのではなく働かせたいと思っています。私はいくつかの提案を私の代わりに同じ場所でループするかもしれないと思った。
以下のファイルからわかるように、この単純なプログラムは、ボタンがクリックされたときにMySqlテーブルに情報を追加するだけです。接続が確立されている場合は、println
ステートメントを追加して接続が確立されたが、その行は印刷されないことを伝えます。 :
UPDATE:が手に入れたこのMySQLの例外:
com.mysql.jdbc.exceptions.MySQLNonTransientConnectionException: Server connection failure during transaction. Due to underlying exception: 'java.net.SocketException: android.os.NetworkOnMainThreadException'.
activity_main.xml:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context="com.example.aero.myapplication.MainActivity">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Hello World!" />
<Button
style="?android:attr/buttonStyleSmall"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="New Button"
android:id="@+id/b"
android:layout_centerVertical="true"
android:layout_centerHorizontal="true" />
</RelativeLayout>
MainActivity.java:
package com.example.aero.myapplication;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
import android.view.View;
import com.mysql.jdbc.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Button auth = (Button)findViewById(R.id.b);
auth.setOnClickListener(
new Button.OnClickListener(){
public void onClick(View v){
String username="root";
String pass ="pass";
String conn_str="jdbc:mysql://192.168.0.10:3306/JAVA?autoReconnect=true&useSSL=false";
Connection conn=null;
try{
Class.forName("com.mysql.jdbc.Driver");
conn =(Connection) DriverManager.getConnection(conn_str,username,pass);
System.out.println("ESTABLISHED CONNEC");
Statement s = conn.createStatement();
String fname = "romeo";
String Lname="alpha";
String id ="meincode2";
String u = "USE JAVA;";
s.executeUpdate(u);
String insert = "INSERT INTO JAVA.users(Firstname,Lastname,ID) VALUES ('"+fname+"','"+Lname+"','"+id+"')";
s.executeUpdate(insert);
System.out.println("DONE !!!");
}catch (SQLException e){
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
}
}
);
}
}
アプリケーション:
apply plugin: 'com.android.application'
android {
compileSdkVersion 24
buildToolsVersion "24.0.1"
defaultConfig {
applicationId "com.example.aero.myapplication"
minSdkVersion 15
targetSdkVersion 24
versionCode 1
versionName "1.0"
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
}
dependencies {
compile fileTree(include: ['*.jar'], dir: 'libs')
testCompile 'junit:junit:4.12'
compile 'com.android.support:appcompat-v7:24.1.1'
//compile files('libs/mysql-connector-java-2.0.14-bin.jar')
//compile files('libs/mysql-connector-java-5.1.38-bin.jar')
compile files('libs/mysql-connector-java-5.0.8-bin.jar')
}
のAndroidManifest.xml:
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.aero.myapplication">
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:supportsRtl="true"
android:theme="@style/AppTheme">
<activity android:name=".MainActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
</manifest>
が例外で更新 'キャッチ(のSQLException E){ }' –
@Scaryウォンバット、スローされた例外をプリントアウトしてみてください – aero