// 创建数据库
// mydata = new MyDatabaseHelper(MainActivity.this, “BookStore.db”,
// null,1);
// 第二次执行这条语句,数据库版本是2,会执行到onUpgrade()
dbHelper = new MyDatabaseHelper(MainActivity.this, “BookStore.db”, null,
2);
create_database = (Button) findViewById(R.id.create_database);
add_data = (Button) findViewById(R.id.add_data);
update_data = (Button) findViewById(R.id.update_data);
delete_data = (Button) findViewById(R.id.delete_data);
query_data = (Button) findViewById(R.id.query_data);
replace_data = (Button) findViewById(R.id.replace_data);
// 创建表
create_database.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
dbHelper.getWritableDatabase(); // 获取可读写的数据库
}
});
//添加数据
add_data.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// 获得数据库实例,用来操作的
SQLiteDatabase db = dbHelper.getWritableDatabase();
// 这是ContentValues对象insert()方法的第三个参数,用来组装数据的
ContentValues values = new ContentValues();
// id那一列是自增长的,就不用设置
// 开始组装第一条数据
values.put(“name”, “The Da Vinci Code”); // 达芬奇密码
values.put(“author”, “Dan Brown”);
values.put(“pages”, 454);
values.put(“price”, 16.96);
db.insert(“Book”, null, values); // 插入第一条数据
values.clear(); // 清空values中的数据
values.put(“name”, “The Lost Symbol”);
values.put(“author”, “Dan Brown”);
values.put(“pages”, 510);
values.put(“price”, 19.95);
db.insert(“Book”, null, values); // 插入第二条数据
}
});
//更新数据
update_data.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
SQLiteDatabase db = dbHelper.getWritableDatabase();
ContentValues values = new ContentValues();
values.put(“price”, 10.99);
// 参数:表名,ContentValues对象封装的数据,更新哪一行(去更新name=?,而?占一个占位符),可以通过
// 第四个参数提供的一个字符串数组为第三个参数中的每个占位符指定相应的内容.
// 第三个参数对应sql语句的where部分
int count = db.update(“Book”, values, “name = ?”,
new String[] { “The Da Vinci Code” });
// 上述代码的意图是,将名字为"The DaVinci Code"的这本书价格改成10.99
}
});
//删除数据
delete_data.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
SQLiteDatabase db = dbHelper.getWritableDatabase();
//表名,where部分,?
//删除大于500页的书
db.delete(“Book”, “pages > ?”, new String[]{“500”});
}
});
//查询数据
query_data.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
//调用query()方法后悔返回一个Cursor对象,查询到的所有数据都将从这个对象中取出
SQLiteDatabase db = dbHelper.getWritableDatabase();
//参数:表名,列名,where部分,为占位符指定具体的值,group by的列,对group by后的结果进一步约束,查询结果排序方式
//查询Book表中的所有数据,并存到Cursor对象中
Cursor cursor = db.query(“book”, null, null, null, null, null, null, null);
//moveToFirst()方法将数据的指针移动到第一行的位置,然后循环查询每一行的数据
//通过Cursor的getColumnIndex()方法获取到某一列在表中对应位置索引
//然后再将这个索引传入到相应的取值方法中,就可以得到从数据库中读取到的数据了
//最后需要用close()方法关闭Cursor
if(cursor.moveToFirst()){
do{
String name = cursor.getString(cursor.getColumnIndex(“name”));
String author = cursor.getString(cursor.getColumnIndex(“author”));
int pages = cursor.getInt(cursor.getColumnIndex(“pages”));
double price = cursor.getDouble(cursor.getColumnIndex(“price”));
Log.d(“xfhy”,“name :”+name);
Log.d(“xfhy”,“author :”+author);
Log.d(“xfhy”,“pages :”+pages);
Log.d(“xfhy”,“price :”+price);
}while(cursor.moveToNext());
}
cursor.close();
}
});
//使用事务,替换数据 要么删除旧数据和添加新数据的操作一起完成,要么就还要保留原来的旧数据
//事务的特性就是保证让某一系列操作要么全部完成,要么一个都不会完成
//这里是事务的标准写法
replace_data.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
SQLiteDatabase db = dbHelper.getWritableDatabase();
db.beginTransaction(); //开启事务
try {
db.delete(“Book”, null, null); //这里表示删除Book表里的全部数据
/*if(true){ //这里是故意让事务失败的,为了测试
throw new NullPointerException(); //手动抛出异常,让事务失败
}*/
ContentValues values = new ContentValues();
values.put(“name”, “Game of Thrones”);
values.put(“author”, “George Martin”);
values.put(“pages”, 720);
values.put(“price”, 20.85);
db.insert(“Book”,null,values); //添加数据
db.setTransactionSuccessful(); //事务已成功执行
} catch (Exception e) {
e.printStackTrace();
} finally {
db.endTransaction(); //结束事务
}
}
});
}
}
继承SQLiteOpenHelper,并完成构造方法的实现,实现onCreate()和onUpgrade()方法
建表语句,integer是整型,text是文本,real是浮点型,blob是二进制类型
用adb命令去打开数据库目录的话,需要将platform-tools配置到Path环境变量中去.然后cmd->adb shell
打开数据库所在目录/data/data/com.example.databasetest/databases
再ls 可以看到当前的数据库BookStore.db已经在里面了,输入sqlite3 BookStore.db
可以用sqlite3工具打开数据库,然后输入.schema可以显示当前数据库的创建的语句
这里是升级数据库的最佳写法:
用户是第一次安装这个软件,则建立2张表
用户是升级数据库,则判断一下是不是通过老版本来更新的,只需要创建1张表Category即可
这里升级数据库时,没有break语句,这是为了保证每一次的数据库修改都能被全部执行到.
比如我现在是数据库版本1,我安装了最新的软件,就需要升级到数据库版本3,就需要做1->2,2->3的所有操作
public class MyDatabaseHelper extends SQLiteOpenHelper{
//存放书的各种详细数据
private static final String CREATE_BOOK = “create table Book(” +
"id integer primary key autoincrement, " +
自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。
深知大多数初中级Android工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则近万的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!
因此收集整理了一份《2024年Android移动开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Android开发知识点,真正体系化!
由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!
如果你觉得这些内容对你有帮助,可以扫码获取!!(备注:Android)

最后
下面是辛苦给大家整理的学习路线
《互联网大厂面试真题解析、进阶开发核心学习笔记、全套讲解视频、实战项目源码讲义》点击传送门即可获取!
比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!**
如果你觉得这些内容对你有帮助,可以扫码获取!!(备注:Android)

最后
下面是辛苦给大家整理的学习路线
[外链图片转存中…(img-foOnPnE3-1713114525441)]
《互联网大厂面试真题解析、进阶开发核心学习笔记、全套讲解视频、实战项目源码讲义》点击传送门即可获取!