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

mySQLをAndroidに接続する

    これが例です

    編集: 最初にデータベース名を作成しますdbname MySqlのwampまたはサーバーで、 emp_infoという名前のテーブルを作成します 2つのフィールドが追加されたid および名前

    ここでのシナリオは、従業員のIDと名前をEDITTEXTからMYSQLサーバーデータベースに挿入することです

    グローバル変数は

      String name;
        String id;
        InputStream is=null;
        String result=null;
        String line=null;
        int code;
    

    アクティビティコードの場合

    import java.io.BufferedReader;
    import java.io.InputStream;
    import java.io.InputStreamReader;
    import java.util.ArrayList;
    
    import org.apache.http.HttpEntity;
    import org.apache.http.HttpResponse;
    import org.apache.http.NameValuePair;
    import org.apache.http.client.HttpClient;
    import org.apache.http.client.entity.UrlEncodedFormEntity;
    import org.apache.http.client.methods.HttpPost;
    import org.apache.http.impl.client.DefaultHttpClient;
    import org.apache.http.message.BasicNameValuePair;
    import org.json.JSONObject;
    
    import android.app.Activity;
    import android.os.Bundle;
    import android.os.StrictMode;
    import android.util.Log;
    import android.view.View;
    import android.widget.Button;
    import android.widget.EditText;
    import android.widget.Toast;
    
    public class add extends Activity {
    
        String name;
        String id;
        InputStream is=null;
        String result=null;
        String line=null;
        int code;
        String tobed = null;
    
    
    
        @Override
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.add);
            StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder().permitAll().build();
            StrictMode.setThreadPolicy(policy);
            final EditText e_id=(EditText) findViewById(R.id.editText1);
            final EditText e_name=(EditText) findViewById(R.id.editText2);
            Button insert=(Button) findViewById(R.id.button1);
    
            insert.setOnClickListener(new View.OnClickListener() {
    
            @Override
            public void onClick(View v) {
                // TODO Auto-generated method stub
    
                id = e_id.getText().toString();
                name = e_name.getText().toString();
    
                insert();
            }
        });
        }
    }
    

    データの挿入方法

    public void insert()
        {
            ArrayList<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>();
    
          // put the values of id and name in that variable
        nameValuePairs.add(new BasicNameValuePair("id",id));
        nameValuePairs.add(new BasicNameValuePair("name",name));
    
            try
            {
            HttpClient httpclient = new DefaultHttpClient();
    
              // here is the php file
             // for local use for example if you are using wamp just put the file in www/project folder
            HttpPost httppost = new HttpPost("http://10.0.2.2/project/insert2.php");
            // if the file is on server
            HttpPost httppost = new HttpPost("http://example.com/insert2.php");
                httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs));
                HttpResponse response = httpclient.execute(httppost); 
                HttpEntity entity = response.getEntity();
                is = entity.getContent();
                Log.e("pass 1", "connection success ");
        }
            catch(Exception e)
        {
                Log.e("Fail 1", e.toString());
                Toast.makeText(getApplicationContext(), "Invalid IP Address",
                Toast.LENGTH_LONG).show();
        }     
    
            try
            {
                BufferedReader reader = new BufferedReader
                (new InputStreamReader(is,"iso-8859-1"),8);
                StringBuilder sb = new StringBuilder();
                while ((line = reader.readLine()) != null)
            {
                    sb.append(line + "\n");
                }
                is.close();
                result = sb.toString();
            Log.e("pass 2", "connection success ");
        }
            catch(Exception e)
        {
                Log.e("Fail 2", e.toString());
        }     
    
        try
        {
    
                // get the result from php file
                JSONObject json_data = new JSONObject(result);
                code=(json_data.getInt("code"));
    
                if(code==1)
                {
            Toast.makeText(getBaseContext(), "Inserted Successfully",
                Toast.LENGTH_SHORT).show();
                }
                else
                {
             Toast.makeText(getBaseContext(), "Sorry, Try Again",
                Toast.LENGTH_LONG).show();
                }
        }
        catch(Exception e)
        {
                Log.e("Fail 3", e.toString());
                Log.i("tagconvertstr", "["+result+"]");
        }
        }
    

    これがinsert2.phpファイルです

    <?php
        // this variables is used for connecting to database and server
        $host="yourhost";
        $uname="username";
        $pwd='pass';
        $db="dbname";
    
         // this is for connecting
        $con = mysql_connect($host,$uname,$pwd) or die("connection failed");
        mysql_select_db($db,$con) or die("db selection failed");
    
        // getting id and name from the client
         if(isset($_REQUEST)){
        $id=$_REQUEST['id'];
        $name=$_REQUEST['name'];}
    
        $flag['code']=0;
    
        // query for insertion
        // table name emp_info and its fields are id and name
        if($r=mysql_query("insert into emp_info values('$name','$id') ",$con))
        {
            // if query runs succesfully then set the flag to 1 that will be send to client app
            $flag['code']=1;
            echo"hi";
        }
          // send result to client that will be 1 or 0
        print(json_encode($flag));
        //close
        mysql_close($con);
    
    
     ?>
    

    2番目の編集:-

    データを読み取るためにasyntaskを実行しました

    ここでは、データがリストビューに表示されます。

    public class read extends Activity {
         private String jsonResult;//
          // use this if your file is on server
         private String url = "http://exmaple.com/read.php";
         // use this if you are locally using
         // private String url = "http://10.0.2.2/project/read.php";
         private ListView listView;
         Context context;
         String name;
            String id;
            InputStream is=null;
            String result=null;
            String line=null;
            int code;
         @Override
         protected void onCreate(Bundle savedInstanceState) {
          super.onCreate(savedInstanceState);
          setContentView(R.layout.read);
          StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder().permitAll().build();
          StrictMode.setThreadPolicy(policy);
          context = this;
          listView = (ListView) findViewById(R.id.listView1);
          accessWebService();
         }
    

    accessWebServiceメソッド

           public void accessWebService() {
           JsonReadTask task = new JsonReadTask();
           task.execute(new String[] { url });
             }
    

    JsonReadTaskクラスの場合

    private class JsonReadTask extends AsyncTask<String, Void, String> {
          // doInBackground Method will not interact with UI 
          @Override
    
          protected String doInBackground(String... params) {
           // the below code will be done in background
           HttpClient httpclient = new DefaultHttpClient();
           HttpPost httppost = new HttpPost(params[0]);
           try {
            HttpResponse response = httpclient.execute(httppost);
            jsonResult = inputStreamToString(
              response.getEntity().getContent()).toString();
           }
    
           catch (ClientProtocolException e) {
            e.printStackTrace();
            Log.e("Fail 12", e.toString());
           } catch (IOException e) {
               Log.e("Fail 22", e.toString());
            e.printStackTrace();
           }
           return null;
          }
    
          private StringBuilder inputStreamToString(InputStream is) {
           String rLine = "";
           StringBuilder answer = new StringBuilder();
           BufferedReader rd = new BufferedReader(new InputStreamReader(is));
    
           try {
            while ((rLine = rd.readLine()) != null) {
             answer.append(rLine);
            }
           }
    
           catch (IOException e) {
            // e.printStackTrace();
            Toast.makeText(getApplicationContext(),
              "Error..." + e.toString(), Toast.LENGTH_LONG).show();
           }
           return answer;
          }
    
          // after the doInBackground Method is done the onPostExecute method will be called
          @Override
          protected void onPostExecute(String result) {
          // here you can interact with UI
           ListDrwaer();
          }
         }// end async task
    

    ListDrawaerメソッド

     // build hash set for list view
         public void ListDrwaer() {
          List<Map<String, String>> employeeList = new ArrayList<Map<String, String>>();
    
          try {
            // getting data from server 
           JSONObject jsonResponse = new JSONObject(jsonResult);
           if(jsonResponse != null)
           {
           JSONArray jsonMainNode = jsonResponse.optJSONArray("emp_info");
    
           // get total number of data in table
           for (int i = 0; i < jsonMainNode.length(); i++) {
            JSONObject jsonChildNode = jsonMainNode.getJSONObject(i);
    
            String name = jsonChildNode.optString("name"); // here name is the table field
            String number = jsonChildNode.optString("id"); // here id is the table field
            String outPut = name + number ; // add two string to show in listview 
            employeeList.add(createEmployee("employees", outPut));
           }
           }
          } catch (JSONException e) {
           Toast.makeText(getApplicationContext(), "Error" + e.toString(),
             Toast.LENGTH_SHORT).show();
          }
    
          SimpleAdapter simpleAdapter = new SimpleAdapter(this, employeeList,
            android.R.layout.simple_list_item_1,
            new String[] { "employees" }, new int[] { android.R.id.text1 });
          listView.setAdapter(simpleAdapter);
         }
    
         private HashMap<String, String> createEmployee(String name, String number) {
          HashMap<String, String> employeeNameNo = new HashMap<String, String>();
          employeeNameNo.put(name, number);
          return employeeNameNo;
         }
        }
    

    およびread.phpファイルコード

    <?php
    $host="localhost"; //replace with database hostname
    $username="root"; //replace with database username
    $password=""; //replace with database password
    $db_name="dbname"; //replace with database name
    
    $con=mysql_connect("$host", "$username", "$password")or die("cannot connect");
    mysql_select_db("$db_name")or die("cannot select DB");
    $sql = "select * from emp_info";
    $result = mysql_query($sql);
    $json = array();
    
    if(mysql_num_rows($result)){
    while($row=mysql_fetch_assoc($result)){
    $json['emp_info'][]=$row;
    }
    }
    mysql_close($con);
    echo json_encode($json);
    ?> 
    

    この挿入と読み取りを使用する前にインターネット接続を確認する場合は、このメソッドを使用してください。つまり、このメソッドをifelseステートメントに入れてください

     public boolean isOnline() {
                    ConnectivityManager cm =
                        (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
                    NetworkInfo netInfo = cm.getActiveNetworkInfo();
                    if (netInfo != null && netInfo.isConnectedOrConnecting()) {
                        return true;
                    }
                    return false;
                }
    

    更新と削除の場合は、insertメソッドを使用して値をサーバーに渡し、insert2.phpのクエリを変更して次のようなものを更新します

    if($r=mysql_query("UPDATE emp_info SET employee_name = '$name' WHERE employee_name = '$id'",$con))
        {
            $flag['code']=1;
        } 
    

    削除用

    if($r=mysql_query("DELETE FROM emp_info WHERE employee_name = '$name'",$con))
        {
            $flag['code']=1;
            echo"hi";
        }
    

    また、これを学んだら、次のタスクでは、Androidではメインスレッドでの作業が適切ではないため、スレッド化とAsyntaskを学習してさらに改善する必要があります。 UIが邪魔されず、インターネットの処理がバックグラウンドで実行されるように、Readingメソッドで説明したようにこの挿入メソッドをAsyntaskに配置するだけです。

    注:

    新しいバージョンのphpの場合は、<?phpの後にこの行を追加します スニペット

    error_reporting(E_ALL ^ E_DEPRECATED);
    



    1. field.typesを使用したRMySQLdbWriteTable

    2. MySQLでインデックス付きビューを作成することは可能ですか?

    3. MySQLデータベースエンジンの操作

    4. MySQL日付が1か月を超える場合はどこですか?