代码改变世界

实验八 SQLite数据库操作

2016-05-12 22:56  33刘梦云  阅读(232)  评论(0编辑  收藏  举报

实验报告

课程名称

基于Android平台移动互联网开发

实验日期

2016年4月29日

实验项目名称

SQLite数据库操作

实验地点

S30010

实验类型

□验证型    √设计型    □综合型

学  时

2

一、实验目的及要求(本实验所涉及并要求掌握的知识点)

1. 设计一个个人通讯录,掌握Android平台下的数据库开发,该个人通讯录主要包括联系人列表和联系人详细信息等界面。

2. 程序主界面是通讯录的目录显示手机上联系人的名称。点击联系人的姓名可以显示联系人的详细信息。在按了MEMU键之后会弹出菜单栏。单击菜单栏上的按钮可以添加联系人和删除联系人。

二、实验环境(本实验所使用的硬件设备和相关软件)

(1)PC机

(2)操作系统:Windows XP

(3)软件: Eclipse, JDK1.6,Android SDK,ADT

三、实验内容及步骤

1.新建一个名为PersonalAddr的工程

2. 在res/drawable-mdpi目录下拷入程序要用的图标

3. 定义字符串资源string.xml

4. 开发布局文件activity_main.xml用于显示联系人列表。

5. layout目录下新建一个detail.xml,用于显示联系人详细信息

6. 开发数据库辅助类MyOpenHelper类,新建一个MyOpenHelper.java。

7. 接下来便进入MainActivity端的开发,实现数据库增加、删除、修改记录等操作

8. 新建一个Activity名字叫DetailActivity.java,实现联系人详细信息显示功能。

四、实验结果(本实验源程序清单及运行结果或实验结论、实验设计图)

 

代码:

MainActivity.java中:

package com.example.personaladdr;

 

import java.security.PublicKey;

import java.util.List;

 

import android.app.Activity;

import android.app.AlertDialog;

import android.content.DialogInterface;

import android.content.Intent;

import android.database.Cursor;

import android.os.Bundle;

import android.view.Menu;

import android.view.View;

import android.widget.AdapterView;

import android.widget.AdapterView.OnItemClickListener;

import android.widget.ListView;

 

public class MainActivity extends Activity {

   private MyOpenHelper db;

   private ListView lView;

   private Cursor cursor;

  

   final int MENU_ADD=Menu.FIRST;

   final int MENU_CHANGE=Menu.FIRST+1;

  

   private List<String>ids;

   private List<String>names;

   private List<String>phones;

   AlertDialog dialog;

   @Override

   protected void onCreate(Bundle savedInstanceState) {

       super.onCreate(savedInstanceState);

       setContentView(R.layout.activity_main);

       //db=new MyOpenHelper(context, name, null, 1);

       //db=new MyOpenHelper(this);

       lView=(ListView)findViewById(R.id.db_listview);

       lView.setOnItemClickListener(new OnItemClickListener() {

 

          @Override

          public void onItemClick(AdapterView<?> arg0, View arg1, int position,

                 long arg3) {

              // TODO Auto-generated method stub

              Intent intent=new Intent();

              intent.putExtra("cmd", 0);

              //0代表查询联系人,1代表添加联系人

              String contants_id=ids.get(position);

              intent.putExtra("id", contants_id);

              intent.setClass(MainActivity.this,DetailActivity.class);

              startActivity(intent);

          }

   });

       lView.setOnItemClickListener(new OnItemClickListener() {

 

          @Override

          public void onItemClick(AdapterView<?> arg0, View arg1, final int position,

                 long arg3) {

              // TODO Auto-generated method stub

         

          }

       });

}

  

   @Override

   public boolean onCreateOptionsMenu(Menu menu) {

       // Inflate the menu; this adds items to the action bar if it is present.

       return super.onCreateOptionsMenu(menu);

   }

 

}

MyOpenHelper.java中:

package com.example.personaladdr;

 

import android.R.integer;

import android.R.string;

import android.content.ContentValues;

import android.content.Context;

import android.database.Cursor;

import android.database.sqlite.SQLiteDatabase;

import android.database.sqlite.SQLiteDatabase.CursorFactory;

import android.database.sqlite.SQLiteOpenHelper;

 

public class MyOpenHelper extends SQLiteOpenHelper{

   public static final String DB_NAME="personal_contacts";

   public static final String TABLE_NAME="contacts";

   public static final String ID="_id";

   public static final String NAME="name";

   public static final String PHONE="phone";

   public static final String MOBILE="mobile";

   public static final String EMAIL="email";

   public static final String POST="post";

   public static final String ADDR="addr";

   public static final String COMP="comp";

 

   public MyOpenHelper(Context context, String name, CursorFactory factory,

          int version) {

       super(context, DB_NAME, null, 1);//调用父类构造器

       // TODO Auto-generated constructor stub

   }

 

 

   @Override

   public void onCreate(SQLiteDatabase db) {//重写onCreate方法

       // TODO Auto-generated method stub

       db.execSQL("create table if not exists"+TABLE_NAME+"("

              +ID+"integer primary key,"

              +NAME+"varchar,"

              +PHONE+"varchar,"

              +MOBILE+"varchar,"

              +EMAIL+"varchar,"

              +POST+"varchar,"

              +ADDR+"varchar,"

              +COMP+"varchar)");

   }

 

   @Override

   public void onUpgrade(SQLiteDatabase db, int arg1, int arg2) {//重写onUpgrade方法

       // TODO Auto-generated method stub

       db.execSQL("drop table if exists"+TABLE_NAME);

       onCreate(db);

   }

   public Cursor selectContants(){

       SQLiteDatabase db=this.getReadableDatabase();

       Cursor cursor=db.query(TABLE_NAME, null, null, null, null, null, null);

       return cursor;

   }

   public long insertContants(String[] strArray){

       SQLiteDatabase db=this.getWritableDatabase();

       ContentValues cv=new ContentValues();

       cv.put(NAME, strArray[0]);

       cv.put(PHONE, strArray[1]);

       cv.put(MOBILE, strArray[2]);

       cv.put(EMAIL, strArray[3]);

       cv.put(POST, strArray[4]);

       cv.put(ADDR, strArray[5]);

       cv.put(COMP, strArray[6]);

       return db.insert(TABLE_NAME, null, cv);

   }

   public void deleteContants(String id){

       SQLiteDatabase db=this.getWritableDatabase();

       String where=ID+"=?";

       String[] whereValues={id};

       db.delete(TABLE_NAME, where, whereValues);

   }

   public int updateContants(String id,String[] strArray){

       SQLiteDatabase db=this.getWritableDatabase();

       String where=ID+"=?";

       String[] whereValues={id};

       ContentValues cv=new ContentValues();

       cv.put(NAME, strArray[0]);

       cv.put(PHONE, strArray[1]);

       cv.put(MOBILE, strArray[2]);

       cv.put(EMAIL, strArray[3]);

       cv.put(POST, strArray[4]);

       cv.put(ADDR, strArray[5]);

       cv.put(COMP, strArray[6]);

       return db.update(TABLE_NAME, cv, where, whereValues);

   }

   public Cursor getContants(String id){

       SQLiteDatabase db=this.getReadableDatabase();

       String where=ID+"=?";

       String[] whereValues={id};

       Cursor cursor=db.query(TABLE_NAME, null, where, whereValues, null, null, null);

       return cursor;

   }

}

DetailActivity.java中:

package com.example.personaladdr;

 

import android.app.Activity;

import android.content.Context;

import android.content.Intent;

import android.database.Cursor;

import android.os.Bundle;

import android.view.View;

import android.view.View.OnClickListener;

import android.widget.EditText;

import android.widget.ImageButton;

import android.widget.Toast;

 

public class DetailActivity extends Activity{

   Cursor cursor;

   MyOpenHelper db;

   int id=-1;

   int i;

   int [] textIds={

   R.id.etName,R.id.etPhone,R.id.etMobile,R.id.etEmail,R.id.etPhone,R.id.etAddr,R.id.etComp

   };

   EditText [] textArray;

   ImageButton saveButton;

   //0表示查看信息,1表示添加联系人,2表示修改联系人

   int status=-1;

   @Override

   protected void onCreate(Bundle savedInstanceState) {

      // TODO Auto-generated method stub

      super.onCreate(savedInstanceState);

      setContentView(R.layout.detail);

      final ImageButton saveBtn=(ImageButton)findViewById(R.id.ibSave);

      textArray=new EditText[textIds.length];

      for(int i=0;i<textIds.length;i++){

         textArray[i]=(EditText)findViewById(textIds[i]);

      }

      Intent intent=getIntent();

      status=intent.getExtras().getInt("cmd");

      switch(status){

      case 0:

         String contants_id=intent.getExtras().getString("id");

         cursor=db.getContants(contants_id);

         int count=cursor.getCount();

         if(count==0){

            Toast.makeText(this, "对不起,没有找到指定的联系人!", Toast.LENGTH_LONG).show();

         }else {

            cursor.moveToFirst();

            textArray[0].setText(cursor.getString(1));

            textArray[1].setText(cursor.getString(2));

            textArray[2].setText(cursor.getString(3));

            textArray[3].setText(cursor.getString(4));

            textArray[4].setText(cursor.getString(5));

            textArray[5].setText(cursor.getString(6));

            textArray[6].setText(cursor.getString(7));

         }

         cursor.close();

         db.close();

         break;

         case 1:

            for(EditText et:textArray){

               et.getEditableText().clear();

            }

            break;

      }

      saveBtn.setOnClickListener(new OnClickListener() {

         @Override

         public void onClick(View arg0) {

            // TODO Auto-generated method stub

            String [] strArray=new String[textArray.length];

            for(int i=0;i<strArray.length;i++){

                strArray[i]=textArray[i].getText().toString().trim();

            }

            if(strArray[0].equals("")||strArray[1].equals("")){

                Toast.makeText(DetailActivity.this, "对不起,您填写的姓名或电话不完整!", Toast.LENGTH_LONG).show();

            }else {

               switch(status){

                case 0:

                   updateContact(strArray);

                   break;

                   case 1:

                      insertContant(strArray);

                      break;

                }

            }

         }

      });

   }

   public void insertContant(String [] strArray){

       long count = db.insertContants(strArray);

       db.close();

       if(count == -1){

               Toast.makeText(this, "添加联系人失败!", Toast.LENGTH_LONG).show();

           }

           else{

               Toast.makeText(this, "添加联系人成功!", Toast.LENGTH_LONG).show();

           }

       }

   public void updateContact(String [] strArray){

        int count = db.updateContants(id+"", strArray);    //更新数据库

        db.close();

        if(count == 1){

            Toast.makeText(this, "修改联系人成功!", Toast.LENGTH_LONG).show();

        }

        else{

            Toast.makeText(this, "修改联系人失败!", Toast.LENGTH_LONG).show();

        }

    }

}

运行结果:(截图)

 

 

五、实验总结(对本实验结果进行分析,实验心得体会及改进意见)

    实验难度很大,本来可以运行出界面填写数据的,在对ImageButton的代码实现过程中不知道发生了什么错误,导致系统发生了崩溃。

实验评语

 

实验成绩

 

指导教师签名:              年   月   日