Java ANDROID数据库-网络错误IOException
您好,我是android的初学者。我想在我的电脑上建立一个到mssql服务器的数据库连接。我在网上找到了一个例子。 我想我的ip连接或端口有问题。我猜语法是错的。 我得到这个日志: 网络错误IOException:无法从/:(端口55062)连接到/127.0.0.1(端口1433):连接失败:ECONREFUSE(连接被拒绝) 这是我的MainActivity.javaJava 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
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;
}
}