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并采用ListView查看数据