当前位置: 首页 > news >正文

Android开发-java版:SQLite数据库

一、SQLite数据库介绍

Android内置SQLite数据库,是一款轻量级关系数据库。
Android内置SQliteOpenHelper帮助类,想要使用,我们需要自己创建类去继承它,借助这个类可以对数据库进行创建升级。

它有两个方法onCreate()和onUpgrade()我们要自己重写,然后分别在这两个方法中实现创建,升级数据库的逻辑。

还有非常重要两个实例方法:getReadableDatabase()和getWritableDatabase()这两个方法都可以创建或打开一个现有的数据库(如果已存在则直接打开,否则创建一个新的数据库)并返回一个可对数据库进行读写操作的对象。

当数据库不可写入时(如磁盘空间已满)
getReadableDatabase()方法返回的对象将以只读的方式去打开数据库
getWritableDatabase()方法则将出现异常

二、在数据库里创建表

1.首先创建一个类继承SQLiteOpenHelper类

2.定义了一个常量,包含了建表的SQL语句,给id字段定义主键和自增属性

3.由于父类中没有无参构造函数,所以必须显式调用父类的构造函数,然后保存上下文

4.重写onCreate()方法,对应创建表

public class MyDatabaseHelper extends SQLiteOpenHelper {public static final String CREATE_BOOK = "Create table Book("+ "id integer primary key autoincrement,"+ "author text,"+ "price real,"+ "pages integer,"+ "name text)";private Context mContext;public MyDatabaseHelper(Context context,String name,SQLiteDatabase.CursorFactory factory,int version){super(context,name,factory,version);mContext = context;}@Overridepublic void onCreate(SQLiteDatabase db) {db.execSQL(CREATE_BOOK);Toast.makeText(mContext,"succeed",Toast.LENGTH_LONG).show();}@Overridepublic void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {}
}

5.然后在活动的布局文件中定义一个按钮,在活动文件中给这个按钮绑定监听器,调用getWritableDatabase()方法创建数据库

public class MainActivity extends AppCompatActivity {private Button button;private MyDatabaseHelper dbHelper;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);button = (Button) findViewById(R.id.button);dbHelper = new MyDatabaseHelper(this,"BookStore.dp",null,1);button.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {dbHelper.getWritableDatabase();}});}
}

6.运行后点击按钮,由于我们给这个数据库设置了名字为:BookStore.dp,可以在Device Explorer中看到这个文件,路径为:data->data->com.example.(你的项目名)->databases->BookStore.dp

7.右键保存到桌面,然后在Android Studio中增加插件,Plugins中搜索Database Navigator并下载,然后在这里面打开刚刚保存的文件即可看到表。

三、数据库升级

1.新增一个常量传入创建另一张表的sql语句

2.onCreate方法里创建这张表

3.修改传入的版本号,从1改为2

public class MyDatabaseHelper extends SQLiteOpenHelper {public static final String CREATE_BOOK = "Create table Book("+ "id integer primary key autoincrement,"+ "author text,"+ "price real,"+ "pages integer,"+ "name text)";public static final String CREATE_CATEGORY = "Create table Category("+ "id integer primary key autoincrement,"+ "category_name text,"+ "category_code integer)";private Context mContext;public MyDatabaseHelper(Context context,String name,SQLiteDatabase.CursorFactory factory,int version){super(context,name,factory,version);mContext = context;}@Overridepublic void onCreate(SQLiteDatabase db) {db.execSQL(CREATE_BOOK);db.execSQL(CREATE_CATEGORY);Toast.makeText(mContext,"succeed",Toast.LENGTH_LONG).show();}@Overridepublic void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {db.execSQL("drop table if exists Book");db.execSQL("drop table if exists Category");onCreate(db);}
}
dbHelper = new MyDatabaseHelper(this,"BookStore.dp",null,2);

即可触发onUpgrade方法

四、添加数据

我们对数据进行的操作有4种,即CRUD
C代表添加(Create),R代表(Retrieve),U代表更新(Update),D代表删除(Delete),每一种操作又各自对应了一种SQL命令。

添加数据时使用insert,查询数据时使用select,更新数据时使用update,删除数据时使用delete
Android提供了一系列辅助性方法,使得在Android中即使不去编写SQL语句,也可以轻松完成。

前面我们已经知道,调用SQLiteOpenHelper的getReadableDatabase()或getWritableDatabase()方法可以用于创建和升级数据库,不仅如此,这两个方法还都会返回一个SQLiteDatabase的对象,借助这个对象就可以进行CRUD操作了。

SQLiteDatabase中提供了一个insert()方法,这个方法就是专门用于添加数据的,它接收3个参数

第一个参数是表名,我们希望向哪张表里添加数据,这里就传入该表的名字

第二个参数用于在未指定添加数据的情况下给某些可为空的列自动赋值NULL,一般我们用不到这个功能,直接传入null

第三个参数是一个ContentValues对象,它提供了一系列的put()方法重载,用于向ContentValues中添加数据

只需要将表中的每个列名以及相应的待添加数据传入即可

button1.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {SQLiteDatabase db = dbHelper.getWritableDatabase();ContentValues values = new ContentValues();values.put("name","1");values.put("author","Dan");values.put("pages",45);values.put("price",15);db.insert("Book",null,values);}});

五、更新数据

使用update方法,第一个参数是表名,第二个参数是更新的数据,第三个参数是要更新哪几行,第四个参数为占位符“?”提供了具体的参数,这里的意思是,更新name=1的那一行

button2.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {SQLiteDatabase db = dbHelper.getWritableDatabase();ContentValues values = new ContentValues();values.put("price",10);db.update("Book",values,"name = ?",new String[]{"1"});}});

六、删除数据

delete方法,第一个参数为表名,第二个和第三个参数共同指定哪一行,可以传null,代表删除所有数据(慎用)

button.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {SQLiteDatabase db = dbHelper.getWritableDatabase();db.delete("Book","name = ?",new String[]{"2"});}});

七、查询数据

SQLiteDatabase中给出了query()方法,但是参数最少都需要7个

第一个参数表名,第二个参数指定查询哪几列,第三、四个参数用于约束查询某几行的数据,第五个参数指定需要去group by的列,第六个参数用于对group by数据进行进一步过滤,第七个参数指定排序方式

public class MainActivity extends AppCompatActivity {private Button button,button1,button2;private MyDatabaseHelper dbHelper;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);button = (Button) findViewById(R.id.button);button1 = (Button) findViewById(R.id.add);button2 = (Button) findViewById(R.id.upgrade);dbHelper = new MyDatabaseHelper(this,"BookStore.dp",null,2);button1.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {SQLiteDatabase db = dbHelper.getWritableDatabase();ContentValues values = new ContentValues();values.put("name","1");values.put("author","Dan");values.put("pages",45);values.put("price",15);db.insert("Book",null,values);values.clear();values.put("name","2");values.put("author","Dan");values.put("pages",45);values.put("price",15);db.insert("Book",null,values);}});button2.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {SQLiteDatabase db = dbHelper.getWritableDatabase();
//                ContentValues values = new ContentValues();
//                values.put("price",10);
//                db.update("Book",values,"name = ?",new String[]{"1"});//                db.delete("Book","name = ?",new String[]{"2"});Cursor cursor = db.query("Book",null,null,null,null,null,null);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("MainActivity","book name is"+name);Log.d("MainActivity","book author is"+ author);Log.d("MainActivity","book pages is" + pages);Log.d("MainActivity","book price is"+ price);}while (cursor.moveToNext());}cursor.close();}});button.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {dbHelper.getWritableDatabase();}});}
}

http://www.dtcms.com/a/609966.html

相关文章:

  • PHP进阶-在Ubuntu上搭建LAMP环境教程
  • 苔藓泛基因组--文献精读174
  • 购物网站建设过程视频权威发布信息
  • 网站建设营销方案wordpress添加微信分享功能
  • JavaWeb项目打包、部署至Tomcat并启动的全程指南(图文详解)
  • Netty和Tomcat有什么区别
  • 多标签页导航后台模板 html+css+js 纯手写 无第三方UI框架 复制粘贴即用
  • 做贷款网站犯法英文网站字体大小
  • Docker Desktop(Windows/Mac)零外网部署 Dify 极简指南
  • 1015 Reversible Primes
  • Nextcloud容器化部署新范式:Docker与Cpolar如何重塑私有云远程访问能力
  • 网站资源建设方案西安网页设计培训
  • AI Compass前沿速览:GPT--Codex 、宇树科技世界模型、InfiniteTalk美团数字人、ROMA多智能体框架、混元D .
  • 做维修那个网站发布信息好编辑不了的wordpress
  • 织梦摄影网站模板长沙网站制作公司怎么做
  • 《Chrome》 [142.0.7444.60][绿色便携版] 下载
  • leetcode2536. 子矩阵元素加 1
  • 11.6-11.14力扣前缀和刷题
  • vue3.0数据驱动问题
  • Java 8+新特性实战:Lambda表达式、Stream API与函数式编程范式
  • Rust新手第一课:Mac环境搭建踩坑记录
  • 长沙品质网站建设优点wordpress导入插件下载
  • 男的和女的做那个视频网站国内网站建设代理
  • 操作教程 |JumpServer堡垒机数据脱敏功能的使用
  • Ⅰ人工智能学习的核心概念概述+线性回归(1)
  • KKT条件:对偶问题、KKT条件以及内点法
  • 基于ssm的数据标注系统cg4ft3c7(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。
  • Go语言编译器设计器 | 探索Go语言编译器的工作原理与实现技巧
  • c# 集成激光雷达(以思岚A1为例)
  • 大数据运维面试题及答案