实验8 SQLite数据库操作

实验报告

课程名称

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

实验日期

2016年5月6日

实验项目名称

SQLite数据库操作

实验地点

S30010

实验类型

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

学  时

4

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

【目的】

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

【要求】

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

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

(1)PC机

(2)操作系统:Windows XP

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

三、实验内容及步骤

1、先按照实验要求,搭建好页面布局文件

2、写数据库文件类LcAddreOpenHelper,创建好联系人数据库和表,用于存放用户输入的联系人信息,在布局页面类调用该方法,实现数据库的添加数据操作

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

 

代码:

创建数据库,添加联系人主要代码

package com.example.lcaddressbook;

 

import android.app.Activity;

import android.content.ContentValues;

import android.database.Cursor;

import android.database.sqlite.SQLiteDatabase;

import android.os.Bundle;

import android.util.Log;

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{

    EditText name,phone,mobile,email,postAddre,address,comp;

    ImageButton save,ib;

    

    

    private LcAddreOpenHelper dbHelper;

      private SQLiteDatabase db ;

      private String nameString;

@Override

protected void onCreate(Bundle savedInstanceState) {

   // TODO Auto-generated method stub

   super.onCreate(savedInstanceState);

   setContentView(R.layout.detail);

   name=(EditText)findViewById(R.id.editText1);

   phone=(EditText)findViewById(R.id.editText2);

   mobile=(EditText)findViewById(R.id.editText3);

   email=(EditText)findViewById(R.id.editText4);

   postAddre=(EditText)findViewById(R.id.editText5);

   address=(EditText)findViewById(R.id.editText6);

   comp=(EditText)findViewById(R.id.editText7);

   save=(ImageButton)findViewById(R.id.imageButtonsave);

  

   ib=(ImageButton)findViewById(R.id.imageButton1);

   registerForContextMenu(name);

  

  

   save.setOnClickListener(new OnClickListener() {

     

      @Override

      public void onClick(View arg0) {

         // TODO Auto-generated method stub

         dbHelper = new LcAddreOpenHelper(DetailActivity.this, "personnal_contacts.db",

               null, 1);

         final SQLiteDatabase db = dbHelper.getReadableDatabase();

         String nameString = name.getText().toString();

         String phoneString = phone.getText().toString();

         String mobileString = mobile.getText().toString();

         String emailString = email.getText().toString();

         String postAddreString = postAddre.getText().toString();

         String addressString = address.getText().toString();

         String compString = comp.getText().toString();

 

         Log.i("test", "11111111");

         // Cursor cursor=db.query(userTable, null, "name=?", new

         // String[]{usernameString}, null, null, null);

         Log.i("test", "22222222");

         //if (nameString.equals("") || phoneString.equals("") || mobileString.equals("") || emailString.equals("") || postAddreString.equals("") || addressString.equals("") || compString.equals("") ) {

         if (nameString.equals("") || phoneString.equals("") || mobileString.equals("") ) {

 

            Toast.makeText(DetailActivity.this, "请输入姓名/电话",

                  Toast.LENGTH_LONG).show();

         } else {

            Cursor cursor = db.rawQuery(

                  "select * from contacts where name=?",

                  new String[] { nameString }, null);

            if (cursor.getCount() > 0) {

               Toast.makeText(DetailActivity.this, "该联系人已经存在!",

                     Toast.LENGTH_LONG).show();

 

            }

 

            else {

               ContentValues values = new ContentValues();

               // 开始填数据

               values.put("NAME", name.getText().toString());

               values.put("PHONE", phone.getText().toString());

               values.put("MOBILE", mobile.getText().toString());

               values.put("EMAIL", email.getText().toString());

               values.put("POST", postAddre.getText().toString());

               values.put("ADDRE", address.getText().toString());

               values.put("COMP", comp.getText().toString());

               db.insert("TABLE_NAME", null, values);

               values.clear();

               Toast.makeText(DetailActivity.this,

                     "添加成功" ,

                     Toast.LENGTH_LONG).show();

              

              

            }

            }

         }

});

  

}//关闭数据库

  

     @Override

     protected void onDestroy() { // TODO Auto-generated method stub

     super.onDestroy(); if (db!=null&&db.isOpen()) { db.close(); } }

}

显示ListView主要代码

@Override

   protected void onCreate(Bundle savedInstanceState) {

      super.onCreate(savedInstanceState);

      setContentView(R.layout.activity_main);

     

      add = (ImageButton) findViewById(R.id.imageButton1);

      del = (ImageButton) findViewById(R.id.imageButton2);

      lv = (ListView) findViewById(R.id.listView1);

 

      dbHelper= new LcAddreOpenHelper(MainActivity.this, "personnal_contacts",null, 1);

      db = dbHelper.getReadableDatabase();

      // 查询数据库,获取通讯表

      Cursor cursor = db.rawQuery("select name from contacts", null);

      inflateList(cursor);// 把通讯表显示在ListView上

  

      //chaxun = (Button) findViewById(R.id.button1)

      add.setOnClickListener(new OnClickListener() {

 

         @Override

         public void onClick(View arg0) {

            // TODO Auto-generated method stub

            Intent intent = new Intent();

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

            startActivity(intent);

         }

      });

     

   }

 

   private void inflateList(Cursor cursor) {

      int count = cursor.getCount();

      Log.i("vvvvvvvvvvvvvvvvvvvvvvvvv", "dd:" + count);

      String[] name = new String[count];

      Log.i("vvvvvvvvvvvvvvvvvvvvvvvvv", "uu:" + name.length);

      int a = 0;

      while (cursor.moveToNext()) {

         name[a] = cursor.getString(cursor.getColumnIndex("NAME"));

         Log.i("vvvvvvvvvvvvvvvvvvvvvvvvv", name[a]);

         a++;

      }

 

//System.out.printf("saddddddddddddddd");

      // 生成动态数组,加入数据

      final ArrayList<HashMap<String, Object>> listItem = new ArrayList<HashMap<String, Object>>();

      for (int i = 0; i < count; i++) {

         HashMap<String, Object> map = new HashMap<String, Object>();

        

         map.put("imageView1", R.drawable.logo);// 图像资源的ID

         map.put("textView1", name[i]);

         listItem.add(map);

         // 生成适配器的Item和动态数组对应的元素

         SimpleAdapter listItemAdapter = new SimpleAdapter(

               MainActivity.this, listItem,

               R.layout.item,// 数据源

               // ListItem的XML实现

               // 动态数组与ImageItem对应的子项

               new String[] { "ItemImage", "ItemText" },

               // ImageItem的XML文件里面的一个ImageView,一个TextView ID

               new int[] { R.id.imageView1, R.id.textView1}

 

         );

         // 添加并且显示

         lv.setAdapter(listItemAdapter);

      }

   }

 

 

运行结果:(截图)

 

 

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

1、本次实验用到SQLite数据库操作,相对来说难度很大,涉及创建数据库,表,然后添加数据到数据库等操作

2、在进行读取数据库内容的实现上遇到不少困难,例如数据库语句出错,使程序出现崩溃,在页面布局编排上出现相关控件关联不对应,导致程序出错。

实验评语

 

实验成绩

 

指导教师签名:              年   月   日

           
posted @ 2016-05-13 08:17  17蔡利聪  阅读(389)  评论(0编辑  收藏  举报