实验报告
课程名称 | 基于Android平台移动互联网开发 | 实验日期 | 2016年5月6日 | ||
实验项目名称 | SQLite数据库操作 | 实验地点 | S30010 | ||
实验类型 | □验证型 √设计型 □综合型 | 学 时 |
| ||
一、实验目的及要求(本实验所涉及并要求掌握的知识点) | |||||
| |||||
二、实验环境(本实验所使用的硬件设备和相关软件) | |||||
(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中的一行跳转到联系人详细信息页面。但是不知道怎样把数据库中写入的信息显示出来。 | |||||
实验评语 |
| ||||
实验成绩 |
| 指导教师签名: 年 月 日 | |||