如何将sql server连接到android应用程序?

时间:2014-08-16 06:29:41

标签: android sql-server connection

public class MainActivity extends Activity {

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

        Button btn=(Button)findViewById(R.id.button1);

        btn.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View v) {
                // TODO Auto-generated method stub
                connection();
            }
        });

    }

    public void connection(){
        try {

            Class.forName("net.sourceforge.jtds.jdbc.Driver").newInstance();

            Connection conn=DriverManager.getConnection("jdbc:jtds:sqlserver://Asus-PC/PJH.V1;","","");
            Log.w("Connection", "Error");

            Statement stat=conn.createStatement();          
            ResultSet result=stat.executeQuery("SELECT * FROM Javher1");

            TextView tv=(TextView)findViewById(R.id.textView1);
            tv.setText(result.getString(1));
            conn.close();

        } catch (Exception e) {
            // TODO: handle exception
            Log.e("Error",e.getMessage());
            Toast.makeText(getApplicationContext(), "Error"+e.getMessage(), Toast.LENGTH_LONG).show();
        }

    }
}

我在库中添加了一个jtds1.2.7-jar文件。

代码运行我收到以下错误:

  

错误:未知服务器主机名'Asus-PC'。

如果有人知道,请帮助我!

提前致谢。

4 个答案:

答案 0 :(得分:3)

从不,永远永远直接从应用直接连接到数据库。黑客可以轻松掌握所有数据库,窃取所有数据并擦除数据库清理......!

您应该使用网络服务。您的应用只应 与服务进行通信,而不是直接与数据库进行通信...

不要盲目地遵循任何这样说的教程,这是一个非常大的安全问题。

答案 1 :(得分:0)

计算机名称('华硕PC')替换为 ip-address

您是否在模拟器中运行尝试此 10.0.2.2

这不是有效的代码,请使用Web服务访问数据库。

http://sochinda.wordpress.com/2011/05/27/connecting-to-net-web-service-from-android/

http://www.codeproject.com/Articles/304302/Calling-Asp-Net-Webservice-ASMX-From-an-Android-Ap

答案 2 :(得分:0)

<2>经过2天的努力..最后我能够通过MS SQL数据库连接我的Android应用程序..

看看它对你有帮助。

<强> 1

您要做的第一件事就是转到https://sourceforge.net/projects/jtds/链接并下载驱动程序以通过ms sql连接应用程序。  下载jtds-1.3.1-dist.zip(551.2 kB)zip文件并解压缩,找到里面的jar文件夹(jtds-1.3.1.jar)。

<强> 2

下一步是打开你的android工作室并创建一个新项目。 (空白活动)。  现在打开Root Explorer(ALT + 1)  从左上角显示android的选项卡中,从下拉列表中选择项目模块。
 您可以在顶部看到项目的名称。右键单击此按钮并添加新目录。将上面的jar文件(从dist文件夹解压缩)粘贴到文件夹中  现在将jar文件添加为项目中的模块。右键单击项目目录,然后单击选项add module。 浏览添加了jar文件的文件夹名称(在上面的步骤中),并允许gradle正确同步。
 现在是时候将这个lib作为依赖项添加到你的android studio项目中了。  为此,再次右键单击项目名称选项卡,然后移至打开模块配置(几乎是最后一个选项)。
 它会打开一个显示项目的窗口。移至app dir(左侧最后一个标签)并单击+图标
 添加依赖性 (作为一个模块)  单击它将显示刚刚创建的模块。现在加上这个。  它将自动编译并在gradle文件中添加依赖项。

第3

你差不多完成了。  只需将代码复制为主要活动。

package com.example.administrator.testsqlserver;

 import android.os.Bundle;
 import android.os.StrictMode;
 import android.support.design.widget.FloatingActionButton;
 import android.support.design.widget.Snackbar;
 import android.support.v7.app.AppCompatActivity;
 import android.support.v7.widget.Toolbar;
 import android.util.Log;
 import android.view.View;
 import android.view.Menu;
 import android.view.MenuItem;
 import android.widget.EditText;
 import android.widget.Toast;

 import java.sql.Connection;
 import java.sql.DriverManager;
 import java.sql.ResultSet;
 import java.sql.Statement;
 import net.sourceforge.jtds.jdbc.*;

 public class MainActivity extends AppCompatActivity {

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    if (android.os.Build.VERSION.SDK_INT > 9) {
        StrictMode.ThreadPolicy policy = new   StrictMode.ThreadPolicy.Builder().permitAll().build();
        StrictMode.setThreadPolicy(policy);
    }}



public void Connect(View v)
{
    EditText editText=(EditText)findViewById(R.id.editText);
    String code = editText.getText().toString();
    Log.i("Android"," MySQL Connect Example.");
    Connection conn = null;
    try {
        String driver = "net.sourceforge.jtds.jdbc.Driver";
        Class.forName(driver).newInstance();
  //test = com.microsoft.sqlserver.jdbc.SQLServerDriver.class;
        String connString = "jdbc:jtds:sqlserver://yourip :1433/your      db;encrypt=fasle;user=username;password=password;";
        String username = "your username";
        String password = "your password";
        conn = DriverManager.getConnection(connString,username,password);
        Log.w("Connection","open");
        Statement stmt = conn.createStatement();
        Toast.makeText(MainActivity.this, "This works", Toast.LENGTH_SHORT).show();
        ResultSet reset = stmt.executeQuery("SELECT NAME FROM tablename ;");

        while(reset.next()){

           String ans= reset.getString(1);
            Toast.makeText(MainActivity.this,ans,      Toast.LENGTH_SHORT).show();

        }

        conn.close();

    } catch (Exception e)
    {
        Log.w("Error connection","" + e.getMessage());
        e.printStackTrace();
    }
}

}。

答案 3 :(得分:0)

我已经这样做了,但是效率很低。 正如其他评论提到的那样,请改用Web服务,您不应该在设备上保存数据库凭据。

要使其正常工作,首先需要做两件事,

adapter = new TimeAdapter(times, this ,one);

如果您位于同一网络上,则还必须更改输入到LAN IP的PC名称;如果要通过Internet连接,则必须更改公共IP地址。

此外,如果您与服务器不在同一网络上,则还必须在连接到服务器的路由器上启用端口转发。

警告:端口将始终显示为已关闭,直到您在SQL Server上启动数据库引擎时,该名称为具有数据库的计算机的IP地址。