【问题标题】:Android+mysql : Connection class returns a Null objectAndroid+mysql : Connection 类返回一个 Null 对象
【发布时间】:2019-01-29 18:38:53
【问题描述】:

我正在尝试通过 jtds jdbc 将我的 android 登录应用程序连接到 XAMP 服务器(Apache 在本地机器上运行)。似乎代码无法连接服务器。代码如下:

ConnectionClass.java

package com.ercess.databaseconnection;

import android.annotation.SuppressLint;
import android.os.StrictMode;
import android.os.Bundle;
import android.util.Log;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;

public class ConnectionClass {

    public String driver = "net.sourceforge.jtds.jdbc.Driver";

    String url = "jdbc:mysql://localhost/events-test";
    //String url = "jdbc:mysql://127.0.0.1/events-test";
    public String un = "root";
    public String password = "password";
    public String db = "users";

    @SuppressLint("NewApi")
    public Connection CONN() {
        StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder().permitAll().build();
        StrictMode.setThreadPolicy(policy);
        java.sql.Connection conn = null;
        String ConnURL = null;
        try{
            Class.forName(driver);
            ConnURL = "jdbc:jtds:sqlserver://" + "127.0.0.1" +";databaseName="+ db + ";user=" + un+ ";password=" + password + ";";

            conn = DriverManager.getConnection(ConnURL);



        }catch (SQLException se){
            Log.e("ERROR", se.getMessage());
        }catch (ClassNotFoundException e){
            Log.e("ERROR", e.getMessage());
        }catch(Exception e){
            Log.e("ERROR", e.getMessage());
        }
        //Log.d("conn",conn.toString());
        return conn;
    }
}

MainActivity.java

    package com.ercess.databaseconnection;

    import android.app.ProgressDialog;
    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.EditText;
    import android.widget.Toast;
    import java.sql.Connection;
    import java.sql.Statement;
    import java.sql.ResultSet;
    public class MainActivity extends AppCompatActivity {
        EditText email, password;
        Button login;
        ProgressDialog progressDialog;
        ConnectionClass connectionClass;
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
            email = findViewById(R.id.email);
            password = findViewById(R.id.password);
            login = findViewById(R.id.login);
            connectionClass = new ConnectionClass();
            progressDialog = new ProgressDialog(this);
            login.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    Dologin dologin = new Dologin();
                    dologin.execute();
                }
            });
        }
        public class Dologin extends AsyncTask<String, String, String>{
            String emailstring = email.getText().toString();
            String passstring = password.getText().toString();
            String z = "";
            boolean isSuccess = false;
            String em, pass;
            @Override
            protected void onPreExecute() {
                progressDialog.setMessage("Loading...");
                progressDialog.show();
                super.onPreExecute();
            }
            protected String doInBackground(String... params){
                if(emailstring.trim().equals("") || passstring.trim().equals(""))
                    z = "Please enter all fields........";
                else
                {
                    try{
                        Connection con = connectionClass.CONN();
                        if(con == null){
                            z="Please, check your internet connection....";
                        }else{
                            String query = "select * from users where user='"+emailstring+"'and password='"+passstring+"'";
                            Statement stmt = con.createStatement();
                            ResultSet rs = stmt.executeQuery(query);
                            while(rs.next())
                            {
                                em = rs.getString(0);

                                pass = rs.getString(1);

                                if(em.equals(emailstring) && pass.equals(passstring))
                                {
                                    isSuccess = true;
                                    z = "Login successful...";
                                }
                                else isSuccess = false;
                            }
                        }
                    }
                    catch (Exception ex)
                    {
                        isSuccess = false;
                        z = "Exceptions"+ex;
                    }
                }
                return z;
            }
            @Override
            protected void onPostExecute (String s){
                Toast.makeText(getBaseContext(),""+z, Toast.LENGTH_LONG).show();
                progressDialog.hide();
            }
        }
}  

我得到这个输出:“请检查你的互联网连接......”。

仅当 con = null 时才会触发此消息。 如何解决?

【问题讨论】:

  • jdbc:jtds:sqlserver:// 是(MS)SQL-server 不是 mysql
  • 另外我认为你的智能手机上没有安装 sqlserver/mysql
  • 您不应该从 Android 创建 JDBC 连接。使用休息服务(或其他网络服务)在您的 Android 应用程序和数据库之间进行调解。
  • @Jens 我正在使用模拟器。不是我的手机。
  • @Debbie 模拟器也是自己的设备,没有安装dbms

标签: android mysql jdbc jtds


【解决方案1】:

Android 不支持 MySQL 或 SQL Server:- 您可以使用 Sqlite https://www.tutorialspoint.com/android/android_sqlite_database.htm 或者您可以通过 PHP 访问 MySQL :- https://www.tutorialspoint.com/android/android_php_mysql.htm

【讨论】:

  • Android 无法连接到 MySQL 服务器,但许多 Android 应用程序正在成功使用 MySQL 数据库。我正在使用在 Apache 服务器上运行 MySQL 数据库的 XAMPP。
【解决方案2】:

我遇到了同样的问题... 主要问题出在您的 ConnectionClass 中。

String url = "jdbc:mysql://localhost/events-test";
    public String un = "root";
    public String password = "password";
    public String db = "users";

这是您的代码,好吧,当您使用 root 和 localhost 时,它正在创建检查您的互联网连接问题。所以要解决它,你必须创建一个新用户,而不是 localhost,使用你互联网的 IP 地址。

  1. 要创建新用户,如果您使用的是 phpmyadmin,请单击权限选项卡,您会看到添加用户选项。在那里创建用户,将所有数据库权限授予该用户并保存。然后用用户名和密码代替“root”和“password”。

  2. 现在要获取您的 IP 地址,请转到命令提示符,键入 ipconfig,您将找到 IP 地址。在上面的代码中,输入您的 ip 地址,而不是 localhost,例如,

    String url = "jdbc:mysql://192.168.0.12/events-test";

  3. 您必须在 AndroidManifest.xml 中提供互联网访问权限

    <uses-permission android:name="android.permission.INTERNET"/>
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
    

这应该可以解决您的问题。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-06-03
    • 1970-01-01
    • 2017-10-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-07-27
    • 2015-10-05
    相关资源
    最近更新 更多