Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/227.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何将android应用程序连接到MSSQL服务器并从中检索数据?_Android_Web Services_Sql Server 2008_Jdbc_Mssql Jdbc - Fatal编程技术网

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

如何将android应用程序连接到MSSQL服务器并从中检索数据?,android,web-services,sql-server-2008,jdbc,mssql-jdbc,Android,Web Services,Sql Server 2008,Jdbc,Mssql Jdbc,我正在尝试将我的应用程序连接到Microsoft SQL server 2008 R2并从中检索数据。我可以通过php将我的应用程序连接到MySql,但在MSSQL服务器方面无法完成相同的任务。我用谷歌搜索过 和 链接。但是这些链接并没有告诉我应该遵循的具体程序。在这里 链接我发现一些东西,告诉我如何使用asp。但我无法处理代码。作为一个新的这样做,谁能告诉我一步一步连接android应用程序到MSSQL服务器的程序?我非常需要这个解决方案。 另一方面,一些评论和回答告诉我应该使用web服务。我

我正在尝试将我的应用程序连接到Microsoft SQL server 2008 R2并从中检索数据。我可以通过php将我的应用程序连接到MySql,但在MSSQL服务器方面无法完成相同的任务。我用谷歌搜索过 和 链接。但是这些链接并没有告诉我应该遵循的具体程序。在这里 链接我发现一些东西,告诉我如何使用asp。但我无法处理代码。作为一个新的这样做,谁能告诉我一步一步连接android应用程序到MSSQL服务器的程序?我非常需要这个解决方案。 另一方面,一些评论和回答告诉我应该使用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 server的端口。但是连接字符串返回null


有人能告诉我应该怎么做才能完成连接吗?谢谢你的帮助。

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

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

这就是我在主要活动中所做的

希望,这能帮助别人

 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);
        }
    }
}
private静态最终字符串SOAP\u ACTION=”http://tempuri.org/findContact";
私有静态最终字符串操作\u NAME=“findContact”//您的webservice web方法名称
私有静态最终字符串WSDL\u TARGET\u NAMESPACE=”http://tempuri.org/";
私有静态最终字符串SOAP_地址=”http://10.0.2.2:58497/WebService/Service.asmx";
受保护的静态最终字符串标记=null;
私有静态字符串fahren;
文本视图tvData1;
EditText-edata;
按钮;
弦乐学生号;
字符串状态;
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
tvData1=(TextView)findViewById(R.id.textView1);
edata=(EditText)findViewById(R.id.editText1);
按钮=(按钮)findViewById(R.id.button1);
setOnClickListener(新的OnClickListener(){
公共void onClick(视图v){
studentNo=edata.getText().toString();
新建提交().execute(studentNo);
}
});
}
私有类提交扩展异步任务{
@凌驾
受保护的void onPreExecute(){
super.onPreExecute();
}
@凌驾
受保护的字符串doInBackground(字符串…arg){
//TODO自动生成的方法存根
SoapObject请求=新的SoapObject(WSDL\u目标\u命名空间、操作\u名称);
PropertyInfo PropertyInfo=新的PropertyInfo();
propertyInfo.type=propertyInfo.STRING\u类;
propertyInfo.name=“eid”;
propertyInfo.setValue(学生编号);
request.addProperty(propertyInfo);//添加此项时需要小心,因为当我遇到连续异常时,它成为了我的一个问题。
SoapSerializationEnvelope=新的SoapSerializationEnvelope(SoapEnvelope.VER11);
envelope.dotNet=true;
envelope.setOutputSoapObject(请求);
HttpTransportSE httpTransport=新的HttpTransportSE(SOAP\U地址);
httpTransport.debug=true;
试试{
调用(SOAP_操作,信封);
Log.e(“RequestDump”,httpTransport.RequestDump.toString());
Log.e(“ResponseDump”,httpTransport.ResponseDump.toString());
SoapObject结果=(SoapObject)envelope.bodyIn;
如果(结果!=null){
state=result.getProperty(0.toString();
Log.e(“发现”,状态);
}
否则{
Log.e(“Obj”,result.toString());
}
}  
捕获(异常){
Log.e(“Exception”,Exception.toString());
}
返回状态;
}
@凌驾
受保护的void onPostExecute(字符串结果){
super.onPostExecute(结果);
tvData1.setText(结果);
}
}
}
当然,您无法通过真实设备的wifi连接访问位于pc中的Web服务。[如果你知道怎么做,请纠正我,提供正确的url]。在这里,我使用了emulator,任何人都可以使用真实的设备从真实的ip访问实时Web服务。我已经测试过了。这个代码对我来说非常有效。
这就是我解决问题的方法。

或者这些没有告诉我如何创建,以及在哪里创建这些web服务。你能重定向到一些有用的教程链接吗?@SelvinI做到了(第二个链接很好)!如果你能从这个链接中获取信息,你应该考虑不要成为程序员。似乎您需要准备好复制和粘贴的代码。。。这不是一个编程!相当明智said@Selvin..I我正在看第二个链接。让我们期待他们在那里写的最好的东西,您甚至可以在VS中找到REST服务的项目模板(非常确定它们是在线模板)。。。试试看