Android开发使用SQLite数据库和Listview实现数据的存储与展示

Android开发使用SQLite数据库和Listview实现数据的存储与展示,第1张

Android开发使用SQLite数据库和Listview实现数据的存储与展示

实现效果:

使用了SimpleCursorAdapter方便数据库和listview之间的数据传递。

MainActivity.java:

package com.henu.saveindatabase;

import androidx.appcompat.app.AppCompatActivity;

import android.content.ContentValues;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
import android.os.Bundle;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.CursorAdapter;
import android.widget.EditText;
import android.widget.ListView;
import android.widget.SimpleCursorAdapter;
import android.widget.TextView;
import android.widget.Toast;

public class MainActivity extends AppCompatActivity {

    private ListView viewById;
    private MyHelper myHelper;
    private SimpleCursorAdapter adapter;
    private Cursor cursor;
    //SimpleCursorAdapter所需要的参数
    String from[] = new String[]{"_id", "name", "age"};
    int[] to = new int[]{R.id.tv_id, R.id.tv_name, R.id.tv_age};

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        myHelper = new MyHelper(this);
        viewById = (ListView) findViewById(R.id.lv);
        //进入程序时显示数据库中的数据
        Show();
    }

    public void save(View v) {
        //获得可读写数据库对象
        SQLiteDatabase db = myHelper.getWritableDatabase();
        ContentValues values = new ContentValues();
        EditText et_name = (EditText) findViewById(R.id.et_name);
        EditText et_age = (EditText) findViewById(R.id.et_age);
        values.put("name", et_name.getText().toString().trim());
        values.put("age", et_age.getText().toString());
        long q = db.insert("information", "name", values);
        Toast.makeText(this, "数据存入成功", Toast.LENGTH_SHORT).show();
        //数据库发生变化时更新listview
        cursor.requery();
        adapter.notifyDataSetChanged();
        db.close();
    }


    /*
       当SQLite数据库中包含自增列时,会自动建立一个名为 sqlite_sequence 的表。

这个表包含两个列:name和seq。name记录自增列所在的表,seq记录当前序号(下一条记录的编号就是当前序号加1)。

如果想把某个自增列的序号归零,只需要修改 sqlite_sequence表就可以了。
        */
    public void clear(View v) {
        SQLiteDatabase db = myHelper.getWritableDatabase();
        db.delete("information", null, null);
        //使自增的_id归零
        db.delete("sqlite_sequence", null, null);
        Toast.makeText(this, "数据库清除成功", Toast.LENGTH_SHORT).show();
        cursor.requery();
        adapter.notifyDataSetChanged();
        db.close();
    }

    //显示数据
    public void Show() {
        SQLiteDatabase db = myHelper.getWritableDatabase();
        cursor = db.query("information", null, null, null, null, null, null);
        adapter = new SimpleCursorAdapter(this, R.layout.list_item, cursor, from, to, CursorAdapter.FLAG_REGISTER_CONTENT_OBSERVER);
        viewById.setAdapter(adapter);
        db.close();
    }
}

MyHelper.java:

package com.henu.saveindatabase;

import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;

import androidx.annotation.Nullable;

public class MyHelper extends SQLiteOpenHelper {

    public MyHelper(Context context) {
        super(context, "content.db", null, 1);
    }
//数据库第一次创建的时候执行

    @Override
    public void onCreate(SQLiteDatabase db) {
        //注意自增的主键名字必须是:_id
        db.execSQL("CREATE TABLE information(_id INTEGER PRIMARY KEY AUTOINCREMENT,name varchar(20),age varchar(20))");
    }

    @Override
    public void onUpgrade(SQLiteDatabase sqLiteDatabase, int i, int i1) {

    }
}

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">

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="vertical"
        tools:ignore="MissingConstraints">

        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_marginTop="10dp"
            tools:ignore="MissingConstraints">

            <TextView
                android:id="@+id/tv_1"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="姓名:"
                android:textSize="35dp"></TextView>

            <EditText
                android:id="@+id/et_name"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:hint="请输入姓名"
                android:textSize="25dp"></EditText>
        </LinearLayout>

        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_marginTop="10dp"
            tools:ignore="MissingConstraints">

            <TextView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="年龄:"
                android:textSize="35dp"></TextView>

            <EditText
                android:id="@+id/et_age"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:hint="请输入年龄"
                android:textSize="25dp"></EditText>
        </LinearLayout>

        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content">

            <Button
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:layout_weight="1"
                android:text="存入"
                android:onClick="save"
                android:textSize="25dp"></Button>

            <Button
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:layout_weight="1"
                android:text="清空数据库"
                android:onClick="clear"
                android:textSize="25dp"></Button>
        </LinearLayout>

        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content">

            <TextView
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:layout_weight="1"
                android:gravity="center"
                android:text="ID"
                android:textSize="35dp"></TextView>

            <TextView
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:layout_weight="1"
                android:gravity="center"
                android:text="姓名"
                android:textSize="35dp"></TextView>

            <TextView
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:layout_weight="1"
                android:gravity="center"
                android:text="年龄"
                android:textSize="35dp"></TextView>
        </LinearLayout>

        <ListView
            android:id="@+id/lv"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_marginTop="25dp"
            tools:ignore="MissingConstraints"></ListView>
    </LinearLayout>


</androidx.constraintlayout.widget.ConstraintLayout>

list_item.xml:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent">
<TextView
    android:id="@+id/tv_id"
    android:layout_width="0dp"
    android:layout_height="wrap_content"
    android:textSize="35dp"
    android:text="list_item"
    android:gravity="center"
    android:layout_weight="1"></TextView>
    <TextView
        android:id="@+id/tv_name"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:textSize="35dp"
        android:text="list_item"
        android:gravity="center"
        android:layout_weight="1"></TextView>
    <TextView
        android:id="@+id/tv_age"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:textSize="35dp"
        android:text="list_item"
        android:gravity="center"
        android:layout_weight="1"></TextView>
</LinearLayout>

需要注意的一点是使用SimpleCursorAdapter适配器必须要有个自增的主键,而且名字必须是“_id”,名字必须是“_id”,名字必须是“_id”

欢迎分享,转载请注明来源:内存溢出

原文地址: http://www.outofmemory.cn/web/992717.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-21
下一篇 2022-05-21

发表评论

登录后才能评论

评论列表(0条)

保存