簡體   English   中英

無法讓 Android Studio 連接到 MySQL 數據庫

[英]Cannot get Android Studio to connect to a MySQL database

我無法讓我的 Android 應用程序(基本只是教程風格的應用程序)連接到我的 MySQL 數據庫。 I can get a basic IntelliJ IDEA program with essentially the same code to connect and display a list of names, but my android app just throws com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: Communications link failure .

當我查看 MySQL Workbench 中的服務器日志時,結果是Access denied for user '(myname)'@'localhost' (using password: NO)

奇怪的是,當我在 IntelliJ 上使用 java 程序連接后檢查日志時,日志顯示相同的內容,幾次重新連接嘗試,然后Aborted connection 458 to db: 'mydb' user: 'root' host: 'localhost' (Got an error reading communication packets) ,然后是相同的Access denied...消息,但名稱會打印到 IntelliJ 應用程序中的終端。

我在我正在使用的 Mac 帳戶上創建了我的用戶名用戶,但沒有什么真正重要的。 相同的消息。 知道我應該在哪里 go 嗎?

這是 Android 工作室代碼:

package com.addydevelopments.sqlllllll;

import android.os.AsyncTask;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;

public class MainActivity extends AppCompatActivity {

    TextView text, errorText;
    Button show;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        text = (TextView) findViewById(R.id.textView2);
        errorText = (TextView) findViewById(R.id.textView3);
        show = (Button) findViewById(R.id.button);

        show.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                new Task().execute();
            }
        });
    }

    public class Task extends AsyncTask<Void, Void, Void> {
        String records="", error="";
        String url = "jdbc:mysql://127.0.0.1:3306/mydb?useUnicode=true&characterEncoding=UTF-8&zeroDateTimeBehavior=convertToNull&serverTimezone=GMT";
        String user = "root";
        String password = "student";


        @Override
        protected Void doInBackground(Void... voids) {
            try{
                Class.forName("com.mysql.jdbc.Driver").newInstance();
            } catch (IllegalAccessException e) {
                e.printStackTrace();
            } catch (InstantiationException e) {
                e.printStackTrace();
            } catch (ClassNotFoundException e) {
                e.printStackTrace();
            }
            try{
                Connection conn = DriverManager.getConnection(url, user, password);
                Statement stat = conn.createStatement();
                String sql = "SELECT * from mydb.fruit";
                ResultSet rs = stat.executeQuery(sql);

                while(rs.next()){
                    records += rs.getString("name") + "/n";

                }

            }
            catch(Exception e){
                error = e.toString();
            }
            return null;
        }

        @Override
        protected void onPostExecute(Void aVoid) {
            text.setText(records);

            if(error != ""){
                errorText.setText(error);
            }
            super.onPostExecute(aVoid);
        }
    }

}

這是 IntelliJ IDEA 版本:

package com.addydevelopments.Dahls;

import java.sql.*;

public class Main {

    public static void main(String[] args) {
        String url = "jdbc:mysql://127.0.0.1:3306/mydb?useUnicode=true&characterEncoding=UTF-8&zeroDateTimeBehavior=CONVERT_TO_NULL&serverTimezone=GMT";

        String user = "root";
        String password = "student";
        try{
            Class.forName("com.mysql.jdbc.Driver").newInstance();
        } catch (IllegalAccessException e) {
            e.printStackTrace();
        } catch (InstantiationException e) {
            e.printStackTrace();
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        }
        try {

            Connection myConn = DriverManager.getConnection(url, user, password);
            Statement myState = myConn.createStatement();
            String sql = "SELECT * from mydb.fruit";
            ResultSet rs = myState.executeQuery(sql);

            while (rs.next()){
                System.out.println(rs.getString("name"));
            }
        } catch (SQLException  e) {
            e.printStackTrace();
        }
    }
}

您的代碼連接到本地 sql 服務器。 您的 Android 手機上沒有一個正在運行,而我假設您的計算機上正在運行一個。 您可以使用 httpurlconnection 與您的外部 web 服務器通信,並在服務器端使用 php/sql。 如果服務器沒有有效的 ssl 證書,請注意它可能無法正常工作。

https://developer.android.com/reference/java/net/HttpURLConnection

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM