没有任何花里胡哨,直接干货,拿来就可以用,已自验证!!
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;
}
}
常规的增删查改需求基本满足,如果需要扩展,可以根据自己的需求修改即可。
293

被折叠的 条评论
为什么被折叠?



