Android SQLite数据库demo。架构组件Room,附学习笔记+面试整理+进阶书籍

  • "INNER JOIN user ON user.id = loan.user_id "

  • “WHERE user.name LIKE :userName”)

public List findBooksBorrowedByNameSync(String userName);

}

2.4 联表查询

Room支持联表查询,接口定义上与其他查询差别不大, 主要还是sql语句的差别。

@Dao

public interface MyDao {

@Query("SELECT * FROM book "

  • "INNER JOIN loan ON loan.book_id = book.id "

  • "INNER JOIN user ON user.id = loan.user_id "

  • “WHERE user.name LIKE :userName”)

public List findBooksBorrowedByNameSync(String userName);

}

Room提供了Migration类来实现数据库的升级:

Room.databaseBuilder(getApplicationContext(), MyDb.class, “database-name”)

.addMigrations(MIGRATION_1_2, MIGRATION_2_3).build();

static final Migration MIGRATION_1_2 = new Migration(1, 2) {

@Override

public void migrate(SupportSQLiteDatabase database) {

database.execSQL("CREATE TABLE Fruit (id INTEGER, "

  • name TEXT, PRIMARY KEY(id))”);

}

};

static final Migration MIGRATION_2_3 = new Migration(2, 3) {

@Override

public void migrate(SupportSQLiteDatabase database) {

database.execSQL("ALTER TABLE Book "

  • " ADD COLUMN pub_year INTEGER");

}

};

在创建Migration类时需要指定startVersionendVersion, 代码中MIGRATION_1_2MIGRATION_2_3的startVersion和endVersion是递增的, Migration其实是支持从版本1直接升到版本3,只要其migrate()方法里执行的语句正常即可。那么Room是怎么实现数据库升级的呢?其实本质上还是调用SQLiteOpenHelper.onUpgrade,Room中自己实现了一个SQLiteOpenHelper, 在onUpgrade()方法被调用时触发Migration,当第一次访问数据库时,Room做了以下几件事:

  • 创建Room Database实例

  • SQLiteOpenHelper.onUpgrade被调用,并且触发Migration

  • 打开数据库

架构组件Room、demo了解:https://download.csdn.net/download/meixi_android/19386289

原生sqlite、demo链接:https://download.csdn.net/download/meixi_android/10710400

创建数据库版本v.1

/**

  • 作者:created by meixi

  • 邮箱:13164716840@163.com

  • 日期:2018/10/9 11

*/

public class DBHelper extends SQLiteOpenHelper {

private static final String DATABASE_NAME = “mall.db”;

private static final int DATABASE_VERSION = 1000;

private static DBHelper instance = null;

public DBHelper(Context context) {

super(context, DATABASE_NAME, null, DATABASE_VERSION);

}

public synchronized static DBHelper getInstance(Context context) {

if (instance == null) {

instance = new DBHelper(context);

}

return instance;

}

@Override

public void onCreate(SQLiteDatabase db) {

db.execSQL(SQL.CREATE_TABLE_FAVORITE);

// 若不是第一个版本安装,直接执行数据库升级

// 请不要修改FIRST_DATABASE_VERSION的值,其为第一个数据库版本大小

final int FIRST_DATABASE_VERSION = 1000;

onUpgrade(db, FIRST_DATABASE_VERSION, DATABASE_VERSION);

}

@Override

public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {

// 使用for实现跨版本升级数据库

for (int i = oldVersion; i < newVersion; i++) {

switch (i) {

default:

break;

}

}

}

}

创建数据库语句:

public class SQL {

public static final String T_FAVORITE = “favorite”;

public static final String CREATE_TABLE_FAVORITE =

"CREATE TABLE IF NOT EXISTS " + T_FAVORITE + “(” +

"_id integer primary key autoincrement, " +

"title VARCHAR, " +

"url VARCHAR, " +

"createDate VARCHAR " +

“)”;

}

实现增删改查activity:

public class MainActivity extends AppCompatActivity {

private static String CREATE_TABLE =“create table number(_id integer primary key autoincrement ,phone real)”;

int ab = 0,cd;

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

Button button1=findViewById(R.id.baocunid);

Button button2=findViewById(R.id.duquid);

Button button3=findViewById(R.id.shanchuid);

Button button4=findViewById(R.id.xiugaiid);

button1.setOnClickListener(new View.OnClickListener() {

@Override

public void onClick(View view) {

ab++;

boolean nn = baocun(MainActivity.this, new String[] { “114499title”,“rullll—htt;s==”+ab,“加入的xxx” });

Log.i(“lgq”,“sbbbb—”+nn);

}

});

button2.setOnClickListener(new View.OnClickListener() {

@Override

public void onClick(View view) {

getBai(MainActivity.this);

}

});

button3.setOnClickListener(new View.OnClickListener() {

@Override

public void onClick(View view) {

String ss= Delete(MainActivity.this,“1”);

Log.i(“lgq”,“shanchu=g===”+ss);

}

});

button4.setOnClickListener(new View.OnClickListener() {

@Override

public void onClick(View view) {

String ss = updata(MainActivity.this,“”);

Log.i(“lgq”,“xiugg=g===”+ss);

}

});

}

public static boolean baocun(Context context, String[] values) {

SQLiteDatabase db2=null;

DBHelper2 dbHelper = null;

try {

dbHelper =new DBHelper2(context);

db2 = dbHelper.getWritableDatabase();

db2=dbHelper.getWritableDatabase();

db2.beginTransaction();

db2.execSQL(“insert into favorite (title,url,deleted) values (?,?,?)”,values);

db2.setTransactionSuccessful();

db2.endTransaction();

return true;

} catch (Exception e) {

e.printStackTrace();

return false;

}finally{

}

自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数Android工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年Android移动开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
img
img
img
img
img
img
img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Android开发知识点,真正体系化!

由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新

如果你觉得这些内容对你有帮助,可以添加V获取:vip204888 (备注Android)
img

文末

很多人在刚接触这个行业的时候或者是在遇到瓶颈期的时候,总会遇到一些问题,比如学了一段时间感觉没有方向感,不知道该从那里入手去学习,对此我整理了一些资料,需要的可以免费分享给大家

这里笔者分享一份自己收录整理上述技术体系图相关的几十套腾讯、头条、阿里、美团等公司2021年的面试题,把技术点整理成了视频和PDF(实际上比预期多花了不少精力),包含知识脉络 + 诸多细节,由于篇幅有限,这里以图片的形式给大家展示一部分。

【视频教程】

天道酬勤,只要你想,大厂offer并不是遥不可及!希望本篇文章能为你带来帮助,如果有问题,请在评论区留言。

本文已被CODING开源项目:《Android学习笔记总结+移动架构视频+大厂面试真题+项目实战源码》收录

一个人可以走的很快,但一群人才能走的更远。如果你从事以下工作或对以下感兴趣,欢迎戳这里加入程序员的圈子,让我们一起学习成长!

AI人工智能、Android移动开发、AIGC大模型、C C#、Go语言、Java、Linux运维、云计算、MySQL、PMP、网络安全、Python爬虫、UE5、UI设计、Unity3D、Web前端开发、产品经理、车载开发、大数据、鸿蒙、计算机网络、嵌入式物联网、软件测试、数据结构与算法、音视频开发、Flutter、IOS开发、PHP开发、.NET、安卓逆向、云计算

!希望本篇文章能为你带来帮助,如果有问题,请在评论区留言。

本文已被CODING开源项目:《Android学习笔记总结+移动架构视频+大厂面试真题+项目实战源码》收录

一个人可以走的很快,但一群人才能走的更远。如果你从事以下工作或对以下感兴趣,欢迎戳这里加入程序员的圈子,让我们一起学习成长!

AI人工智能、Android移动开发、AIGC大模型、C C#、Go语言、Java、Linux运维、云计算、MySQL、PMP、网络安全、Python爬虫、UE5、UI设计、Unity3D、Web前端开发、产品经理、车载开发、大数据、鸿蒙、计算机网络、嵌入式物联网、软件测试、数据结构与算法、音视频开发、Flutter、IOS开发、PHP开发、.NET、安卓逆向、云计算

  • 25
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值