保姆级【快数学会Android端数据库“增删改查”】+图书管理系统实践案例!!!

前言

一.环境配置,可查看往期文章。

二.了解数据库“增删改查”的具体原理,可查看往期文章。

三.实现的效果

设计如下图所示的页面,点击相应按钮实现对图书管理系统数据的“增删改查”。

功能实现

一.页面设计部分

页面设计不再一一讲解。布局页面可使用相对布局,快速进行页面设计。

二.代码编写

1.创建MyHelper.java文件,编写其代码

package com.example.zuoye_zhangsiqi_512; // 定义包名,用于组织代码
import android.content.Context; // 导入Context类,用于获取应用程序上下文
import android.database.sqlite.SQLiteDatabase; // 导入SQLiteDatabase类,用于操作SQLite数据库
import android.database.sqlite.SQLiteOpenHelper; // 导入SQLiteOpenHelper类,用于创建和管理数据库
import androidx.annotation.Nullable; // 导入@Nullable注解,用于标记参数可以为null

public class MyHelper extends SQLiteOpenHelper { // 定义MyHelper类,继承自SQLiteOpenHelper
    public MyHelper(@Nullable Context context){ // 构造方法,接收一个Context对象
        super(context,"student.db",null,1); // 调用父类构造方法,指定数据库文件名为"student.db",版本号为1
    }

    public void onCreate(SQLiteDatabase sqLiteDatabase){ // onCreate方法,在数据库第一次创建时被调用
        sqLiteDatabase.execSQL("CREATE TABLE information(" + // 执行SQL语句创建表
                "_id INTEGER PRIMARY KEY AUTOINCREMENT" + // 主键字段,自动递增
                ",code INTEGER" + // 整型字段
                ",name VARCHAR(20)" + // 长度为20的字符串字段
                ",author VARCHAR(20)" + // 长度为20的字符串字段
                ",number INTEGER)"); // 整型字段
    }
    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { // onUpgrade方法,在数据库版本号发生变化时被调用
        // 此方法为空,没有实现任何逻辑,通常用于处理数据库升级逻辑
    }
}

2.在MainActivity中编写代码

package com.example.zuoye_zhangsiqi_512; // 定义包名,用于组织代码

import android.content.ContentValues; // 导入ContentValues类,用于存储键值对
import android.database.Cursor; // 导入Cursor类,用于操作数据库查询结果
import android.database.sqlite.SQLiteDatabase; // 导入SQLiteDatabase类,用于操作SQLite数据库
import android.os.Bundle; // 导入Bundle类,用于传递数据
import android.view.View; // 导入View类,用于操作UI组件
import android.widget.Button; // 导入Button类,用于按钮操作
import android.widget.EditText; // 导入EditText类,用于输入框操作
import android.widget.TextView; // 导入TextView类,用于显示文本

import androidx.activity.EdgeToEdge; // 导入EdgeToEdge类,用于实现全屏效果
import androidx.appcompat.app.AppCompatActivity; // 导入AppCompatActivity类,用于创建Activity
import androidx.core.graphics.Insets; // 导入Insets类,用于处理窗口内边距
import androidx.core.view.ViewCompat; // 导入ViewCompat类,用于兼容性操作
import androidx.core.view.WindowInsetsCompat; // 导入WindowInsetsCompat类,用于处理窗口内边距

public class MainActivity extends AppCompatActivity { // 定义MainActivity类,继承自AppCompatActivity

    @Override
    protected void onCreate(Bundle savedInstanceState) { // 重写onCreate方法,初始化Activity
        super.onCreate(savedInstanceState); // 调用父类的onCreate方法
        EdgeToEdge.enable(this); // 启用全屏效果
        setContentView(R.layout.activity_main); // 设置布局文件
        ViewCompat.setOnApplyWindowInsetsListener(findViewById(R.id.main), (v, insets) -> { // 设置窗口内边距监听器
            Insets systemBars = insets.getInsets(WindowInsetsCompat.Type.systemBars()); // 获取系统栏的内边距
            v.setPadding(systemBars.left, systemBars.top, systemBars.right, systemBars.bottom); // 设置内边距
            return insets;
        });
        //
        EditText editcode = findViewById(R.id.editTextText); // 获取图书编码输入框
        EditText editname = findViewById(R.id.editTextText2); // 获取图书名称输入框
        EditText editauthor = findViewById(R.id.editTextText3); // 获取图书作者输入框
        EditText editnumber = findViewById(R.id.editTextText4); // 获取图书数量输入框
        TextView bookTv = findViewById(R.id.textView); // 获取用于显示图书信息的TextView
        Button addbtn = findViewById(R.id.button); // 获取新增按钮
        Button updatebtn = findViewById(R.id.button2); // 获取修改按钮
        Button searchbtn = findViewById(R.id.button3); // 获取查询按钮
        Button deletbtn = findViewById(R.id.button4); // 获取删除按钮
        //
        MyHelper helper = new MyHelper(getApplicationContext()); // 创建MyHelper对象,用于数据库操作
        //新增
        addbtn.setOnClickListener(new View.OnClickListener() { // 设置新增按钮的点击事件
            @Override
            public void onClick(View v) {
                SQLiteDatabase db = helper.getWritableDatabase(); // 获取可写的数据库对象
                ContentValues values = new ContentValues(); // 创建ContentValues对象,用于存储键值对

                String bookcode = editcode.getText().toString(); // 获取图书编码
                String bookname = editname.getText().toString(); // 获取图书名称
                String bookauthor = editauthor.getText().toString(); // 获取图书作者
                String booknumber = editnumber.getText().toString(); // 获取图书数量
                //数据创建方法
                values.put("code",Integer.valueOf(bookcode)); // 将图书编码存入ContentValues
                values.put("name",bookname); // 将图书名称存入ContentValues
                values.put("author",bookauthor); // 将图书作者存入ContentValues
                values.put("number",Integer.valueOf(booknumber)); // 将图书数量存入ContentValues

                db.insert("information",null,values); // 将数据插入到information表中
                db.close(); // 关闭数据库
            }
        });
        // 修改
        updatebtn.setOnClickListener(new View.OnClickListener() { // 设置修改按钮的点击事件
            @Override
            public void onClick(View v) {
                SQLiteDatabase db = helper.getWritableDatabase(); // 获取可写的数据库对象
                ContentValues values = new ContentValues(); // 创建ContentValues对象,用于存储键值对

                // 获取书的编号和新的数量
                String bookcode = editcode.getText().toString(); // 获取图书编码
                String booknumber = editnumber.getText().toString(); // 获取图书数量

                // 只更新 booknumber 字段
                values.put("number", Integer.valueOf(booknumber)); // 将新的图书数量存入ContentValues

                // 根据 bookcode 来更新
                db.update("information", values, "code=?", new String[]{bookcode}); // 更新information表中指定图书编码的记录
                db.close(); // 关闭数据库
            }
        });
        // 查询
        searchbtn.setOnClickListener(new View.OnClickListener() { // 设置查询按钮的点击事件
            @Override
            public void onClick(View v) {
                SQLiteDatabase db = helper.getReadableDatabase(); // 获取可读的数据库对象
                //创建一个查询函数(Cursor游标)
                Cursor cursor = db.query("information",null,null,null,null,null,null); // 查询information表的所有记录
                String info = ""; // 用于存储查询结果的字符串
                while (cursor.moveToNext()){ // 遍历查询结果
                    String s_id = cursor.getString(Math.max(cursor.getColumnIndex("_id"),0)); // 获取_id字段的值
                    String s_code = cursor.getString(Math.max(cursor.getColumnIndex("code"),0)); // 获取code字段的值
                    String s_name = cursor.getString(Math.max(cursor.getColumnIndex("name"),0)); // 获取name字段的值
                    String s_author = cursor.getString(Math.max(cursor.getColumnIndex("author"),0)); // 获取author字段的值
                    String s_number = cursor.getString(Math.max(cursor.getColumnIndex("number"),0)); // 获取number字段的值

                    info += s_id+" ;"+"编号:"+s_code+" ;"+"名称:"+s_name+"\n"+"作者:"+s_author+" ;"+"数量:"+s_number+"\n"; // 拼接查询结果
                }
                //信息显示在文本当中
                bookTv.setText(info); // 将查询结果显示在TextView中
                cursor.close(); // 关闭Cursor
                db.close(); // 关闭数据库
            }
        });
        // 删除
        deletbtn.setOnClickListener(new View.OnClickListener() { // 设置删除按钮的点击事件
            @Override
            public void onClick(View v) {
                SQLiteDatabase db = helper.getWritableDatabase(); // 获取可写的数据库对象

                String bookcode = editcode.getText().toString(); // 获取图书编码
                db.delete("information","code=?",new String[]{bookcode}); // 删除information表中指定图书编码的记录
                db.close(); // 关闭数据库
            }
        });
    }
}

三.数据库内容查询

查询是否保存成功(打开database文件查看)

数据库存入数据结果乱码转换

若下载错误Plugins,则可在marketplace中下载(不要盲目进行删除操作)

四.实现效果

1.实现数据的添加

2.实现数据的修改

3.实现数据的查询

4.实现数据的删除

5.至此。图书管理系统的增删改查实现完毕

感谢各位读者的阅读!希望大家给出一键三连,多多支持原创。有错误和不解的地方,欢迎各位读者在评论区讨论,我也会不断学习不断改进,做出更加优质的作品!!!

最后相关代码已传入资源中,可根据需求自行获取。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值