Android SQLite的增删查改 完成版

没有任何花里胡哨,直接干货,拿来就可以用,已自验证!!

1、数据库建立

package com.example.bindanwang.sqlite;

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

import androidx.annotation.Nullable;
/**
*@author wbd
*created at 2024/12/14 10:39
*数据库创建和管理
*/
public class MyDatabaseHelper extends SQLiteOpenHelper {
    private Context mContext;

    /**
     * 创建一个数据表 名称为AccountBook
     * primary key autoincrement  表示主键,主键是唯一的 ID,自增
     * 下面的都是表里面需要的参数
     * UNIQUE(bookname) 根据bookname这个值约束这条数据是不能重复的,为了防止同一条数据重复添加
     *
     */
    public static final String CREATE_BOOK = "create table AccountBook ("
            + "id integer primary key autoincrement, "
            + "bookname text, "
            + "price real, "
            + "date text, "
            + "name text,UNIQUE(bookname))";


    public MyDatabaseHelper(@Nullable Context context, @Nullable String name, @Nullable SQLiteDatabase.CursorFactory factory, int version) {
        super(context, name, factory, version);
        mContext = context;
    }

    // on
    @Override
    public void onCreate(SQLiteDatabase db) {
        db.execSQL(CREATE_BOOK); //创建数据库
        Toast.makeText(mContext, "Create succeed", Toast.LENGTH_SHORT).show();
    }

    //数据库升级用
    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {

    }
}

2、数据库主页面

package com.example.bindanwang.sqlite;

import android.annotation.SuppressLint;
import android.content.ContentValues;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.Toast;

import androidx.appcompat.app.AppCompatActivity;

import com.example.bindanwang.R;

/**
 *@author wbd
 *created at 2024/12/14 12:06
 *数据库操作
 */
public class SqliteMainActivity extends AppCompatActivity {

    private MyDatabaseHelper myDatabaseHelper;
    private SQLiteDatabase db;
    private BookAddData bookAddData;  //数据的增删查改 管理类

    private Button insert_btn, query_btn, updata_btn, delete_btn;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_sqlite_main);

        //添加数据
        insert_btn = findViewById(R.id.add_btn);
        insert_btn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                add();
            }
        });

        //查询数据
        query_btn = findViewById(R.id.query_btn);
        query_btn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {

                //     bookAddData.bookQuery(myDatabaseHelper, "西游记3");  //指定某一个字段查询,用第一种方法

                bookAddData.bookQuery(myDatabaseHelper, "西");  //模糊查询用第二种方法
            }
        });

        //修改数据
        updata_btn = findViewById(R.id.updata_btn);
        updata_btn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                bookAddData.bookUpdate(myDatabaseHelper, "西游记4", 888);
            }
        });


        /**
         *
         * 删除数据
         * */
        delete_btn = (Button) findViewById(R.id.delete_btn);
        delete_btn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                bookAddData.bookDelete(myDatabaseHelper, "西游记3");
                Toast.makeText(SqliteMainActivity.this,"删除成功",Toast.LENGTH_LONG).show();
            }
        });

        initData();

    }

    public void initData() {
        /**
         * 这个构造方法中接收4个参数,
         * 第一个参数是Context,这个没什么好说的,必须要有它才能对数据库进行操作。
         * 第二个参数是数据库名,创建数据库时使用的就是这里指定的名称。
         * 第三个参数允许我们在查询数据的时候返回一个自定义的Cursor,一般都是传入null。
         * 第四个参数表示当前数据库的版本号,可用于对数据库进行升级操作。
         */
        myDatabaseHelper = new MyDatabaseHelper(this, "BillyBook.db", null, 1);
        myDatabaseHelper.getWritableDatabase();  //获取数据库可写操作
        bookAddData = new BookAddData();


    }

    //添加数据
    public void add() {
        for (int i = 1; i < 5; i++) {
            bookAddData.bookAddData(myDatabaseHelper, "西游记" + i, i + 123, "20241214" + i);
        }
    }
}

3、增删查改方法类

package com.example.bindanwang.sqlite;

import android.annotation.SuppressLint;
import android.content.ContentValues;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.widget.Toast;

import com.example.bindanwang.utils.LogUtils;

import java.util.ArrayList;
import java.util.List;


/**
 * @author wbd
 * created at 2024/12/14 10:50
 * 数据的增 删 查 改
 */
public class BookAddData {

    /**
     * 数据的添加
     */
    public void bookAddData(MyDatabaseHelper myDatabaseHelper, String bookName, int price, String date) {
        SQLiteDatabase db = myDatabaseHelper.getWritableDatabase();

        ContentValues values = new ContentValues();
        // 开始组装第一条数据
        values.put("bookname", bookName);
        values.put("price", price);
        values.put("date", date);
        db.insertWithOnConflict("AccountBook", null, values, SQLiteDatabase.CONFLICT_REPLACE); // 插入第一条数据
        values.clear();// 清除数据以便下次插入
    }


    //查询数据
    public List<BookResult> bookQuery(MyDatabaseHelper myDatabaseHelper, String name) {
        List<BookResult> resultsList = new ArrayList<BookResult>();

        SQLiteDatabase db = myDatabaseHelper.getWritableDatabase();

        //方法一
        //根据bookname字段查找指定数据
        //  Cursor cursor = db.query("AccountBook", new String[]{"bookname", "price", "date"}, "bookname=?", new String[]{name}, null, null, null);



        /**
         * 方法二
         * 模糊查询 输入某一个字根据查询条件,把相关的名称都查询出来
         * 查询语句   bookname,price,date:是你对应数据库表里面的字段,,AccountBook 对应的是表名,,bookname 对应的是你要查询的字段
         *
         * */
        String sqlQuery = "SELECT bookname,price,date FROM AccountBook WHERE bookname LIKE ?"; // SQL查询语句
        Cursor cursor = db.rawQuery(sqlQuery, new String[]{"%" + name + "%"}); // 执行模糊查询

        if (cursor.moveToFirst()) {
            do {
                // 遍历Cursor对象,取出数据并打印
                @SuppressLint("Range") String bookname = cursor.getString(cursor.getColumnIndex("bookname"));
                @SuppressLint("Range") int price = cursor.getInt(cursor.getColumnIndex("price"));
                @SuppressLint("Range") String date = cursor.getString(cursor.getColumnIndex("date"));
                BookResult gameXmlResult = new BookResult();
                gameXmlResult.setName(bookname);
                gameXmlResult.setPrice(price);
                gameXmlResult.setDate(date);
                LogUtils.d("书名:" + bookname + ",价格:" + price + ",日期:" + date);
                resultsList.add(gameXmlResult);
            } while (cursor.moveToNext());
        }
        cursor.close();
        db.close(); // 关闭数据库
        return resultsList;
    }


     /**
      * 数据修改
      * 通过 指定bookName 书本名称修改对应的价格
      * */
    public void bookUpdate(MyDatabaseHelper myDatabaseHelper, String bookName, int price){
        SQLiteDatabase db = myDatabaseHelper.getWritableDatabase();
        ContentValues values = new ContentValues();
        values.put("price", price);
        db.update("AccountBook", values, "bookName = ?", new String[]{bookName});
        values.clear();// 清除数据以便下次插入
    }


    //删除对应的数据
    public  void bookDelete(MyDatabaseHelper myDatabaseHelper, String bookName) {
        SQLiteDatabase db = myDatabaseHelper.getWritableDatabase();
        db.delete("AccountBook", "bookName = ?", new String[] {bookName});

    }

}

4、常规类

package com.example.bindanwang.sqlite;


import java.util.Comparator;

/**
*@author wbd
*created at 2024/12/14 11:20
*
*/
public class BookResult implements Comparator<BookResult> {

    private String path;

    private String name;

    private int price;

    private String date;


    public String getPath() {
        return path;
    }

    public void setPath(String path) {
        this.path = path;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getPrice() {
        return price;
    }

    public void setPrice(int price) {
        this.price = price;
    }

    public String getDate() {
        return date;
    }

    public void setDate(String date) {
        this.date = date;
    }

    //排序用
    @Override
    public int compare(BookResult o1, BookResult o2) {
        return o1.getName().compareToIgnoreCase(o2.getName());
    }

    @Override
    public Comparator<BookResult> reversed() {
        return null;
    }

}

    常规的增删查改需求基本满足,如果需要扩展,可以根据自己的需求修改即可。

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值