Android:用 JDBC 连接 MySql

Posted

技术标签:

【中文标题】Android:用 JDBC 连接 MySql【英文标题】:Android: Connect MySql with JDBC 【发布时间】:2017-10-08 06:06:34 【问题描述】:

一段时间以来,我一直在努力解决一个问题。我在免费托管服务器 (fdb3.freehostingeu.com) 中安装了一个数据库。数据库是 mysql。我从here 导入了一个用于数据库连接的jar 文件。我已将其作为 gradle 中的依赖项导入,我已在 Manifest 和所有内容中设置了 Internet 权限。我正在使用 AsyncTasc 进行连接。

这是带有方法的类。

public class CheckLogin extends AsyncTask<String,String,String>

    String z = "";
    Boolean isSuccess = false;

    @Override
    protected void onPreExecute()
    
//            progressBar.setVisibility(View.VISIBLE);
    

    @Override
    protected void onPostExecute(String r)
    
//            progressBar.setVisibility(View.GONE);
        Toast.makeText(LoginActivity.this, r, Toast.LENGTH_SHORT).show();
        if(isSuccess)
        
            Toast.makeText(LoginActivity.this , "Login Successfull" , Toast.LENGTH_LONG).show();
            //finish();
        
    

    @Override
    protected String doInBackground(String... params)
    
        java.sql.Connection con;
        String usernam = params[0];
        String passwordd = params[1];
        if(usernam.trim().equals("")|| passwordd.trim().equals(""))
            z = "Please enter Username and Password";
        else
        
            try
            
                con = connectionclass(); 

                if (con == null)
                
                    z = "Check Your Internet Access!";
                
                else
                
                    // Change below query according to your own database.
                    String query = "select * from owner where mail = '" + usernam.toString() + "' and password = '"+ passwordd.toString() +"'  ";
                    Statement stmt = con.createStatement();
                    ResultSet rs = stmt.executeQuery(query);
                    if(rs.next())
                    
                        z = "Login successful";
                        isSuccess=true;
                        con.close();
                    
                    else
                    
                        z = "Invalid Credentials!";
                        isSuccess = false;
                    
                
            
            catch (Exception ex)
            
                isSuccess = false;
                z = ex.getMessage();
            
        
        return z;
    



@SuppressLint("NewApi")
public java.sql.Connection connectionclass()

    StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder().permitAll().build();
    StrictMode.setThreadPolicy(policy);
    java.sql.Connection connection = null;
    String ConnectionURL = null;
    try
    
          Class.forName("com.mysql.jdbc.Driver");

          connection = DriverManager.getConnection(url, un, pas);

    
    catch (SQLException se)
    
        Log.e("error here 1 : ", se.getMessage());
    
    catch (ClassNotFoundException e)
    
        Log.e("error here 2 : ", e.getMessage());
    
    catch (Exception e)
    
        Log.e("error here 3 : ", e.getMessage());
    
    return connection;

我已将网址设置为

jdbc:mysql://185.176.43.41:3306/DB_name

正如网站所说,服务器IP在哪里,端口是3306。 还有我用来连接数据库的用户名和密码。

我不认为我用错了什么,但是当我调试我的应用程序时,我仍然得到一个异常:

java.sql.SQLException:由于异常,无法连接到任何主机:java.net.SocketException:java.net.ConnectException:失败 连接到 /185.176.43.41(端口 3306):连接失败:ECONNREFUSED (连接被拒绝)

** 开始嵌套异常 **

java.net.SocketException MESSAGE: java.net.ConnectException: 失败 连接到 /185.176.43.41(端口 3306):连接失败:ECONNREFUSED (连接被拒绝)

堆栈跟踪:

java.net.SocketException: java.net.ConnectException: 连接失败 到 /185.176.43.41(端口 3306):连接失败:ECONNREFUSED (连接被拒绝)在 com.mysql.jdbc.StandardSocketFactory.connect(StandardSocketFactory.java:143) 在 com.mysql.jdbc.MysqlIO.(MysqlIO.java:225) 在 com.mysql.jdbc.Connection.createNewIO(Connection.java:1805) 在 com.mysql.jdbc.Connection.(Connection.java:452) 在 com.mysql.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:411) 在 java.sql.DriverManager.getConnection(DriverManager.java:179) 在 java.sql.DriverManager.getConnection(DriverManager.java:213) 在 com.example.hotelreseration.LoginActivity.connectionclass(LoginActivity.java:234) 在 com.example.hotelreseration.LoginActivity$CheckLogin.doInBackground(LoginActivity.java:184) 在 com.example.hotelreseration.LoginActivity$CheckLogin.doInBackground(LoginActivity.java:149) 在 android.os.AsyncTask$2.call(AsyncTask.java:307) 在 java.util.concurrent.FutureTask.run(FutureTask.java:237) 在 android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:246) 在 java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1113) 在 java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:588) 在 java.lang.Thread.run(Thread.java:833)

** 结束嵌套异常 **

java.sql.Connection connection 为空,不使用 (url, un, pas)

我已经尝试了 2 天了,我已经尝试了所有方法。我对 SQL 数据库一无所知,我无法区分 MySql 和 MSSql,并继续尝试使用 jtds 与该主机建立连接,直到我了解我的数据库是 MySql。

如果有人可以在这里帮助我,这台主机提供了一个MySql DB,对吗?

我可以使用它来存储数据库并通过 JDBC 在我的 Android 应用上检索数据吗?

我尝试的方式是否正确?

【问题讨论】:

请阅读:***.com/questions/15853367/… 【参考方案1】:

您的数据库 url jdbc:mysql://185.176.43.41:3306/DB_name 一定有部分错误,要么 DB_name 不是名称,要么 185.176.43.41:3306 不是正确的主机。首先尝试使用localhost,在本地尝试,确保它有效,将您的url更改为另一个。

【讨论】:

DB_name 只是一个例子,我的真实数据库名称是正确的。所以问题是我错过了 URL 的某些内容?代码正常吗?我问是因为我不知道该把重点放在哪里。谢谢 如果你配置你的mysql,你开始配置的一个想法是端口3306的本地主机。如果你是新手,你可以使用mysql workbench之类的工具,它会帮助你很多,然后你可以创建一个本地实例 localhost:3306,启动你的 mysql 服务,然后运行你的应用程序(当然要更改地址和端口) 所以 3306 端口是本地主机的? 是的,当然!我一直很乐意提供帮助:)。您的问题非常有效且正确,不用担心您的方向是正确的

以上是关于Android:用 JDBC 连接 MySql的主要内容,如果未能解决你的问题,请参考以下文章

在Android中使用JDBC MySQL连接数据库?

Android + jdbc连接云服务器的MySQL并采用ListView查看数据

Android中的JDBC连接

Android 无法直接连接 Postgres 数据库,也无法使用 JDBC 连接

Android上的Postgresql JDBC连接错误

使用 JDBC 将 android 与数据库连接