这是我的所有代码。我正在尝试连接到我的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());
}
}
}
答案 0 :(得分:0)
这是一个非常糟糕的主意。您不应该通过网络通过电话连接到数据库。首先,它需要您的数据库可公开寻址,这是一个安全风险。其次,这意味着您的db密码位于客户端上,并且您无法实际控制它们。您的应用程序将进行逆向工程,他们将获得您的密码,然后您的数据就会被搞砸。您应始终从使用Web服务无法控制的任何硬件中抽象访问数据库。然后密码永远不会离开你的机器,攻击者可以做的伤害是有限的。
第三,这个代码无论如何都不会工作,你不能在UI线程上做网络IO。这可能就是为什么conn返回null。但是把它作为宇宙的标志,告诉你以正确的方式解决问题,而不仅仅是改变线程。