实验四SQLite和SQLiteDatabase应用
实验四SQLite和SQLiteDatabase应用
一、实验目的
1、本次实验的目的是让大家熟悉Android中对数据库进行操作的相关的接口、类等。SQLiteDatabase这个是在android中数据库操作使用最频繁的一个类。通过它可以实现数据库的创建或打开、创建表、插入数据、删除数据、查询数据、修改数据等操作。 2、实现添加姓名,电话小例程。 ## 二、实验要求 1、完成Android开发平台的搭建及相关配置 2、创建项目并熟悉文件目录结构 3、实现例程添加姓名,电话实验步骤 三、实验步骤 项目界面:输入姓名,电话添加到数据库,由数据库查询出来显示插入的列表。 Activity重新回到运行状态,并刷新ListView显示出新增的联系人, 在 文本框 中输入要查找的联系人姓名或电话后,点击 “查找”按钮,能够显示查找到的联系人的信息, ### 1、创建项目 新建一个Android工程命名为 shiyan4 ,目录结构如下图: ### 2、布局文件 activity_main.xml <androidx.constraintlayout.widget.ConstraintLayout xmlns:android="schemas.android.com/apk/res/and…" xmlns:app="schemas.android.com/apk/res-aut…" xmlns:tools="schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" tools:context=".MainActivity"> </androidx.constraintlayout.widget.ConstraintLayout> activity_add.xml <androidx.constraintlayout.widget.ConstraintLayout xmlns:android="schemas.android.com/apk/res/and…" xmlns:app="schemas.android.com/apk/res-aut…" xmlns:tools="schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" tools:context=".AddActivity"> </androidx.constraintlayout.widget.ConstraintLayout> c a ll.xml <androidx.constraintlayout.widget.ConstraintLayout android:layout_width="match_parent" android:layout_height="match_parent"> </androidx.constraintlayout.widget.ConstraintLayout> ### 3、创建Activity DbOpenHelper.java 操作数据库的工具类 package com.example. shiyan4 ; import android.content.Context; import android.database.sqlite.SQLiteDatabase; import android.database.sqlite.SQLiteOpenHelper; public class DbOpenHelper extends SQLiteOpenHelper { public DbOpenHelper(Context context, String name, int version) { super(context, name, null, version); } @Override public void onCreate(SQLiteDatabase db) { db.execSQL("create table contact (_id integer primary key autoincrement," + "name varchar(10),phone varchar(15))"); } @Override public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { // 当数据库发生更新时,再此处更新数据库的表 } } MainActivity.java package com.example. shiyan4 ; import androidx.appcompat.app.AppCompatActivity; import android.content.Intent; import android.database.Cursor; import android.os.Bundle; import android.view.View; import android.widget.Button; import android.widget.CursorAdapter; import android.widget.EditText; import android.widget.ListView; import android.widget.SimpleCursorAdapter; public class MainActivity extends AppCompatActivity { private DbOpenHelper dbHelper = null; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); // 创建或打开数据库(此处需要使用绝对路径) dbHelper = new DbOpenHelper(this, this.getFilesDir().toString() + "/contacts.db3", 1); Button btn_add = findViewById(R.id.btn_add); //为“新增联系人”按钮绑定监听器 btn_add.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { Intent intent = new Intent(MainActivity.this, AddActivity.class); startActivity(intent); } }); Button btn_find = findViewById(R.id.btn_find); //为“查找”按钮绑定监听器 btn_find.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { EditText et_find = findViewById(R.id.et_find); String nameOrPhoneStr = et_find.getText().toString(); //执行查询操作 Cursor cursor = dbHelper.getReadableDatabase().rawQuery( "select * from contact where name ==? or phone==?", new String[]{nameOrPhoneStr, nameOrPhoneStr}); //显示查询结果 inflateList(cursor); } }); } //当前Activity从停止状态再次回到运行状态时,onStart()函数会被回调 @Override protected void onStart() { super.onStart(); Cursor cursor = dbHelper.getReadableDatabase() .rawQuery("select * from contact", null); inflateList(cursor); } //把查询结果cursor,填充显示到ListView控件中 private void inflateList(Cursor cursor) { // 填充SimpleCursorAdapter SimpleCursorAdapter adapter = new SimpleCursorAdapter( MainActivity.this, R.layout.cell, cursor, new String[]{"name", "phone"}, new int[]{R.id.tv_Name, R.id.tv_Phone}, CursorAdapter.FLAG_REGISTER_CONTENT_OBSERVER ); // 显示数据 ListView lv_show = findViewById(R.id.lv_show); lv_show.setAdapter(adapter); } //当前Activity销毁前onDestroy()函数会被回调 @Override protected void onDestroy() { super.onDestroy(); // 退出程序时关闭MyDatabaseHelper里的SQLiteDatabase dbHelper.close(); } } AddActivity.java 添加数据 package com.example .shiyan4 ; import androidx.appcompat.app.AppCompatActivity; import android.os.Bundle; import android.view.View; import android.widget.Button; import android.widget.EditText; public class AddActivity extends AppCompatActivity { private DbOpenHelper dbHelper = null; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_add); //获取SQLiteOpenHelper对象 dbHelper = new DbOpenHelper(this, this.getFilesDir().toString() + "/contacts.db3", 1); Button btn_save = findViewById(R.id.btn_save); //为“保存”按钮绑定监听器 btn_save.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { EditText et_name = findViewById(R.id.et_name); EditText et_phone = findViewById(R.id.et_phone); String nameStr = et_name.getText().toString(); String phoneStr = et_phone.getText().toString(); // 数据库表执行插入语句 dbHelper.getReadableDatabase().execSQL("insert into contact values(null , ? , ?)", new String[]{nameStr, phoneStr}); finish(); } }); } }