"空"连接到SQL Server的jtds.jdbc1.3.1连接

时间:2015-05-27 00:25:07

标签: android sql-server

这是我的所有代码。我正在尝试连接到我的SQL服务器。句子中的这些内容实际上是存在的。真实的用户名和密码。但我得到Null错误捕获(未连接)。请让我知道错误的位置。

我还在清单中添加了Internet权限。 我从这篇文章中看到了 - link

  package com.eample.databasetester;

  import android.os.Bundle;
  import android.app.Activity;
  import android.util.Log;
  import android.widget.TextView;
  import java.sql.Connection;
  import java.sql.DriverManager;
  import java.sql.ResultSet;
  import java.sql.Statement;

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

      txv1=(TextView)findViewById(R.id.text_view);
      query2();
  }
  public void query2()
  {
      txv1.setText("connected");
  Log.i("Android"," MySQL Connect Example.");
  Connection conn = null;
  try {
  String driver = "net.sourceforge.jtds.jdbc.Driver";
  Class.forName(driver).newInstance();
  String connString = "jdbc:jtds:sqlserver://50.62.209.49:3306/test;encrypt=fasle;user=XXXX;password=YYYY;instance=SQLEXPRESS;";
  String username = "XXXX";
  String password = "YYYY";
  conn = DriverManager.getConnection(connString,username,password);
  Log.w("Connection","open");
  Statement stmt = conn.createStatement();
  ResultSet reset = stmt.executeQuery("select * from test");


  while(reset.next()){
      txv1.setText("Data:"+reset.getString(3));

  }
  conn.close();

  } catch (Exception e)
  {
      txv1.setText("Error connection" + e.getMessage());
  }
  }

}

1 个答案:

答案 0 :(得分:0)

这是一个非常糟糕的主意。您不应该通过网络通过电话连接到数据库。首先,它需要您的数据库可公开寻址,这是一个安全风险。其次,这意味着您的db密码位于客户端上,并且您无法实际控制它们。您的应用程序将进行逆向工程,他们将获得您的密码,然后您的数据就会被搞砸。您应始终从使用Web服务无法控制的任何硬件中抽象访问数据库。然后密码永远不会离开你的机器,攻击者可以做的伤害是有限的。

第三,这个代码无论如何都不会工作,你不能在UI线程上做网络IO。这可能就是为什么conn返回null。但是把它作为宇宙的标志,告诉你以正确的方式解决问题,而不仅仅是改变线程。