如何将 android 应用程序连接到 MYSQL 服务器并从中检索数据?

Posted

技术标签:

【中文标题】如何将 android 应用程序连接到 MYSQL 服务器并从中检索数据?【英文标题】:How to connect android application to MSSQL server and retrive data from it? 【发布时间】:2014-11-18 10:50:11 【问题描述】:

我正在尝试将我的应用程序连接到 Microsoft SQL Server 2008 R2 并从中检索数据。我可以通过 php 将我的应用程序连接到 mysql,但在 MSSQL 服务器方面无法完成相同的任务。我用谷歌搜索了this 和this 链接。但是这些链接并没有准确地告诉我应该遵循的程序。在这里this 链接 我发现了一些告诉我使用 asp 的东西。但我无法应付代码。作为一个这样做的新人,任何人都可以告诉我有关将android应用程序连接到MSSQL服务器的分步过程吗?非常需要解决方案。 另一方面,一些 cmets 和 answer 告诉我应该使用 Web 服务。我应该如何在我的代码中实现 Web 服务。我可以通过 PHP 代码通过 json 解析从 MySql 源中检索数据。我应该使用 ASP 而不是 PHP。那我该怎么做呢? 我作为新手所做的如下。

试过直接连接服务器。

public void query()

        Log.e("Android"," SQL 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://192.168.115.16:1433/WSMS_H;user=sa;password=123456;integratedSecurity=true;";
            String username = "";
            String password = "";
            conn = DriverManager.getConnection(connString,username,password);
            Log.e("Connection","open");
            Statement stmt = conn.createStatement();
            ResultSet reset = stmt.executeQuery("select * from dbo.Users");
             
            //Print the data to the console
            while(reset.next())
            Log.e("Data:",reset.getString(3));
        //                Log.w("Data",reset.getString(2));
            
            conn.close();
             
        
        catch (Exception e)
        
            Log.w("Error connection","" + e.getMessage());
        
    

这不是我承认的正确方式。我所拥有的是安装在我的本地机器上的 MS SQL server 2008 R2。 1433 端口为 SQL 服务器工作。但是连接字符串返回null。

谁能告诉我我应该怎么做才能完成连接?感谢任何帮助。

【问题讨论】:

msdn.microsoft.com/en-us/magazine/dd315413.aspx 或 msdn.microsoft.com/en-us/library/dd203052.aspx 这些并没有告诉我如何创建,以及在哪里创建这个 Web 服务。你可以重定向到一些工作教程链接吗?@Selvin 我做到了(第二个链接很不错)!如果你能从这个链接中得到它,你应该考虑根本不是程序员。看来您需要准备好复制和粘贴的代码……这不是编程! 非常明智地说@Selvin ..我正在查看第二个链接。让我们期待最好的 他们在那里写道,你甚至可以在 VS 中找到 REST 服务的项目模板(很确定它们是在线模板)......试试看 【参考方案1】:

终于找到了一个安静的好指南来解决我的问题。它告诉我有关实现 Web 服务以及如何将 MSSQL 服务器与 Android 连接的详细信息。

This is more than helpful and details are found on the correct answer.

我需要做的是,首先,必须使用 .NET(C#) 创建一个 Web 服务,然后将我的 android 应用程序连接到该 Web 服务以从本地机器检索数据 [对我来说它是我的 MSSQL服务器 2008 R2]。希望这对其他人有帮助。 但是在实施这些链接中提供的想法和代码之后;我想出了一些改变,特别是在方法上。

这就是我在 MainActivity 中所做的。

希望,这对其他人有帮助。

 private static final String SOAP_ACTION = "http://tempuri.org/findContact";

    private static final String OPERATION_NAME = "findContact";// your webservice web method name

    private static final String WSDL_TARGET_NAMESPACE = "http://tempuri.org/";

    private static final String SOAP_ADDRESS = "http://10.0.2.2:58497/WebService/Service.asmx";

    protected static final String TAG = null;
    private static String fahren;

    TextView tvData1;
    EditText edata;
    Button button;
    String studentNo;
    String state;

    @Override
    protected void onCreate(Bundle savedInstanceState) 
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        tvData1 = (TextView)findViewById(R.id.textView1);
        edata =(EditText)findViewById(R.id.editText1);

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

        button.setOnClickListener(new OnClickListener() 

            public void onClick(View v) 
                studentNo=edata.getText().toString();
                new Submit().execute(studentNo);
            
        );
    

    private class Submit extends AsyncTask<String, Void, String> 

        @Override
        protected void onPreExecute() 
            super.onPreExecute();

        

        @Override
        protected String doInBackground(String... arg) 
            // TODO Auto-generated method stub
            SoapObject request = new SoapObject(WSDL_TARGET_NAMESPACE,OPERATION_NAME);
            PropertyInfo propertyInfo = new PropertyInfo();
            propertyInfo.type = PropertyInfo.STRING_CLASS;
            propertyInfo.name = "eid";
            propertyInfo.setValue(studentNo);
            request.addProperty(propertyInfo);//need to be careful adding this, as it became an issue for me while I was getting continuous exception.

            SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11);
            envelope.dotNet = true;
            envelope.setOutputSoapObject(request);
            HttpTransportSE httpTransport = new HttpTransportSE(SOAP_ADDRESS);
            httpTransport.debug = true;
            try 
                httpTransport.call(SOAP_ACTION, envelope);

                Log.e("RequestDump", httpTransport.requestDump.toString());
                Log.e("ResponseDump", httpTransport.responseDump.toString());

                SoapObject result=(SoapObject)envelope.bodyIn;
                if(result!= null)
                    state = result.getProperty(0).toString();
                    Log.e("Found", state);
                
                else
                    Log.e("Obj", result.toString());
                
              
            catch (Exception exception)   
                Log.e("Exception", exception.toString());
            
            return state;
        

        @Override
        protected void onPostExecute(String result) 
            super.onPostExecute(result);
            tvData1.setText(result);
        
    

当然,您无法通过真实设备上的 wifi 连接访问位于您电脑中的网络服务。 [如果你知道怎么做,请纠正我,请提供正确的网址]。在这里,我最终使用了模拟器,任何人都可以使用他们的真实设备从真实 IP 访问实时 Web 服务,我已经对其进行了测试。这段代码非常适合我。 这就是我解决问题的方法。

【讨论】:

以上是关于如何将 android 应用程序连接到 MYSQL 服务器并从中检索数据?的主要内容,如果未能解决你的问题,请参考以下文章

将android应用程序连接到mysql数据库

如何从 Android 应用程序通过 JDBC 连接到远程 MySQL 服务器

无法将 Wamp MySQL 数据库连接到 Android Studio

使用 mysql 数据库的 Android 登录活动

Android 10 / API 29:如何将手机连接到配置的网络?

将android连接到mysql数据库的url