实验四:SQLite和SQLiteDatabase应用
实验四:SQLite和SQLiteDatabase应用
一、实验目的
1、本次实验的目的是让大家熟悉Android中对数据库进行操作的相关的接口、类等。SQLiteDatabase这个是在android中数据库操作使用最频繁的一个类。通过它可以实现数据库的创建或打开、创建表、插入数据、删除数据、查询数据、修改数据等操作。
2、实现添加姓名,电话小例程。
二、实验要求
1、完成Android开发平台的搭建及相关配置
2、创建项目并熟悉文件目录结构
3、实现例程添加姓名,电话实验步骤
三、实验步骤
项目界面:输入姓名,电话添加到数据库,由数据库查询出来显示插入的列表。
Activity重新回到运行状态,并刷新ListView显示出新增的联系人,
在文本框中输入要查找的联系人姓名或电话后,点击“查找”按钮,能够显示查找到的联系人的信息,
1、创建项目
新建一个Android工程命名为shiyan4,目录结构如下图:
2、布局文件
activity_main.xml
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity">
<Button
android:id="@+id/btn_add"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_margin="10dp"
android:text="新增联系人"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<EditText
android:id="@+id/et_find"
android:layout_width="250dp"
android:layout_height="44dp"
android:layout_marginStart="20dp"
android:layout_marginTop="24dp"
android:hint="请输入姓名或电话"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/btn_add" />
<Button
android:id="@+id/btn_find"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="24dp"
android:text="查找"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.0"
app:layout_constraintStart_toEndOf="@+id/et_find"
app:layout_constraintTop_toBottomOf="@+id/btn_add" />
<TextView
android:id="@+id/textView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="92dp"
android:layout_marginTop="28dp"
android:text="姓名"
android:textSize="20dp"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/et_find" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="92dp"
android:layout_marginTop="28dp"
android:text="电话号码"
android:textSize="20dp"
app:layout_constraintStart_toEndOf="@+id/textView"
app:layout_constraintTop_toBottomOf="@+id/et_find" />
<ListView
android:id="@+id/lv_show"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginLeft="80dp"
android:layout_marginRight="80dp"
android:layout_marginTop="20dp"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.6"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/textView" />
</androidx.constraintlayout.widget.ConstraintLayout>
activity_add.xml
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".AddActivity">
<EditText
android:id="@+id/et_name"
android:layout_width="200dp"
android:layout_height="wrap_content"
android:layout_margin="80dp"
android:layout_marginTop="100dp"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<EditText
android:id="@+id/et_phone"
android:layout_width="200dp"
android:layout_height="wrap_content"
android:layout_marginTop="4dp"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.502"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/et_name" />
<TextView
android:id="@+id/textView2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="88dp"
android:text="姓名:"
android:textSize="20dp"
app:layout_constraintEnd_toStartOf="@+id/et_name"
app:layout_constraintTop_toTopOf="parent" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="12dp"
android:text="电话:"
android:textSize="20dp"
app:layout_constraintEnd_toStartOf="@+id/et_phone"
app:layout_constraintTop_toBottomOf="@+id/et_name" />
<Button
android:id="@+id/btn_save"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_margin="20dp"
android:text="保存"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/et_phone" />
</androidx.constraintlayout.widget.ConstraintLayout>
call.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent">
<androidx.constraintlayout.widget.ConstraintLayout
android:layout_width="match_parent"
android:layout_height="match_parent">
<TextView
android:id="@+id/tv_Name"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="[姓名]"
android:textSize="20dp"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<TextView
android:id="@+id/tv_Phone"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="[电话号码]"
android:textSize="20dp"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintTop_toTopOf="parent" />
</androidx.constraintlayout.widget.ConstraintLayout>
</LinearLayout>
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();
}
});
}
}