【问题标题】:Accessing data in SQL Server 2008 from an Android application从 Android 应用程序访问 SQL Server 2008 中的数据
【发布时间】:2014-06-12 00:01:21
【问题描述】:

我是 Android 开发的新手,遇到了一个让我很困扰的问题,更糟糕的是我还没有找到答案。

要求:

1.) 我正在使用 Eclipse 作为我的基本 IDE 开发 Android 应用程序。我的数据安全地保存在 SQLserver 2008 中。我不想使用 SQLite/MySql。

2.) 这里的要求是,单击按钮时,应用程序应与 SQLServer 2008 数据库通信,从中获取数据并在视图中列出数据。

这可能吗?如果否,则此行下方的查询无效。

问题:

我尝试用谷歌搜索它,提供诸如“Android 和 sqlserver 连接”之类的查询,

“在 Android 中从 sqlserver 中提取数据”并最终得到如下答案,我是

在这里迷路了。

1.) 有些人使用 My Sql 的 php 脚本来展示它,但我使用的是 java 和 SQL Server 2008。我在这里没有得到链接。

2.) 有些人只是说我们必须使用 Web 服务来做到这一点。我尝试理解这一点,但没有一个示例显示实现 Web 服务并使用它。他们刚刚使用 KSoap 调用在线可用的 Web 服务来添加 2 个号码。

查询:

Web Service 是 Android 中与数据库通信的唯一方式吗?如果是,那么我该如何处理它。谁能指导我

1.) 如何在 Android 应用程序中创建 Web 服务并从 java 代码中调用它。

2.) 如何从 Web 服务与 SQLServer 2008 DB 通信并取回数据。

非常感谢任何帮助,谢谢大家。

【问题讨论】:

    标签: android


    【解决方案1】:

    如何从 Android 直接连接到 SQL Server。

    1. 您需要jtds-1.2.7.jar 库。
    2. 在库文件中设置jtds-1.2.7.jar

    3. 转到依赖项并设置

      compile files('libs/jtds-1.2.7.jar')
      
    4. 创建Connect_to_server.class

      import android.annotation.SuppressLint;
      import android.os.StrictMode;
      import android.util.Log;
      import java.sql.Connection;
      import java.sql.DriverManager;
      import java.sql.SQLException;
      
      public class Connect_to_server {
          @SuppressLint("NewApi")
          public static Connection ConnectionHelper() {
              StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder()
                      .permitAll().build();
              StrictMode.setThreadPolicy(policy);
              Connection connection = null;
              String ConnectionURL = null;
      
              String user = ***LOGIN_HERE***;
              String password = ***PASSWORD_HERE***;
              String database = ***DATABASE_NAME_HERE***;
              String server= ***SERVER_NAME_HERE***;
      
              try {
                  Class.forName("net.sourceforge.jtds.jdbc.Driver");
                  ConnectionURL = "jdbc:jtds:sqlserver://" + server + ";"
                          + "databaseName=" + database + ";user=" + user
                          + ";password=" + password + ";";
                  connection = DriverManager.getConnection(ConnectionURL);
              } catch (SQLException se) {
                  Log.e("ERRO", se.getMessage());
              } catch (ClassNotFoundException e) {
                  Log.e("ERRO", e.getMessage());
              } catch (Exception e) {
                  Log.e("ERRO", e.getMessage());
              }
              return connection;
          }
      }
      
    5. 在任何其他课程或活动中,您都需要这三样东西

      • 连接
      • 声明
      • 结果集
      1. 让我们看看如何使用这个简单的代码

        Connection connect;
        Statement st;
        Statement st1;
        ResultSet rs;
        
        btn_Register.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View view) {
                    try {
                        connect = Connect_to_server.ConnectionHelper();
                        st = connect.createStatement();
        
                        // TODO I will take ID_Admin from here
                        rs = st.executeQuery("  SELECT * FROM [dbo].[AdminUsers]  WHERE Email = N'"+ET_email.getText()+"' ");
        
                        if (rs.next()){
                            Toast.makeText(getApplicationContext(),rs.getString("Email")+"this email in database",LENGTH_LONG).show();
                            Intent i = new Intent(RegisterActivity.this , LoginActivity.class);
                            startActivity(i);
                            finish();
                        }else{
                            reg();
                        }
                    } catch (Exception e) {
                        Log.e("ERRO", e.getMessage());
                    }
                }
            });
        
        private void reg(){
            try {
                connect = Connect_to_server.ConnectionHelper();
                st1 = connect.createStatement();
        
                st1.execute("INSERT INTO [dbo].[AdminUsers]" +
                        "           ([UserAdmin]" +
                        "           ,[PassAdmin]" +
                        "           ,[Address]" +
                        "           ,[Phone]" +
                        "           ,[Email])" +
                        "     VALUES" +
                        "           (N'"+ET_name.getText()+"'" +
                        "           ,N'"+ET_password.getText() +"'" +
                        "           ,N'"+ET_address.getText()+"'" +
                        "           ,N'"+ET_phone.getText()+"'" +
                        "           ,N'"+ET_email.getText()+"' )");
                Toast.makeText(getApplicationContext(),ET_name.getText()+"welcome ",LENGTH_LONG).show();
                Toast.makeText(getApplicationContext(),"u can login now",LENGTH_LONG).show();
                Intent i = new Intent(RegisterActivity.this , LoginActivity.class);
                startActivity(i);
                finish();
            } catch (Exception e) {
                Log.e("ERRO", e.getMessage());
                Log.e("ERRO", e.getMessage());
            }
        }
        
      2. 如我们所见,当我们想要取回数据时使用st.executeQuery,并将其设置在 ResultSet 中,然后获取结果集

        • while(rs.next()) 当我们有多个记录时
        • if(rs.next()) 当我们确定它只有一条记录时
      3. st1.execute 不返回 --- 删除 - 插入 - 更新

      4. rs.getString("***Column_name_HERE***")

    【讨论】:

      【解决方案2】:

      这是stackoverflow上的一个常见话题,您可以通过搜索找到更多信息。

      解决问题的典型方法是实现一个 Http API,它将在您的服务器上运行、执行数据库查找并响应客户端(例如您的 Android 应用程序)的请求。这样,您不需要编写任何代码来让您的 Android 应用程序与您的 SQL 服务器通信,而是会发出标准的 Http 请求,这是 Android 内置的。另一方面,您将需要编写后端服务器代码来处理这些请求并使用数据库中的数据进行响应。

      所以是的,您可能需要在数据库和 Android 客户端之间实现一个 Web 服务器层。可以用 Java 或许多其他语言来完成,您不仅限于 Java,因为您的客户端是 Android 应用程序。

      有人已经在此处提供了有关此主题的一些信息:
      Connect to sql server from android
      Connecting android with MS SQL SERVER 2008

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2011-12-25
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-08-18
        • 1970-01-01
        相关资源
        最近更新 更多