实验四:SQLite和SQLiteDatabase应用

实验四:SQLiteSQLiteDatabase应用

一、实验目的

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();

            }

        });

    }

}

 


 


 


 

posted @ 2025-04-09 11:43  不会JAVA的小袁  阅读(39)  评论(0)    收藏  举报