綁定帳號登入

Android 台灣中文網

打印 上一主題 下一主題

[求助] android透過Web Server連接SQL server

[複製連結] 查看: 16387|回覆: 3|好評: 0
跳轉到指定樓層
樓主
vv1105tw | 收聽TA | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
發表於 2013-11-28 22:57
20碎鑽
本帖最後由 vv1105tw 於 2013-11-28 23:04 編輯

請問各位大大~
我要做手機可以抓取資料庫的資料,查了網路上的資料,是要透過Web Server連接到SQL server來抓取資料,
我現在要做一個公佈欄,我已建好網頁和資料庫,那要在手機上列出來,android部分要如何寫呢?
請各位大大幫幫我,我很急~~

下方是手機要抓取資料的網頁的程式碼~可幫我看看~~
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Services;
using System.Data.SqlClient;
using System.Data;

namespace SNQueryWebService
{
    /// <summary>
    ///SQL_NoticeBoard 的摘要描述
    /// </summary>
    [WebService(Namespace = "http://tempuri.org/")]
    [WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
    [System.ComponentModel.ToolboxItem(false)]
   
    public class SQL_NoticeBoard : System.Web.Services.WebService
    {

        [WebMethod]//取得公佈欄資料紀錄
        public string[] NoticeBoard(string NB_ID)
        {
            string[] output = null;
            //建立連結物件
            SqlConnection sql = new SqlConnection("Data Source=140.126.146.25,12345;Initial Catalog="C:PROGRAM FILESMICROSOFT SQL SERVERMSSQL11.SQLEXPRESSMSSQLBACKUPMYDBMYDBMYDB.MDF";User ID=Family;Password=12131213");
            sql.Open();

            //建立命令物件
            SqlCommand cmd = new SqlCommand("SELECT NB_ID,NB_Name,NB_Content,NB_Class,NB_Date  FROM NOTICE_BOARD WHERE NB_ID="" + NB_ID + """, sql);

            SqlDataAdapter da = new SqlDataAdapter();
            DataTable dt = new DataTable();
            da.SelectCommand = cmd;
            da.Fill(dt);
            if (dt.Rows.Count > 0)
            {
                output = new String[dt.Rows.Count];

                for (int i = 0; i < dt.Rows.Count; i++)
                {
                    //讀取
                    output = dt.Rows.ItemArray[0].ToString() + "  ";
                    //讀取
                    output += dt.Rows.ItemArray[1].ToString() + "  ";
                    //讀取
                    output += dt.Rows.ItemArray[2].ToString() + "  ";
                    //讀取
                    output += dt.Rows.ItemArray[3].ToString() + "  ";
                    //讀取
                    output += dt.Rows.ItemArray[4].ToString() + "  ";
                }
            }
            da.Dispose();
            dt.Dispose();
            cmd.Dispose();
            sql.Close();        
            sql.Dispose();

            return output;
      
        }
      
    }
}

「用Android 就來APK.TW」,快來加入粉絲吧!
Android 台灣中文網(APK.TW)
收藏收藏1 分享分享 分享專題
用Android 就來Android 台灣中文網(https://apk.tw)
回覆

使用道具 舉報

沙發
charley85470 | 收聽TA | 只看該作者
發表於 2013-12-2 12:27
用Android 就來Android 台灣中文網(https://apk.tw)
回覆

使用道具 舉報

板凳
independentqqpp | 收聽TA | 只看該作者
發表於 2014-3-12 16:48
自己測試過的方法,供您參考:

Android 手機經Web Server(PHP),取得Oracle DB資料。

一開始是想由手機直接連結資料庫取得資料,查了依些資料發現,需經由Web Server,不同的資料庫,只需依DB的文件再修改即可。

程序流程: 1.主程式MainActivity -> 2.呼叫副程式DBConnector -> 3.經由Http方法聯結Web Server(PHP網頁) ->4.網頁取得資料庫資料後回傳顯示。

1. Android 主程式:
  1. package com.xxx.testandroiddbactivity;

  2. import android.os.Build;
  3. import android.os.Bundle;
  4. import android.annotation.SuppressLint;
  5. import android.annotation.TargetApi;
  6. import android.app.Activity;
  7. import android.view.Menu;

  8. import org.json.JSONArray;
  9. import org.json.JSONObject;
  10. import android.os.StrictMode;
  11. import android.util.Log;
  12. import android.view.Gravity;
  13. import android.view.View;
  14. import android.view.ViewGroup.LayoutParams;
  15. import android.widget.Button;
  16. import android.widget.TableLayout;
  17. import android.widget.TableRow;
  18. import android.widget.TextView;
  19. import android.widget.EditText;
  20. import android.widget.Toast;

  21. public class MainActivity extends Activity {


  22.         @TargetApi(Build.VERSION_CODES.GINGERBREAD)
  23.         @SuppressLint("NewApi")
  24.         @Override
  25.         protected void onCreate(Bundle savedInstanceState) {
  26.                 super.onCreate(savedInstanceState);
  27.                 setContentView(R.layout.activity_main);
  28.                
  29.         findViews();
  30.         setListeners();
  31.         

  32.         StrictMode.setThreadPolicy(new StrictMode.ThreadPolicy.Builder()
  33.         .detectDiskReads()  
  34.         .detectDiskWrites()  
  35.         .detectNetwork()  
  36.         .penaltyLog()  
  37.         .build());  
  38.         

  39.         StrictMode.setVmPolicy(new StrictMode.VmPolicy.Builder()
  40.         .detectLeakedSqlLiteObjects()   
  41.         .penaltyLog()  
  42.         .penaltyDeath()  
  43.         .build());
  44.          
  45.         }


  46.         @Override
  47.         public boolean onCreateOptionsMenu(Menu menu) {
  48.                 // Inflate the menu; this adds items to the action bar if it is present.
  49.                 getMenuInflater().inflate(R.menu.main, menu);
  50.                 return true;
  51.         }
  52.        
  53.     private Button button_get_record;
  54.     private Button button_get_record2;
  55.     private EditText username;
  56.     private EditText password;
  57.     private String s_username;
  58.     private String s_password;
  59.    
  60.     private void findViews() {
  61.             username = (EditText)findViewById(R.id.username);
  62.                 password = (EditText)findViewById(R.id.password);
  63.         button_get_record = (Button)findViewById(R.id.get_record);
  64.         button_get_record2 = (Button)findViewById(R.id.get_record2);
  65.     }
  66.    
  67.     private void setListeners() {
  68.         button_get_record.setOnClickListener(getDBRecord);
  69.         button_get_record2.setOnClickListener(getDBRecord2);
  70.     }
  71.    
  72.     private Button.OnClickListener getDBRecord = new Button.OnClickListener() {
  73.         public void onClick(View v) {
  74.             // TODO Auto-generated method stub
  75.             TableLayout user_list = (TableLayout)findViewById(R.id.user_list);
  76.             user_list.setStretchAllColumns(true);
  77.             TableLayout.LayoutParams row_layout = new TableLayout.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);
  78.             TableRow.LayoutParams view_layout = new TableRow.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);
  79.             try {
  80.                         s_username = username.getText().toString();          //取得輸入的帳號
  81.                         s_password = password.getText().toString();         //密碼
  82.                                 //呼叫將要連結資料庫的函式DBConnector,並傳遞參數(SQL,帳號,密碼)
  83.                 String result = DBConnector.executeQuery("SELECT xxx16,xxx31f,xxx32f,xxx34f FROM xxx_table WHERE rownum < 10",s_username,s_password);

  84.                 //SQL 結果有多筆資料時使用JSONArray
  85.                 //只有一筆資料時直接建立JSONObject物件
  86.                 //JSONObject jsonData = new JSONObject(result);
  87.                 JSONArray jsonArray = new JSONArray(result);
  88.                 //System.out.print(result);
  89.                 user_list.removeAllViews();                //清空畫面

  90.                 TableRow tr2 = new TableRow(MainActivity.this);
  91.                 tr2.setLayoutParams(row_layout);
  92.                 tr2.setGravity(Gravity.CENTER_HORIZONTAL);
  93.                
  94.                 TextView title_acc = new TextView(MainActivity.this);
  95.                 title_acc.setText("稅率");
  96.                 title_acc.setLayoutParams(view_layout);
  97.                
  98.                 TextView title_pwd = new TextView(MainActivity.this);
  99.                 title_pwd.setText("未稅金額");
  100.                 title_pwd.setLayoutParams(view_layout);
  101.                
  102.                 TextView title_tax = new TextView(MainActivity.this);
  103.                 title_tax.setText("稅額");
  104.                 title_tax.setLayoutParams(view_layout);
  105.                
  106.                 TextView title_sum = new TextView(MainActivity.this);
  107.                 title_sum.setText("合計金額");
  108.                 title_sum.setLayoutParams(view_layout);
  109.                
  110.                 tr2.addView(title_acc);
  111.                 tr2.addView(title_pwd);
  112.                 tr2.addView(title_tax);
  113.                 tr2.addView(title_sum);
  114.                 user_list.addView(tr2);
  115.                
  116.                 for(int i = 0; i < jsonArray.length(); i++) {
  117.                     JSONObject jsonData = jsonArray.getJSONObject(i);
  118.                     TableRow tr = new TableRow(MainActivity.this);
  119.                     tr.setLayoutParams(row_layout);
  120.                     tr.setGravity(Gravity.CENTER_HORIZONTAL);
  121.                     
  122.                     TextView user_acc = new TextView(MainActivity.this);
  123.                     user_acc.setText(jsonData.getString("xxx16"));
  124.                     user_acc.setLayoutParams(view_layout);
  125.                     
  126.                     TextView user_pwd = new TextView(MainActivity.this);
  127.                     user_pwd.setText(jsonData.getString("xxx31F"));
  128.                     user_pwd.setLayoutParams(view_layout);
  129.                     
  130.                     TextView user_tax = new TextView(MainActivity.this);
  131.                     user_tax.setText(jsonData.getString("xxx32F"));
  132.                     user_tax.setLayoutParams(view_layout);
  133.                     
  134.                     TextView user_sum = new TextView(MainActivity.this);
  135.                     user_sum.setText(jsonData.getString("xxx34F"));
  136.                     user_sum.setLayoutParams(view_layout);
  137.                     
  138.                     tr.addView(user_acc);
  139.                     tr.addView(user_pwd);
  140.                     tr.addView(user_tax);
  141.                     tr.addView(user_sum);
  142.                     user_list.addView(tr);
  143.                 }
  144.                 //System.out.print("Activity端:" + result);
  145.             } catch(Exception e) {
  146.                  //Log.e("log_tag", e.toString());
  147.                      String name = e.toString();
  148.                     Toast.makeText(getApplicationContext(), name, 1).show();
  149.             }
  150.         }
  151.     };
  152.    
  153.     private Button.OnClickListener getDBRecord2 = new Button.OnClickListener() {
  154.         public void onClick(View v) {
  155.             // TODO Auto-generated method stub
  156.             TableLayout user_list = (TableLayout)findViewById(R.id.user_list);
  157.             user_list.setStretchAllColumns(true);
  158.             TableLayout.LayoutParams row_layout = new TableLayout.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);
  159.             TableRow.LayoutParams view_layout = new TableRow.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);
  160.             try {
  161.                         s_username = username.getText().toString();
  162.                         s_password = password.getText().toString();
  163.                 String result = DBConnector.executeQuery("001",s_username,s_password);

  164.                 //SQL 結果有多筆資料時使用JSONArray
  165.                 //只有一筆資料時直接建立JSONObject物件
  166.                 //JSONObject jsonData = new JSONObject(result);
  167.                 JSONArray jsonArray = new JSONArray(result);
  168.                 //System.out.print(result);
  169.                 user_list.removeAllViews();                //清空畫面
  170.                
  171.                 TableRow tr2 = new TableRow(MainActivity.this);
  172.                 tr2.setLayoutParams(row_layout);
  173.                 tr2.setGravity(Gravity.CENTER_HORIZONTAL);
  174.                
  175.                 TextView title_acc = new TextView(MainActivity.this);
  176.                 title_acc.setText("傳票編號");
  177.                 title_acc.setLayoutParams(view_layout);
  178.                
  179.                 TextView title_pwd = new TextView(MainActivity.this);
  180.                 title_pwd.setText("項次");
  181.                 title_pwd.setLayoutParams(view_layout);
  182.                
  183.                 TextView title_tax = new TextView(MainActivity.this);
  184.                 title_tax.setText("發票號碼");
  185.                 title_tax.setLayoutParams(view_layout);
  186.                
  187.                 TextView title_sum = new TextView(MainActivity.this);
  188.                 title_sum.setText("廠商統一編號");
  189.                 title_sum.setLayoutParams(view_layout);
  190.                
  191.                 tr2.addView(title_acc);
  192.                 tr2.addView(title_pwd);
  193.                 tr2.addView(title_tax);
  194.                 tr2.addView(title_sum);
  195.                 user_list.addView(tr2);
  196.                
  197.                 for(int i = 0; i < jsonArray.length(); i++) {
  198.                     JSONObject jsonData = jsonArray.getJSONObject(i);
  199.                     TableRow tr = new TableRow(MainActivity.this);
  200.                     tr.setLayoutParams(row_layout);
  201.                     tr.setGravity(Gravity.CENTER_HORIZONTAL);
  202.                     
  203.                     TextView user_acc = new TextView(MainActivity.this);
  204.                     user_acc.setText(jsonData.getString("xxx01"));
  205.                     user_acc.setLayoutParams(view_layout);
  206.                     
  207.                     TextView user_pwd = new TextView(MainActivity.this);
  208.                     user_pwd.setText(jsonData.getString("xxx02"));
  209.                     user_pwd.setLayoutParams(view_layout);
  210.                     
  211.                     TextView user_tax = new TextView(MainActivity.this);
  212.                     user_tax.setText(jsonData.getString("xxx03"));
  213.                     user_tax.setLayoutParams(view_layout);
  214.                     
  215.                     TextView user_sum = new TextView(MainActivity.this);
  216.                     user_sum.setText(jsonData.getString("xxx04"));
  217.                     user_sum.setLayoutParams(view_layout);
  218.                     
  219.                     tr.addView(user_acc);
  220.                     tr.addView(user_pwd);
  221.                     tr.addView(user_tax);
  222.                     tr.addView(user_sum);
  223.                     user_list.addView(tr);
  224.                 }
  225.                 //System.out.print("Activity端:" + result);
  226.             } catch(Exception e) {
  227.                  //Log.e("log_tag", e.toString());
  228.                          String name = e.toString();
  229.                         Toast.makeText(getApplicationContext(), name, 1).show();
  230.             }

  231.         }
  232.     };

  233. }


複製代碼


2.副程式:
  1. package com.xxx.testandroiddbactivity;

  2. import java.io.BufferedReader;
  3. import java.io.InputStream;
  4. import java.io.InputStreamReader;
  5. import java.util.ArrayList;

  6. import org.apache.http.HttpEntity;
  7. import org.apache.http.HttpResponse;
  8. import org.apache.http.NameValuePair;
  9. import org.apache.http.client.HttpClient;
  10. import org.apache.http.client.entity.UrlEncodedFormEntity;
  11. import org.apache.http.client.methods.HttpPost;
  12. import org.apache.http.impl.client.DefaultHttpClient;
  13. import org.apache.http.message.BasicNameValuePair;
  14. import org.apache.http.protocol.HTTP;

  15. import android.database.SQLException;
  16. import android.util.Log;
  17. import android.widget.Toast;

  18. public class DBConnector {
  19.     public static String executeQuery(String query_string,String username,String password) {
  20.         String result = "";
  21.         
  22.         try {
  23.             HttpClient httpClient = new DefaultHttpClient();        //調用HttpClient方法
  24.             //建立Http POST連線
  25.             HttpPost httpPost = new HttpPost("http://192.168.1.2/AndroidConnectDB/android_connect_db.php");
  26.             //post運作傳送變數用NameValuePair[]陣列儲存
  27.             ArrayList<NameValuePair> params = new ArrayList<NameValuePair>();
  28.             
  29.             params.add(new BasicNameValuePair("query_string", query_string)); //(輸入變數名稱,輸入變數名稱的值)
  30.             params.add(new BasicNameValuePair("username", username)); //(輸入變數名稱,輸入變數名稱的值)
  31.             params.add(new BasicNameValuePair("password", password)); //(輸入變數名稱,輸入變數名稱的值)
  32.             
  33.             httpPost.setEntity(new UrlEncodedFormEntity(params, HTTP.UTF_8)); //發出HTTP request
  34.             HttpResponse httpResponse = httpClient.execute(httpPost); //取得HTTP response
  35.             //view_account.setText(httpResponse.getStatusLine().toString());
  36.             HttpEntity httpEntity = httpResponse.getEntity();
  37.             InputStream inputStream = httpEntity.getContent();
  38.             
  39.             BufferedReader bufReader = new BufferedReader(new InputStreamReader(inputStream, "utf-8"), 8);
  40.             StringBuilder builder = new StringBuilder();
  41.             String line = null;
  42.             while((line = bufReader.readLine()) != null) {
  43.                 builder.append(line + "
  44. ");
  45.             }
  46.             inputStream.close();
  47.             result = builder.toString();
  48.         } catch(Exception e) {
  49.              //Log.e("log_tag", e.toString());
  50.         }
  51.         //System.out.print("Java端:" + result);
  52.         return result;
  53.     }
  54. }
複製代碼


3. PHP網頁
  1. <?php
  2. $db = OCILogon("test1","test1","(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST= 192.168.1.2 )(PORT=1521))(CONNECT_DATA=(SID=test)))");//oracle DB寫法

  3. $sql = $_POST["query_string"];

  4. if($_POST["query_string"] == "1" ){
  5.         $sql = "SELECT XXX01,XXX02,XXX03,XXX04 FROM XXX_FILE";
  6. }

  7. $stid = OCIParse($db, $sql);

  8. OCIExecute($stid, OCI_DEFAULT);

  9. while($succ = OCIFetchInto($stid, $row, OCI_ASSOC)) //提取資料可用資料庫的欄位名稱。

  10.       $output[] = $row;

  11. print(json_encode($output));

  12. OCILogoff($db);
  13. ?>
複製代碼
用Android 就來Android 台灣中文網(https://apk.tw)
回覆

使用道具 舉報

地板
k27810222 | 收聽TA | 只看該作者
發表於 2015-2-12 00:43
independentqqpp 發表於 2014-3-12 16:48
自己測試過的方法,供您參考:

Android 手機經Web Server(PHP),取得Oracle DB資料。

請問大大是使用Oracle iPlanet Web Server嗎?
用Android 就來Android 台灣中文網(https://apk.tw)
回覆

使用道具 舉報

您需要登錄後才可以回帖 登錄 | 註冊

本版積分規則