• 实验八:SQLite数据库操作


    实验报告

    课程名称

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

    实验日期

    2016年5月6日

    实验项目名称

    SQLite数据库操作

    实验地点

    S30010

    实验类型

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

    学  时

     

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

    1. 设计一个个人通讯录,掌握Android平台下的数据库开发,该个人通讯录主要包括联系人列表和联系人详细信息等界面。
    2. 程序主界面是通讯录的目录显示手机上联系人的名称。点击联系人的姓名可以显示联系人的详细信息。单击图标按钮可以添加联系人和删除联系人。

     

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

    (1)PC机

    (2)操作系统:Windows XP

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

    三、实验内容及步骤

    (1)  确定数据库的数据结构。

    (2)  新建工程,修改布局文件,定义字符串资源。

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

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

    (5)  开发数据库辅助类MyOpenHelper类

    (6)  DetailActivity端开发实现数据库增加、删除、修改记录等操作

    (7)  新建Activity名为DetailActivity.java,实现联系人详细信息显示功能。

     

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

    代码:

    MainActivity类代码:

    public class MainActivity extends Activity {

        private ListView lv;

        private ImageButton addButton;

        private ImageButton deleteButton;

        protected void onCreate(Bundle savedInstanceState) {

            super.onCreate(savedInstanceState);

            setContentView(R.layout.activity_main);

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

            final ArrayList<HashMap<String, Object>> listItem=new ArrayList<HashMap<String,Object>>();    //定义一个动态数组

            for (int i = 0; i < 3; i++) {                      //在数组中存放数据

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

                map.put("DetailName", R.id.nametext);   

                map.put("DetailMobile", R.id.mobiletext);

                listItem.add(map);     

            }

            SimpleAdapter simpleAdapter=new SimpleAdapter(MainActivity.this, listItem, R.layout.item,

               new String[]{"DetailName","DetailMobile"} , new int[]{R.id.nametext,R.id.mobiletext});

            //第一个参数:上下文,第二个参数:需要绑定的数据,第三个参数:每一行的布局,第四个参数:动态数组中的数据源,第五个参数:布局文件的id

           

            lv.setAdapter(simpleAdapter);   //为ListView绑定适配器

            lv.setOnItemClickListener(new OnItemClickListener() {

                public void onItemClick(AdapterView<?> arg0, View arg1, int arg2,long arg3) {

                    Intent intent=new Intent();

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

                    startActivity(intent);

                    finish();

                }

            }); 

         

            addButton=(ImageButton)findViewById(R.id.addButton);

            addButton.setOnClickListener(new OnClickListener() {

                public void onClick(View arg0) {

                    Intent intent2=new Intent();

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

                    startActivity(intent2);

                    finish();  

                }

            });

        }

    DetailActivity类代码:

    public class DetailActivity extends Activity {

         private EditText namEditText;

         private EditText mobilEditText;

         private EditText emailEditText;

         private EditText addressEditText;

         private MyOpenHelper helper;

         private ImageButton saveButton,backButton;

         protected void onCreate(Bundle savedInstanceState) {

            super.onCreate(savedInstanceState);

            setContentView(R.layout.detail);

            namEditText=(EditText)findViewById(R.id.nametext);

            mobilEditText=(EditText)findViewById(R.id.emailtext);

            emailEditText=(EditText)findViewById(R.id.emailtext);

            addressEditText=(EditText)findViewById(R.id.addresstext);

            saveButton=(ImageButton)findViewById(R.id.save_imagebtn);

            saveButton.setOnClickListener(new OnClickListener() {

                public void onClick(View arg0) {

                   helper=new MyOpenHelper(DetailActivity.this, "contacts.db",null, 1);

                   SQLiteDatabase db = helper.getReadableDatabase();     //获得可读的数据库

                   ContentValues values = new ContentValues();

                   String  name2=namEditText.getText().toString();

                   String mobile2=mobilEditText.getText().toString();

                   String email2=emailEditText.getText().toString();

                   String address2=addressEditText.getText().toString();

                    // 开始填数据

                    if (name2.equals("")||mobile2.equals("")||email2.equals("")||address2.equals("") ){   

                        Toast.makeText(DetailActivity.this, "请输入联系人信息",Toast.LENGTH_LONG).show();}

                    else

                             Cursor cursor=db.rawQuery("select * from contacts where name=? ",new String[]{name2});

                                                     //rawQuery方法的第一个参数为select语句;第二个参数为select语句中占位符参数的值

                    //Log.i("test","111");

                    if (cursor.getCount()<=0) {                                //如果获得的查询记录小于0

                            values.put("name",namEditText.getText().toString());     //向表格中插入数据

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

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

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

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

                            values.clear();

                            Toast.makeText(DetailActivity.this, "保存成功",Toast.LENGTH_LONG).show();

                        }else {                                                   //如果获得的查询记录大于0,数据库中已存在该用户名

                            Toast.makeText(DetailActivity.this, "已存在该联系人",Toast.LENGTH_LONG).show();}

                    }

                }

            });

            backButton=(ImageButton)findViewById(R.id.goback_imagebtn);

            backButton.setOnClickListener(new OnClickListener() {

                public void onClick(View arg0) {

                    Intent intent=new Intent();

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

                    startActivity(intent);

                    finish();  

                }

            });  

         }

    }

    MyOpenHelper类代码:

    public class MyOpenHelper extends SQLiteOpenHelper {

        public static final String CREATE_CONTACTS="create table contacts(id integer primary key autoincrement,name,mobile,email,address)";

        private Context myContext;

        public MyOpenHelper(Context context, String name, CursorFactory factory,int version) {

            super(context, name, factory, version);       //调用父类构造器

            myContext=context;

        }

        public void onCreate(SQLiteDatabase db) {

            db.execSQL(CREATE_CONTACTS);

            Toast.makeText(myContext, "数据库创建成功", Toast.LENGTH_LONG).show();      

        }

        public void onUpgrade(SQLiteDatabase arg0, int arg1, int arg2) {       

        }

    运行结果:(截图)

    联系人列表:                                                          


     

    当没有输入任何联系人信息,点击保存时:         输入详细联系人信息,点击保存时

       

    当输入姓名有重复值时:

     

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

        这次实验是对数据库进行增、删、查、改的操作,基础是先建立一个表,在虚拟机中建立一个数据结构。在实验中对联系人表的结构不是很清晰,导致使用cursor对象和SQLiteDataBase的rawQuery ()方法查询表中联系人姓名时出错,显示“表中没有姓名列”。再次检查MyOpenHelper类,并修改相应sql语句。最终实现保存按钮功能。在MainActivity布局中使用ListView和Adapter,实现点击ListView中的一行跳转到联系人详细信息页面。但是不知道怎样把数据库中写入的信息显示出来。

    实验评语

     

    实验成绩

     

    指导教师签名:              年   月   日

               

     

     

     

  • 相关阅读:
    RapidJavaEE 项目 开发流程说明
    [转]Ext自定义vtype动态验证
    博客园cnblogs chrome右键插件 开发
    extjs 2.0 回车切换表单,支持chrome,firefox,ie
    简单备份策略
    搜狗室验室 Web开发相关技术报告下载
    <转>记录一些BCB6的使用心得
    (转)远程桌面3389多用户登陆补丁及端口修改(XP+WIN7)
    <转>Java调用C/C++编写的第三方dll动态链接库(非native API) JNI
    清理SVN目录中.SVN
  • 原文地址:https://www.cnblogs.com/family6/p/5477317.html
Copyright © 2020-2023  润新知