Android Studio SQLite数据库应用(一)
Android Studio SQLite数据库应用(一)
版本:Android Studio 1.5.1
- 创建数据库
- 升级数据库
- CRUD数据操作
SQLite (英语发音:/ˌɛskjuːɛlˈlaɪt/[2] or 英语发音:/ˈsiːkwəl.laɪt/[3])是遵守ACID的关系数据库管理系统,它包含在一个相对小的C程序库中。与许多其它数据库管理系统不同,SQLite不是一个客户端/服务器结构的数据库引擎,而是被集成在用户程序中。https://zh.wikipedia.org/zh-cn/SQLite [ 维基百科 ]
一大早起来,坐在办公室,动都不想动,望一眼窗外,哦耶下雨,心情大好,哈哈。之前很早的时候就想写一写博文的,今天就尝试一下吧,听着外面的雨声,指尖在键盘上跳动,瞬间有种从屌丝程序员转变成了小姑娘们都羡慕的文艺青年的感觉。哈哈,幸好不是什么2B青年。。。不对青年是形容80后的。90后门好像都是。。。。逗逼。。。。是这样的吗,,,
今天主要介绍一下SQLite 在android中的应用。
SQLite是一款轻量级的关系型数据库,它的运行速度很快,占用资源少,通常只需要几百K的内存就足够了,因而现在的主流移动设备都使用SQLite作为复杂数据的存储引擎。对于Android来说,系统内置了丰富的API来提供开发人员操作SQLite,从而轻松的实现数据的操作。
创建数据库
SQLite 数据类型
integer — 整型 real—浮点型 text—文本类型 blob—二进制类型
新建一个类MyDatabaseHelper 继承自SQLiteOpenHelper (Android为我们专门提供的一个帮助类)
public class MyDatabaseHelper extends SQLiteOpenHelper {public static final String CREATE_BOOK = "create table Book(" +//primary key 将id列设为主键 autoincrement表示id列是自增长的"id integer primary key autoincrement," +"author text," +"price real," +"name text)";private Context mContext;//构造方法:第一个参数Context,第二个参数数据库名,第三个参数cursor允许我们在查询数据的时候返回一个自定义的光标位置,一般传入的都是null,第四个参数表示目前库的版本号(用于对库进行升级)public MyDatabaseHelper(Context context,String name,SQLiteDatabase.CursorFactory factory , int version){super(context,name ,factory,version);mContext = context;}@Overridepublic void onCreate(SQLiteDatabase db) {//调用SQLiteDatabase中的execSQL()执行建表语句。db.execSQL(CREATE_BOOK);//创建成功Toast.makeText(mContext, "Create succeeded", Toast.LENGTH_SHORT).show();}@Overridepublic void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {}
}
更改studio 生成的自动布局文件(activity_main.xml)
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"xmlns:tools="http://schemas.android.com/tools"android:layout_width="match_parent"android:layout_height="match_parent"android:orientation="vertical"tools:context="com.example.scott.sqlitetest.MainActivity"><Button
android:layout_width="match_parent"android:layout_height="wrap_content"android:id="@+id/create_database"android:text="Create database"/></LinearLayout>
修改MainActivity中的代码:
public class MainActivity extends AppCompatActivity {private MyDatabaseHelper dbHelper;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);dbHelper = new MyDatabaseHelper(this,"BookStore.db",null,1);Button createDatabase = (Button) findViewById(R.id.create_database);createDatabase.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {
//创建或打开现有的数据库dbHelper.getWritableDatabase();}});}
}
SQLiteOpenHelper中的两个非常重要的实例方法。getReadableDatabase()和getWriteableDatabase(),这两个方法都可以创建和打开一个现有的数据库,区别在于当数据库不可写入的时候getReadableDatabase()方法返回的对象将以只读的方式去打开数据库,而getWriteDatabase()将出现异常
到这里我们的数据库已经创建完成了运行效果如图:
如图当我们第一次点击create database的时候会弹出Toast消息,,再次点击的时候就不会出现了说明没有运行oncreate 数据库已经创建完成了。
那怎么才能找到这个文件呢???
我电脑是windows 10 需要先配置环境变量
如图我们只要在系统变量中选择path单击编辑 然后选择新建,目录为你android SDK 中platform-tools 平台工具的文件夹 配置好后我们就可以使用文件夹中的adb工具和sqlite3 工具了
使用adb 工具
首先输入adb shell 进入到设备控制台。
然后使用cd 命令进行到/data/data/com.example.scott.sqlitetest/databases/目录下用 ls 命令查看该目录里的文件; 然后借助sqlite命令打开数据库,使用.table 查看数据库中有哪些表,(android_metadata 是每个数据库都会自动生成的),使用.schema 查看建表语句。最后输入 .exit 或 .quit 退出。
升级数据库
数据库升级其实很简单,我们只要更改SQLiteOpenHelper中构造方法的第四个参数,即当前数据的版本号,只要比之前传入的数值大就可以了。
现在我想在之前的数据库中加上一列为Category 来记录书籍的分类。
继续在MyDatabaseHelper 类中添加一条建表语句:
......public static final String CREATE_CATEGORY = "create table Category (" +"id integer primary key autoincrement," +"category_name text," +"category_code integer)";......public void onCreate(SQLiteDatabase db) {//调用SQLiteDatabase中的execSQL()执行建表语句。db.execSQL(CREATE_BOOK);db.execSQL(CREATE_CATEGORY);Toast.makeText(mContext, "Create succeeded", Toast.LENGTH_SHORT).show();}......public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {//如果Book、Category表已存在则删除表db.execSQL("drop table if exists Book");db.execSQL("drop table if exists Category");onCreate(db);}
设置好MyDatabaseHelper类之后,我们就可以在MainActivity中将版本号改为2 即( dbHelper = new MyDatabaseHelper(this , “BookStore.db” , null , 2 );),就可以对数据库进行升级了。
与上一节一样查看数据库是否创建正确。如图
我们可以看到数据库是实现了升级;
注意图中红色标记区域是因为我电脑上开了虚拟机,然后手机又是调试状态。一般情况下我都是使用真机调试
到这里我们的数据库建完了,还没有向表中添加数据。但是我们仔细看上面的数据库的的升级的时候可能发现一个问题,在升级的时候会将之前的表删除掉,那么之前表中保存的数据也会一并删除掉,造成以前程序存储在本地的数据全部丢失。那么怎样才能在升级数据库的时候不删除之前的表呢,我会在下一篇博文(Android Studio SQLite数据库应用(二))中写 SQLite事务处理的时候一并写一下。数据库升级的最佳写法
CRUD数据操作
CRUD—C (create) R(retrieve ) U(update) D(delete)
添加数据
先看代码:
在布局文件中加一个按键:
<Buttonandroid:layout_width="match_parent"android:layout_height="wrap_content"android:id="@+id/add_data"android:text="Add Data"/>
修改MainActivity 如下:
public class MainActivity extends AppCompatActivity {private MyDatabaseHelper dbHelper;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);dbHelper = new MyDatabaseHelper(this,"BookStore.db",null,1);Button createDatabase = (Button) findViewById(R.id.create_database);createDatabase.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {dbHelper.getWritableDatabase();}});Button addData = (Button) findViewById(R.id.add_data);addData.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {
//getWritableDatabase()会返回一个SQLiteDatabase对象SQLiteDatabase db = dbHelper.getWritableDatabase();ContentValues values = new ContentValues();values.put("name","The Da Vinci Code");values.put("price",20);values.put("pages",600);values.put("author","Scott");//insert()方法中第一个参数是表名,第二个参数是表示给表中未指定数据的自动赋值为NULL。第三个参数是一个ContentValues对象db.insert("Book",null,values);values.clear();values.put("name","The Lost Symbol");values.put("author","Scott");values.put("pages",500);values.put("price",30);db.insert("Book",null,values);}});}
}
在上面的代码中只对Book表中的四列数据进行了组装,id那一列并没有给它赋值,因为在之前将id列设置为自增长了。
接下来我们来看看表中是不是真的有数据。
输入 select * from Book;查询表中的内容,在我没有按 Add Create 的时候 显示为空,按了之后,表中有了数据。
更新数据
SQLitedatabase 提供了update()用于数据的更新。
在activity_main.xml 增加一个按键,这里就不写了。在MainActivity中怎么按键监听 ,用于数据更新。
Button updateData = (Button) findViewById(R.id.update_data);updateData.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {SQLiteDatabase db = dbHelper.getWritableDatabase();ContentValues values = new ContentValues();values.put("price",19.99);//仔细update中提示的参数(String table,ContentValues,String whereClause,String[] whereArgs)//第三滴四行指定具体更新那几行。注意第三个参数中的?是一个占位符,通过第四个参数为第三个参数中占位符指定相应的内容。db.update("Book",values,"name=?",new String[]{"The Da Vinci Code"});}});
OK 更新成功。
删除数据
删除数据很简单,SQLiteDatabase 提供了delete() 方法用于删除数据。这里就不写代码了具体讲一下什么意思
delete(String table, String whereClause, String [] whereArgs)
举个例子 delete(“Book”,”name=?”,new String[] {“The Da Vinci Code”});
就是把名字为The Da Vinci Code 这本书的数据都删除。
再比如:delete(“Book”,”price > ?”,new String[] {“20”});
意思就是把价格大于20 的所有的书都删掉。
哈哈还是很好玩的,想删什么删什么,但是要注意了 如果你第二,第三个参数不指定的话,就会删除所有行。
查询数据
对于SQLite的查询功能这边我只简单介绍一下,因为前面的“增删减”只是SQLite 功能的一小部分。我想后面单独详细介绍一下SQLite的查询功能。
同样,SQLiteDatabase 中提供了 query()方法用于对数据进行查询。
方法中的参数:
query(String table , String [] columns , String selection , String [] selectionArgs , String groupBy , String having , String orderBy );
table —指定查询的表名
columns —指定查询的列名
selection —指定where的约束条件
selectionArgs — 为where中的占位符提供具体的值
groupBy — 指定需要 groupBy 的列
having — 对groupBy后的结果进一步约束
orderBy — 指定查询结果的排序方式
Button queryButton = (Button) findViewById(R.id.query_data);queryButton.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {SQLiteDatabase db = dbHelper.getWritableDatabase();//指明去查询Book表。Cursor cursor = db.query("Book",null,null,null,null,null,null);//调用moveToFirst()将数据指针移动到第一行的位置。if (cursor.moveToFirst()){do {//然后通过Cursor的getColumnIndex()获取某一列中所对应的位置的索引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();}});
结果如图:
好了到这里就结束了,下一篇 写数据库的事务处理,还有那什么 数据库升级的最佳方式。。。
关注微信公众号,每天都有优质技术文章,搞笑GIF图片推送哦。
2016-7-15
Scott
中午,一帮小孩子跑过来抱着你,走都走不了,想发火来着,可是看着他们我只能笑笑,都严肃不起来,最后嘛,,,找个小胖纸下手,说了一通,然后他们都回教室,让那小胖纸在那站一会儿。等我一走,,他又开开心心的回教室了,哈哈///
Android Studio SQLite数据库应用(一)相关推荐
- Android studio—SQlite数据库注册登录
Android studio-SQlite数据库注册登录 文章目录 Android studio-SQlite数据库注册登录 创建用户类 创建数据库 注册写入数据库 登录读取数据库 效果展示 布局文件 ...
- Android Studio SQLite 数据库 增删改查 简单
源码 效果展示 所有操作都在这个界面完成,操作完直接显示 设计 一个class用来创建数据库,建表,一个activity用来执行增删改查操作 代码 DatebaseHlper impo ...
- Android studio—SQlite注销账号(删除账号)
Android studio-SQlite注销账号(删除账号) 文章目录 Android studio-SQlite注销账号(删除账号) 继上篇 效果预览 用户类 完善数据库功能 注销账号功能 定义控 ...
- Android整合SQLite数据库进行基本的增删改查
简言 使用Android整合SQLite数据库进行数据存储,大致可以划分为三步: ①继承 SQLiteOpenHelper,创建数据库 ②继承 ContentProvider 类,重写方法 ③在清单文 ...
- android sqlite 操作类封装,SQLiteUtils 一个简单的基于 Android 的 Sqlite 数据库的操作封装库 @codeKK Android开源站...
一个简单的基于 Android 的 Sqlite 数据库的操作封装,它有如下的好处: 便捷地创建表和增添表字段 通过操作对象来 insert 或者 update 表记录 支持多种查询方式,支持分页查询 ...
- Android studio 83 数据库插入、查询、更新、删除 sqlite
activity_main.xml <?xml version="1.0" encoding="utf-8"?> <LinearLayout ...
- android studio建数据库表,在android studio中创建表
错误:android.database.sqlite.SQLiteException:表用户没有列名(代码1):编译时:INSERT INTO用户名(名称,余额,密码,年龄)VALUES(? ?,?, ...
- android studio 使用数据库插件
一 database navigator database navigator是android studio的一个插件,可以用来查看sqlite数据库,也可以查看MySQL等其他数据库. 二 安装 ...
- android数据库isnull,Android中SQLite数据库知识点总结
SQLite 数据库简介 SQLite 是一个轻量级数据库,它是D. Richard Hipp建立的公有领域项目,在2000年发布了第一个版本.它的设计目标是嵌入式的,而且占用资源非常低,在内存中只需 ...
最新文章
- AtCoder Regular Contest 067 F - Yakiniku Restaurants
- 算法的威力:法国人用台式机打破由超级计算机创造的圆周率运算世界记录
- 放假了,暂告一段落,迎接研究生
- 将一个5X5的矩阵中最大的元素放在中心, 4个角分别放4个最小的元素(顺序为从左到右,从上到下,从小到大存放)其余数字从小到大
- java 截取汉字首字母,java 取汉字首字母
- 攻防世界web新手区解题 view_source / robots / backup
- mac 切换鼠标滚轮方向
- 3.从尾到头打印链表
- python怎么过滤停用词_第6天:文本处理流程——停用词的过滤、正则化操作
- 大一微积分笔记整理_大一高等数学学习方法
- 用计算机新字库打出的文字,为什么用五笔打字有很多字打不出来(GBK和GB2312字库的区别)...
- 9.12测试(二)——国际象棋
- ME525 刷机历险记
- mysql rank函数怎么用_mysql rank函数怎么用
- 一句话,连上隔壁老王家的 WiFi !
- ES2015 Module(模块)
- 笔记 09-集合(HashSet HashMap TreeMap) 练习
- 多目标跟踪(MOT,Multiple Object Tracking)评价指标
- Win10 盘符更改后需要修改的
- python 循序渐进学习:输出线段图案、正方形图案、直角三角形图案、翻转直角三角形图案、带空格直角三角形图案
热门文章
- fastcgi php错误,FastCGI Error 0x80004005的解决办法
- Vue.js:vue指令(给标签属性赋Vue变量v-bind,绑定事件 v-on)vue事件处理函数中, 拿到事件对象,6个事件修饰符
- python argsort_python3中numpy函数的argsort()
- 安卓学习 Day23:文件流操作
- 让人工智能学会幽默,人机对话不尴尬
- 逆战班第一篇:CSS动画
- C#Lua 过滤筛选脏字
- IDA Pro 7.0皮肤插件的安装与深色主题(包含背景色、前景色、指令颜色)的设置
- (原)游戏用户注册之随机昵称系统
- 运筹学 | 线性规划求解算法 | 单纯形法的python实现