【问题标题】:Connecting Android to SQL Server using JDBC使用 JDBC 将 Android 连接到 SQL Server
【发布时间】:2012-12-04 23:38:12
【问题描述】:

我目前正在为 Android 制作一个应用程序,它应该将其数据同步到 MSSQL Server 2008。我目前正在测试使其工作的方法,因为我以前从未这样做过。我应该提一下,只要设备连接到 USB 端口而不是通过 WiFi,它就会同步,因为公司不想在网络上注册设备。

到目前为止,这就是我将 Java 连接到 SQL Server 的方法。这是一个简单的Select代码(我目前正在使用SQLExpress进行测试):

  String connectionUrl = "jdbc:sqlserver://127.0.0.1:1433;" +
             "databaseName=Android;integratedSecurity=true;";

  // Declare the JDBC objects.
  Connection con = null;
  Statement stmt = null;
  ResultSet rs = null;

  try {
     // Establish the connection.
     Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
     con = DriverManager.getConnection(connectionUrl);

     // Create and execute an SQL statement that returns some data.
     String SQL = "SELECT * FROM AndroidTest;";
     stmt = con.createStatement();
     rs = stmt.executeQuery(SQL);

     // Iterate through the data in the result set and display it.
     while (rs.next()) {
        System.out.println(rs.getString(1) + " " + rs.getString(2));
     }
  }

  // Handle any errors that may have occurred.
  catch (Exception e) {
     e.printStackTrace();
  }
  finally {
     if (rs != null) try { rs.close(); } catch(Exception e) {}
     if (stmt != null) try { stmt.close(); } catch(Exception e) {}
     if (con != null) try { con.close(); } catch(Exception e) {}
  }

现在,我在 Android 中尝试了同样的事情,结果如下:

package com.example.testsqlserver;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.Statement;

import android.app.Activity;
import android.os.Bundle;
import android.util.Log;
import android.view.Menu;
import android.view.View;
import android.widget.EditText;

public class MainActivity extends Activity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.activity_main, menu);
        return true;
    }

    public void clickSend(View view) {
        (new Thread(new TestThread())).start();
    }
    public class TestThread extends Thread {
      public void run() {
          String connectionUrl = "jdbc:sqlserver://127.0.0.1:1433;" +
                     "databaseName=Android;integratedSecurity=true;";

          // Declare the JDBC objects.
          Connection con = null;
          Statement stmt = null;

          try {
             // Establish the connection.
             Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
             con = DriverManager.getConnection(connectionUrl);

             //Get information from EditText
             EditText txtTest = (EditText)findViewById(R.id.txtTest);
             EditText txtName = (EditText)findViewById(R.id.txtName);
             String test = txtTest.getText().toString();
             String name = txtName.getText().toString();

             // Create and execute an SQL statement that returns some data.
             String SQL = "INSERT INTO AndroidTest VALUES('" + test + "', '" + name + "');";
             stmt = con.createStatement();
             stmt.executeUpdate(SQL);
             Log.e("Success", "Success");
          }

          // Handle any errors that may have occurred.
          catch (Exception e) {
             e.printStackTrace();
              Log.e("Error", e.toString());
          }
          finally {
             if (stmt != null) try { stmt.close(); } catch(Exception e) {}
             if (con != null) try { con.close(); } catch(Exception e) {}
          }
      }

      public void main(String args[]) {
          (new TestThread()).start();
      }
    }
}

在第一个示例中它运行良好,但在第二个示例中它给了我这个错误:

12-17 20:15:12.589:E/错误(1668): com.microsoft.sqlserver.jdbc.SQLServerException:TCP/IP 连接 到主机 127.0.0.1,端口 1433 失败。错误:“连接失败 403 毫秒后到 /127.0.0.1(端口 1433):isConnected 失败: ECONNREFUSED(连接被拒绝)。验证连接属性, 检查 SQL Server 实例是否正在主机上运行,​​并且 在端口接受 TCP/IP 连接,并且没有防火墙 阻止与端口的 TCP 连接。”。

我第一次运行第一个代码时遇到了这个错误,我只需要在 SQL Server 设置中启用端口 1433。不过,我不明白,为什么它不能在第二张桌子上工作。这是相同的代码,唯一的区别是它是通过按下按钮来执行的,并且我让它在单独的线程上运行。

任何帮助将不胜感激,谢谢。

【问题讨论】:

    标签: java android sql-server jdbc


    【解决方案1】:

    请参阅Emulator Netorking 上的此部分。

    您需要使用 10.0.2.2,它允许您从模拟器与开发机器 127.0.0.1 地址进行通信。

    您可能还需要进行一些端口重定向(请参阅该文档中的进一步内容)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-07-05
      • 2014-12-01
      • 2015-09-27
      • 2014-01-02
      • 2014-03-03
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多