sql >> データベース >  >> RDS >> Mysql

Androidを使用してリモートMySQLデータベースに接続する

    Androidアプリ側:

    private ArrayList<String> receiveData(String file, ArrayList<NameValuePair> data)
    {
        InputStream is = null;
        ArrayList<String> output = new ArrayList<String>();
        String line = null;
    
        //Connect and obtain data via HTTP.
        try
        {
            HttpClient httpclient = new DefaultHttpClient();
            HttpPost httppost = new HttpPost("http://www.blah.com/"+file);
            httppost.setEntity(new UrlEncodedFormEntity(data));
            HttpResponse response = httpclient.execute(httppost);
            HttpEntity entity = response.getEntity();
            is = entity.getContent();
    
        }
        catch(Exception e)
        {
            Log.e("log_tag", "Error in http connection "+e.toString());
        }
    
        //Parse data into ArrayList and return.
        try
        {
            BufferedReader reader = 
                new BufferedReader(new InputStreamReader(is,"iso-8859-1"));
    
            while ((line = reader.readLine()) != null) 
            {
                //Parse data into tokens and removing unimportant tokens.
                StringTokenizer st = new StringTokenizer(line, delims, false);
    
                while(st.hasMoreTokens())
                {
                    String token = st.nextToken();
                    output.add(token);
                }
            }
    
            is.close();
            //Log output of data in LogCat.
            Log.d("DATA","DATA:"+output);
    
        }
        catch(Exception e)
        {
            Log.e("log_tag", "Error converting result "+e.toString());
        }
        return output;
    }
    
    /**
     * Gets all  data from GetAllData.php
     * @return output - ArrayList containing  data.
     */
    public ArrayList<String> getAllData(String row)
    {
        fileName = "GetAllData.php";
    
        //Add arguments to arrayList<NameValuePairs> so we can encode the data and send it on.
        ArrayList<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>(1);
        nameValuePairs.add(new BasicNameValuePair("row", row));
    
        ArrayList<String> output = this.receiveData(fileName, nameValuePairs);
        return output;
    }
    

    サーバー側:

    したがって、サーバー上のGetAllData.phpファイルは次のようになります。

    <?php
    /*
     * What this file does is it:
     * 1) Creates connection to database.
     * 2) Gets data from database.
     * 3) Encodes data to JSON. So this data can then be used by Android Application.
     * 4) Close database connection.
     */
     require_once $_SERVER['DOCUMENT_ROOT'].'/Clarity/Connection.php';
     require_once $_SERVER['DOCUMENT_ROOT'].'/Clarity/ReceiveAPI.php';
    
     $server = new Connection();
     $receive = new ReceiveAPI();
    
     //Retrieve information.
     $row = $_POST['row'];
    
    //Connect to database.
    $server->connectDB();
    $output = $receive->getAllData($row); //basically method to query database.
    print(json_encode($output)); //output is result of the query given back to app.
    
    //Disconnect from database.
    $server->disconnectDB();
    ?>
    

    これは私が最近使用した例です。 phpファイルに注意してください。 Connection.phpをインポートします。これはデータベースへの接続を処理するだけです。したがって、これをMYSQLデータベースに接続するためのコードに置き換えるだけです。また、SendAPI.php(無視してかまいません)をインポートしました。これは、データを送信するための私のクラスでした。基本的に、私が使用したいクエリのいくつかが含まれていました。 sendAccelerationData()など。基本的に、クラスはストアドプロシージャのクラスと似ていました。

    データベースへの接続方法は、Connection.phpクラスにありました。

    //Connect to a database.
    public function connectDB()
    {
        //Connect to SQL server.
        $this->connection = mysql_connect($this->hostName,$this->user,$this->password);
    
        if (!$this->connection) 
        {
            die('Could not connect: ' . mysql_error());
        }
        //Print("Connected to MySQL. </br>");
    
        //Select Database to query.
        $db_selected = mysql_select_db($this->database);
        if (!$db_selected) 
        {
            die('Could not select database' . mysql_error());
        }
        //Print("Database \"$this->database\" selected. </br>");
    }
    
    //Disconnect from database.
    public function disconnectDB() 
    {
        mysql_close($this->connection);
    }
    }
    

    エラーメッセージで、データベース名/テーブル名などのデータベースを出力したことに注意してください。これは単なるトラブルシューティングでした。私はこれに反対するようアドバイスします。その情報をユーザーに表示したくない。




    1. CTEを使用してSQLServerクエリ出力の欠落日を入力する

    2. BIGINTUNSIGNED値が範囲外です

    3. RoomPersistenceLibraryをAndroidプロジェクトにインポートする方法

    4. PHPを使用してmysqlから値を読み取るにはどうすればよいですか?