【问题标题】:What's the trouble with Android Studio App connecting to MySQL using JDBC?Android Studio App 使用 JDBC 连接 MySQL 有什么问题?
【发布时间】:2016-12-29 17:08:53
【问题描述】:

我了解这不是从 Android 到 MySQL,但我知道这是可行的。

我几天来一直在研究这个问题,研究和应用新方法。我离建立联系太近了,但我无法建立联系。我使用了不同版本的 JDBC 连接器,直到错误消失,但仍然出现一些无法解释的错误。我希望看到这一点并让它发挥作用而不是放弃它。我想有些人可能会给我一些建议,而不是让我在同一个地方循环。

正如您在下面的文件中看到的,这个简单的程序应该做的就是在单击按钮时向 MySql 表添加信息。如果建立了连接,我添加了一个println 语句来告诉我连接已建立但该行不打印。 :

更新:得到这个 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>

【问题讨论】:

  • 首先尝试打印出抛出的异常catch (SQLException e){ }
  • @Scary Wombat ,已更新异常

标签: java android mysql android-studio jdbc


【解决方案1】:

在@Scary Wombat 的帮助下,我的问题在其他地方得到了解答。

回答:Caused by: android.os.NetworkOnMainThreadException

【讨论】:

    猜你喜欢
    • 2018-08-19
    • 2011-06-11
    • 2019-01-18
    • 2012-12-24
    • 2023-03-11
    • 1970-01-01
    • 2015-07-17
    • 2017-10-08
    相关资源
    最近更新 更多