[英]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.