Java ANDROID数据库-网络错误IOException

Java ANDROID数据库-网络错误IOException,java,android,sql-server,database,database-connection,Java,Android,Sql Server,Database,Database Connection,您好,我是android的初学者。我想在我的电脑上建立一个到mssql服务器的数据库连接。我在网上找到了一个例子。 我想我的ip连接或端口有问题。我猜语法是错的。 我得到这个日志: 网络错误IOException:无法从/:(端口55062)连接到/127.0.0.1(端口1433):连接失败:ECONREFUSE(连接被拒绝) 这是我的MainActivity.java public class MainActivity extends AppCompatActivity { Connect

您好,我是android的初学者。我想在我的电脑上建立一个到mssql服务器的数据库连接。我在网上找到了一个例子。 我想我的ip连接或端口有问题。我猜语法是错的。 我得到这个日志:

网络错误IOException:无法从/:(端口55062)连接到/127.0.0.1(端口1433):连接失败:ECONREFUSE(连接被拒绝)

这是我的MainActivity.java

public class MainActivity extends AppCompatActivity {

ConnectionClass connectionClass;
EditText edtuserid, edtpass;
Button btnlogin;
ProgressBar pbbar;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    connectionClass = new ConnectionClass();
    edtuserid = (EditText) findViewById(R.id.et_username);
    edtpass = (EditText) findViewById(R.id.et_password);
    btnlogin = (Button) findViewById(R.id.btn_Login);
    pbbar = (ProgressBar) findViewById(R.id.pbbar);
    pbbar.setVisibility(View.GONE);

    btnlogin.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 z = "";
    Boolean isSuccess = false;


    String userid = edtuserid.getText().toString();
    String password = edtpass.getText().toString();


    @Override
    protected void onPreExecute() {
        pbbar.setVisibility(View.VISIBLE);
    }

    @Override
    protected void onPostExecute(String r) {
        pbbar.setVisibility(View.GONE);
        Toast.makeText(MainActivity.this,r,Toast.LENGTH_SHORT).show();

        if(isSuccess) {
            Toast.makeText(MainActivity.this,r,Toast.LENGTH_SHORT).show();
        }

    }

    @Override
    protected String doInBackground(String... params) {
        if(userid.trim().equals("")|| password.trim().equals(""))
            z = "Please enter User Id and Password";
        else
        {
            try {
                Connection con = connectionClass.CONN();
                if (con == null) {
                    z = "Error in connection with SQL server";
                } else {
                    String query = "select password from User";
                    Statement stmt = con.createStatement();
                    ResultSet rs = stmt.executeQuery(query);

                    if(rs.next())
                    {

                        z = "Login successfull";
                        isSuccess=true;
                    }
                    else
                    {
                        z = "Invalid Credentials";
                        isSuccess = false;
                    }

                }
            }
            catch (Exception ex)
            {
                isSuccess = false;
                z = "Exceptions burda mi ";
            }
        }
        return z;
    }
}
}



@SuppressLint("NewApi")
public Connection CONN() {
    StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder()
            .permitAll().build();
    StrictMode.setThreadPolicy(policy);
    Connection conn = null;
    String ConnURL = null;
    try {

        Class.forName(classs).newInstance();
        ConnURL = "jdbc:jtds:sqlserver://" + ip + ";"
                + "databaseName=" + db + ";user=" + un + ";password="
                + password + ";";
        conn = DriverManager.getConnection(ConnURL);
    } catch (SQLException se) {
        Log.e("ERRO0", se.getMessage());
    } catch (ClassNotFoundException e) {
        Log.e("ERRO1", e.getMessage());
    } catch (Exception e) {
        Log.e("ERRO2", e.getMessage());
    }
    return conn;
}
}
public类MainActivity扩展了AppCompatActivity{
连接类连接类;
EditText-edtuserid,edtpass;
按钮btnlogin;
ProgressBar-pbbar;
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
connectionClass=新的connectionClass();
edtuserid=(EditText)findViewById(R.id.et_用户名);
edtpass=(EditText)findViewById(R.id.et_密码);
btnlogin=(按钮)findViewById(R.id.btn\u登录);
pbbar=(ProgressBar)findViewById(R.id.pbbar);
pbbar.setVisibility(View.GONE);
btnlogin.setOnClickListener(新视图.OnClickListener(){
@凌驾
公共void onClick(视图v){
多洛金多洛金=新多洛金();
doLogin.execute(“”);
}
});
}
公共类DoLogin扩展异步任务
{
字符串z=“”;
布尔值isSuccess=false;
字符串userid=edtuserid.getText().toString();
字符串密码=edtpass.getText().toString();
@凌驾
受保护的void onPreExecute(){
pbbar.setVisibility(View.VISIBLE);
}
@凌驾
受保护的void onPostExecute(字符串r){
pbbar.setVisibility(View.GONE);
Toast.makeText(MainActivity.this,r,Toast.LENGTH_SHORT).show();
如果(isSuccess){
Toast.makeText(MainActivity.this,r,Toast.LENGTH_SHORT).show();
}
}
@凌驾
受保护的字符串doInBackground(字符串…参数){
if(userid.trim()等于(“”)| password.trim()等于(“”)
z=“请输入用户Id和密码”;
其他的
{
试一试{
Connection con=connectionClass.CONN();
如果(con==null){
z=“与SQL server连接时出错”;
}否则{
String query=“从用户选择密码”;
语句stmt=con.createStatement();
ResultSet rs=stmt.executeQuery(查询);
如果(rs.next())
{
z=“登录成功”;
isSuccess=true;
}
其他的
{
z=“无效凭证”;
isSuccess=false;
}
}
}
捕获(例外情况除外)
{
isSuccess=false;
z=“例外情况”burda mi;
}
}
返回z;
}
}
}
@SuppressLint(“新API”)
公共连接连接{
StrictMode.ThreadPolicy policy=新建StrictMode.ThreadPolicy.Builder()
.permitAll().build();
StrictMode.setThreadPolicy(策略);
连接conn=null;
字符串ConnURL=null;
试一试{
Class.forName(classs.newInstance();
ConnURL=“jdbc:jtds:sqlserver://”+ip+;”
+“databaseName=“+db+”;user=“+un+”;密码=”
+密码+“;”;
conn=DriverManager.getConnection(ConnURL);
}捕获(SQLSE异常){
Log.e(“ERRO0”,se.getMessage());
}catch(classnotfounde异常){
Log.e(“ERRO1”,e.getMessage());
}捕获(例外e){
Log.e(“ERRO2”,e.getMessage());
}
返回连接;
}
}

我希望你能帮忙。谢谢。

您是通过模拟器还是通过您的设备执行此操作?在您的设备上,确保您使用的是wi-fi,而不是手机数据。它需要在同一个网络上。您的IP应该是10.0.2.2,而不是localhost(aka 127.0.0.1),因为Android emulator位于VM上。仿真器的本地主机是指仿真器本身,而不是实际的本地主机

但我无法从那里理解。我为什么要这样做?你不明白哪一部分?你是在模拟器上还是在你的设备上这样做的?如果是您的设备,请确保您使用的是wi-fi,而不是手机数据。它需要在同一个网络上。如果您使用的是仿真器,您的IP应该是10.0.2.2,而不是localhost(aka 127.0.0.1),因为Android仿真器位于VM上。我是通过仿真器来实现这一点的。但是我想在我的电脑中连接mssql。所以它应该是127.0.0.1?它适用于pc中的mssql服务器,不适用于phoneNah,不适用于127.0.0.1,不适用于10.0.2.2。emulator上的本地主机将指的是emulator,而不是数据库所在的实际本地主机。是的,谢谢,它工作正常。但现在我又犯了一个错误。它说“关键字User附近的语法不正确”。这听起来像是我使用[User]时为MS SQL Okey使用保留字的错误。它成功了。谢谢你的帮助。
public class MainActivity extends AppCompatActivity {

ConnectionClass connectionClass;
EditText edtuserid, edtpass;
Button btnlogin;
ProgressBar pbbar;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    connectionClass = new ConnectionClass();
    edtuserid = (EditText) findViewById(R.id.et_username);
    edtpass = (EditText) findViewById(R.id.et_password);
    btnlogin = (Button) findViewById(R.id.btn_Login);
    pbbar = (ProgressBar) findViewById(R.id.pbbar);
    pbbar.setVisibility(View.GONE);

    btnlogin.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 z = "";
    Boolean isSuccess = false;


    String userid = edtuserid.getText().toString();
    String password = edtpass.getText().toString();


    @Override
    protected void onPreExecute() {
        pbbar.setVisibility(View.VISIBLE);
    }

    @Override
    protected void onPostExecute(String r) {
        pbbar.setVisibility(View.GONE);
        Toast.makeText(MainActivity.this,r,Toast.LENGTH_SHORT).show();

        if(isSuccess) {
            Toast.makeText(MainActivity.this,r,Toast.LENGTH_SHORT).show();
        }

    }

    @Override
    protected String doInBackground(String... params) {
        if(userid.trim().equals("")|| password.trim().equals(""))
            z = "Please enter User Id and Password";
        else
        {
            try {
                Connection con = connectionClass.CONN();
                if (con == null) {
                    z = "Error in connection with SQL server";
                } else {
                    String query = "select password from User";
                    Statement stmt = con.createStatement();
                    ResultSet rs = stmt.executeQuery(query);

                    if(rs.next())
                    {

                        z = "Login successfull";
                        isSuccess=true;
                    }
                    else
                    {
                        z = "Invalid Credentials";
                        isSuccess = false;
                    }

                }
            }
            catch (Exception ex)
            {
                isSuccess = false;
                z = "Exceptions burda mi ";
            }
        }
        return z;
    }
}
}



@SuppressLint("NewApi")
public Connection CONN() {
    StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder()
            .permitAll().build();
    StrictMode.setThreadPolicy(policy);
    Connection conn = null;
    String ConnURL = null;
    try {

        Class.forName(classs).newInstance();
        ConnURL = "jdbc:jtds:sqlserver://" + ip + ";"
                + "databaseName=" + db + ";user=" + un + ";password="
                + password + ";";
        conn = DriverManager.getConnection(ConnURL);
    } catch (SQLException se) {
        Log.e("ERRO0", se.getMessage());
    } catch (ClassNotFoundException e) {
        Log.e("ERRO1", e.getMessage());
    } catch (Exception e) {
        Log.e("ERRO2", e.getMessage());
    }
    return conn;
}
}