ANDROID: (DELETE) การลบข้อมูลบน MYSQL



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

–  เชื่อมต่อฐานข้อมูล Mysql บนเซิฟเวอร์

–  (Insert) การเพิ่มข้อมูลบน Mysql

–  (Update) การแก้ไขข้อมูลบน Mysql

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

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

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

!! ใช้ฐานข้อมูลชุดเดิมจากบทความ เชื่อมต่อฐานข้อมูล 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

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

DELETE (ลบข้อมูล)

 DELETE_DATA.PHP

ไฟล์นี้ทำการรับค่า id ผ่าน http post (แอนดอร์ยส่งมา) เพื่อที่จะนำมาลบข้อมูลจากตาราง member ตาม id ที่เราส่งมา

!! ไฟล์นี้อยู่ในเซิฟเวอร์นะครับ หรือ 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");   
 $id = $_POST['id'];  
 $sql="DELETE FROM member WHERE id = $id";   
 $res=mysql_query($sql);   
 mysql_close();   
 ?>   

 UPDATE_ACTIVITY.JAVA

ในตัวอย่างการลบข้อมูลผมได้เพิ่มปุ่ม Delete ในคลาส Update_Activity (ใช้ Activity เดี่ยวกับการ Update ซะเลย) และทำการเรียกฟังก์ชั่น confirmDialog() เมื่อมีการกดปุ่ม Delete

       case R.id.btn_Delete:  
         confirmDialog();  

และเมื่อฟังก์ชั่น confirmDialog() ทำงานก็จะมี Dialog แสดงข้อความว่าเราต้องการจะลบข้อมูลจริงหรือไม่และมีปุ่ม “ตกลง” และ “ยกเลิก” ในกรณีที่เราเลือก “ตกลง” จะเรียกฟังก์ชั่น deleteUser() ของคลาส MysqlConnector ให้ทำงาน (ก็คือให้ลบ user) แต่ในกรณีที่เลือก “ยกเลิก” Dialog ดังกล่าวก็ขะหายไป

   private void confirmDialog(){  
     AlertDialog.Builder alertDialogBuilder = new AlertDialog.Builder(this);  
     // set title  
     alertDialogBuilder.setTitle("ลบข้อมูล");  
     // set dialog message  
     alertDialogBuilder  
         .setMessage("เลือกตกลงเพื่อยืนยันการลบข้อมูล")  
         .setCancelable(false)  
         .setNegativeButton("ตกลง",new DialogInterface.OnClickListener() {  
           public void onClick(DialogInterface dialog,int click_id) {  
             MysqlConnector.deleteUser(id);  
             Update_Activity.this.finish();  
           }  
         })  
         .setPositiveButton("ยกเลิก",new DialogInterface.OnClickListener() {  
           public void onClick(DialogInterface dialog,int id) {  
             // if this button is clicked, just close  
             // the dialog box and do nothing  
             dialog.cancel();  
           }  
         });  
     // create alert dialog  
     AlertDialog alertDialog = alertDialogBuilder.create();  
     // show it  
     alertDialog.show();  
   }  

MYSQLCONNECTOR.JAVA

ในคลาส MysqlConnector มีการเพิ่มฟังก์ชั่น deleteUser() เพื่อลบข้อมูลในตาราง member  (รู้สึกขัดใจกับตารางชื่อ member แต่ฟังก์ชั่นชื่อ deleteUser() แต่ก็ขี้เกียจแก้จัง) โดยส่วนแรกจะทำการเตรียมพารามิเตอร์เพื่อส่งไปยังเซิฟเวอร์โดยมีพารามิเตอร์ตัวเดียวคือ id

       ArrayList<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>();  
       nameValuePairs.add(new BasicNameValuePair("id",id));  

ขั้นตอนต่อไปคือส่ง Http post ไปยัง delete_data.php ก็เป็นอันเสร็จเรียบร้อย

       HttpClient httpclient = new DefaultHttpClient();  
       HttpPost httppost = new HttpPost("yout_url/delete_data.php");   
       httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs,"UTF-8"));  
       HttpResponse response = httpclient.execute(httppost);  
       HttpEntity entity = response.getEntity();  
       is = entity.getContent();  

สุดท้ายแล้วบนความต่อเนื่องของการเชื่อมต่อและการใช้คำสั่งพื้นฐานกับฐานข้อมูล Mysql ก็จบลงเพียงเท่านี้ ซึ้งหลักการสำคัญคือเราไม่ได้ใช้แอนดอร์ยในการเชื่อมต่อกับฐานข้อมูล Mysql โดยตรงแต่เราเรียกใช้ php ให้ทำงานและอ่านผลลัพธ์นั้นส่งกลับมาในรูปของ JSON อีกทีนึงโดยหวังงว่าผู่ที่พบเจอบทความนี้จะสามารถนำไปประยุกต์ใช้ได้ครับ

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

Screenshot_2015-03-08-21-14-02
Screenshot_2015-03-08-21-28-27
Screenshot_2015-03-08-21-28-31