Android+mysql:Connection类返回空对象
我正在尝试将我的android登录应用程序连接到XAMP服务器。Apache正在本地计算机上通过jtds jdbc运行。代码似乎无法连接服务器。代码如下: ConnectionClass.javaAndroid+mysql:Connection类返回空对象,android,mysql,jdbc,jtds,Android,Mysql,Jdbc,Jtds,我正在尝试将我的android登录应用程序连接到XAMP服务器。Apache正在本地计算机上通过jtds jdbc运行。代码似乎无法连接服务器。代码如下: ConnectionClass.java package com.ercess.databaseconnection; import android.annotation.SuppressLint; import android.os.StrictMode; import android.os.Bundle; import android.
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时,此消息才会触发。
如何解决?Android不支持MySQL或SQL Server:- 您可以使用Sqllite 或者您可以通过PHP访问MySQL:-
我也面临同样的问题。。。 主要的问题在于你的连接类
String url = "jdbc:mysql://localhost/events-test";
public String un = "root";
public String password = "password";
public String db = "users";
这是您的代码,当您使用root和localhost时,它会导致检查internet连接问题。因此,要解决这个问题,您必须创建一个新用户,并使用internet的IP地址,而不是localhost
若要创建新用户,如果您使用的是phpmyadmin,请单击“权限”选项卡,在那里可以看到“添加用户”选项。在那里创建用户,将所有数据库权限授予该用户并保存它。然后使用用户名和密码,而不是root和密码
现在要获取IP地址,请转到命令提示符,键入ipconfig,您将找到IP地址。在上面的代码中,输入您的ip地址,而不是localhost,例如
字符串url=jdbc:mysql://192.168.0.12/events-test;
您必须在AndroidManifest.xml中提供internet访问权限
<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
这应该可以解决您的问题。jdbc:jtds:sqlserver://MSSQL server不是mysql吗?我也不认为您的SmartPhone上安装了sqlserver/mysql。您不应该从Android创建jdbc连接。使用rest服务或其他web服务在Android应用程序和数据库之间进行调解。@Jens我正在使用emulator。不是我的手机。@Debbie emulator也是一个没有安装dbms的自有设备android无法连接到MySQL服务器,但大量android应用程序正在成功使用MySQL数据库。我正在使用XAMPP,它在Apache服务器上运行MySQL数据库。