ANDROID: (INSERT) การเพิ่มข้อมูลบน MYSQL

สวัสดีครับ บทความนี้ผมมาอธิบายต่อจากบทความที่แล้ว (เชื่อมต่อฐานข้อมูล Mysql บนเซิฟเวอร์) ซึ้งผมได้แบ่งเนื้อหามาอธิบายทีละเล็กน้อย ในส่วนนี้คือการเพิ่มข้อมูล(Insert) ลงฐานข้อมูล Mysql เอาหละไปดูโค้ดกัน

!! ควรย้อนไปอ่านบทความ “เชื่อมต่อฐานข้อมูล Mysql บนเซิฟเวอร์” ก่อนนะครับ

 

โค้ดตัวอย่าง

สามารถดาวน์โหลดโปรเจ็คตัวอย่างได้ที่ -> MysqlExample(Insert)

!! ใช้ฐานข้อมูลชุดเดิมจากบทความ เชื่อมต่อฐานข้อมูล Mysql บนเซิฟเวอร์

อธิบายฐานข้อมูล

ขออธิบายถึงฐานข้อมูลของตัวอย่างที่แล้ว ในฐานข้อมูลมี 1 ตารางชื่อว่า member โดยมีโครงสร้างของตารางตามที่แสดงใน รูปที่ 1 และ มีข้อมูลตัวอย่างในตารางตาม รูปที่ 2

Screenshot from 2014-12-18 22:04:18รูปที่ 1 แสดงรายละเอียดตาราง member

Screenshot from 2014-12-18 22:12:53

รูปที่ 2 ตัวอย่างข้อมูลในตาราง member

 

INSERT (เพิ่มข้อมูล)

INSERT_DATA.PHP

ไฟล์นี้ทำการรับค่า username และ pass ผ่าน http post (แอนดอร์ยส่งมา) และเพิ่มข้อมูลลงฐานข้อมูล Mysql

!! ไฟล์นี้อยู่ในเซิฟเวอร์นะครับ หรือ localhost

!! ในไฟล์นี้ผู้อ่านต้องทำการเปลี่ยน รายละเอียดในการเชื่อมต่อฐานข้อมูลเป็นของตัวเองในส่วนที่ผมไฮไลท์สีแดงไว้

 <?php   
 header("content-type:text/javascript;charset=utf-8");    
 $con=mysql_connect('mysql_server','mysql_username','mysql_pass')or die(mysql_error());    
 mysql_select_db('db_name')or die(mysql_error());   
 mysql_query("SET NAMES UTF8");   
 $username = $_POST['username'];  
 $pass = $_POST['pass'];  
 $sql="INSERT INTO member (username,pass) VALUES ('$username','$pass')";   
 $res=mysql_query($sql);   
 $arr = array('id' => mysql_insert_id()."");  
 print('['.json_encode($arr).']');   
 mysql_close();   
 ?>   

INSERT_ACTIVITY.JAVA

Activity นี้กำหนดให้เมื่อเรากดคลิ๊กที่ปุ่ม Insert จะทำการเรียกใช้ฟังก์ชั่น insertUser ในคลาส MysqlConnector โดยนำข้อมูลจาก EditText มาเป็นข้อมูลในการเพิ่มครับ (คือ username และ pass)

   @Override  
   public void onClick(View v) {  
     switch (v.getId()){  
       case R.id.btn_Insert:  
         Intent intent = new Intent(this,Insert_Activity.class);  
         startActivity(intent);  
         break;  
       default:  
         break;  
     }  
   }  

MYSQLCONNECTOR.JAVA

ในฟังก์ชั่น insertUser ทำการรับพารามิเตอร์ 2 ค่าคือ username และ pass ในการเพิ่มข้อมูลลงในตาราง member โดยทำการเรียกใช้ insert_data.php

!! หากไม่สามารถเชื่อมต่อไปยัง url ได้ logcat จะแสดงว่า “Error in http connection” .. แสดงว่า url ผิดหรืออินเตอร์เน็ตไม่สามารถเชื่อมต่อกับ url ได้

 try{  
       // Define Data  
       ArrayList<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>();  
       nameValuePairs.add(new BasicNameValuePair("username",username));  
       nameValuePairs.add(new BasicNameValuePair("pass",pass));  
       // Connect Server  
       HttpClient httpclient = new DefaultHttpClient();  
       HttpPost httppost = new HttpPost("..."); //   
       httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs,"UTF-8"));  
       HttpResponse response = httpclient.execute(httppost);  
       HttpEntity entity = response.getEntity();  
       is = entity.getContent();  
     } catch (Exception e) {  
       Log.d("log_err", "Error in http connection " + e.toString());  
       return -1;  
     }  

ส่วนที่ 2 จะทำการอ่านผลลัพธ์ของ insert_data.php (ส่งค่า id ล่าสุดที่ทำการ insert) มาเก็บไว้เป็น string

 try {  
       BufferedReader reader = new BufferedReader(new InputStreamReader(is,"UTF-8"));  
       StringBuilder sb = new StringBuilder();  
       String line = null;  
       while ((line = reader.readLine()) != null) {  
         sb.append(line);  
       }  
       is.close();  
       js_result = sb.toString();  
     } catch (Exception e) {  
       Log.e("log_tag", "Error converting result " + e.toString());  
       return -1;  
     }  

และส่วนสุดท้ายเราจะนำ string ที่ได้มาแปลงเป็น JSONArray และเก็บค่าไว้ในตัวแปร id (ในกรณีนี้เราส่งกลับมาแค่ค่าเดียว)

!! หาก logcat แสดงข้อมูลว่า “Error parsing data ….” แสดงว่าไม่สามารถแปลงผลลัพธ์ที่ได้จาก php มาเป็น JSONArray ส่วนมากแล้วจะมากจากผลลัพธ์ที่ได้จาก php ผิดพลาด

 try {  
       final JSONArray jArray = new JSONArray(js_result);  
       for (int i = 0; i < jArray.length(); i++) {  
         String[] comment = new String[3];  
         JSONObject jo = jArray.getJSONObject(i);  
         id = Integer.parseInt((jo.get("id").toString()));  
       }  
     } catch (JSONException e) {  
       Log.e("log_tag", "Error parsing data " + e.toString());  
       return -1;  
     }  

การเพิ่มข้อมูลลงใน Mysql ก็จบเพียงเท่านี้ครับยังไงบทความต่อไปจะมาอธิบายเพิ่มเติมในส่วน Update ซึ่งก็คล้ายๆกันครับ

 

ผลลัพธ์ตัวอย่าง

Screenshot_2015-01-31-00-40-52Screenshot_2015-01-31-00-41-19Screenshot_2015-01-31-00-41-26