SQLite数据库使用
最近在查看一些关于数据库的相关文档博客写写总结,以防下次自己又忘啦 哈哈
首先,安卓是有给我们提供一个帮助类SQLiteOpenHelper,这个类我们一般需要实现3个方法,哈哈这个编译工具是会提示我们的:
1、构造方法,这个方法一般直接支持父类就好啦,父类提供了两种构造方法,我采用的是短的那个;
2、onCreate()方法,这个方法在数据库创建之后就只会调用一次,一般在这个方法里边我们可以放我们的建表语句来创建我们的数据表。
3、onUpgrade()方法,这个方法是在之后数据库有升级的时候被调用,当我们传入的数据库版本号比当前版本大的时候会调用,一般是我们需要创建新表,或是原来的表数据结构发生了变化的时候,这些操作我们会放在这个方法中;
public class CommonHospitalDbHelper extends SQLiteOpenHelper {
public CommonHospitalDbHelper(Context context, String name, SQLiteDatabase.CursorFactory factory, int version) {
super(context, name, factory, version);
} @Override
public void onCreate(SQLiteDatabase db) {
db.execSQL("create table common_hospital(id integer primary key,time varchar(50),count integer)");
} @Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { }
} 然后,安卓还给我们提供了一个SQLiteDateBase类;通过这个类我们可以对数据库进行一些增删该查的工作,该类我们主要掌握
两个方法execSQL()和rawQuery(),execSQL()方法主要是处理一些数据上有变动的事物,如插入数据insert,删除数据delete,
修改更新数据update,建表create等,rawQuery()方法一般是处理不需要改变数据的事物,如查询数据select;那么如何得到一个
SQLiteDateBase,SQLiteOpenHelper类给我们提供了2种方法:
1、getWritableDatabase()方法可以获取一个用于操作数据库的SQLiteDatabase实例。
getWritableDatabase()方法以读写方式打开数据库,一旦数据库的磁盘空间满了,数据库就只能读而不能写,倘若使用getWritableDatabase()
打开数据库就会出错。
2、getReadableDataBase()方法可以获取一个用于操作数据库的SQLiteDatabase实例。getReadableDatabase()方法先以读写方式打开数据库,
如果数据库的磁盘空间满了,就会打开失败,当打开失败后会继续尝试以只读方式打开数据库。
Context也给我们提供了一个方法:openOrCreateDatabase()该方法可以打开或创建一个数据库,如果存在则打开,
不存在就创建,创建成功返回SQLiteDateBase对象,失败则会抛出一个异常FileNotFoundException(); 上述方法事例: 1、SQLiteDatabase db = SQLiteOpenHelper实现类对象.getWritableDatabase(); 2、SQLiteDatabase db = SQLiteOpenHelper实现类对象.getReadableDataBase(); 3、SQLiteDatabase db = context.openOrCreateDatabase("common_hospital",MODE_PRIVATE,null); 一般我们会建立一个dao类来统一处理数据库的一些操作:
public class CommonHospitalDao {
private CommonHospitalDbHelper commonHospitalDbHelper; public CommonHospitalDao(Context context){
this.commonHospitalDbHelper = new CommonHospitalDbHelper(context,"hospital.db",null,1);
} /**
* 保存数据
*/
public void save(CommonHospital commonHospital){
SQLiteDatabase db = commonHospitalDbHelper.getWritableDatabase();
db.execSQL("insert into common_hospital(id,time,count) values(?,?,?)",new Object[]{
commonHospital.getId(),commonHospital.getTime(),commonHospital.getCount()
});
db.close();
} /**
* 更新数据
* @param commonHospital
*/
public void update(CommonHospital commonHospital){
SQLiteDatabase db = commonHospitalDbHelper.getWritableDatabase();
db.execSQL("update common_hospital set time=?,count=? where" + " id=?",new Object[]{
commonHospital.getTime(),commonHospital.getCount(),commonHospital.getId()
});
db.close();
} /**
* 根据医院id查找医院
* @param id
* @return
*/
public CommonHospital find(Integer id){
CommonHospital commonHospital = null;
SQLiteDatabase db = commonHospitalDbHelper.getWritableDatabase();
//用游标Cursor接收从数据库检索到的数据
Cursor cursor = db.rawQuery("select * from common_hospital where id=?",new String[]{id.toString()});
if(cursor.moveToFirst()){
commonHospital = new CommonHospital();
commonHospital.setId(cursor.getInt(cursor.getColumnIndex("id")));
commonHospital.setTime(cursor.getString(cursor.getColumnIndex("time")));
commonHospital.setCount(cursor.getInt(cursor.getColumnIndex("count")));
}
db.close();//数据操作完成要记得关闭数据库
return commonHospital;
} /**
* 查找所有医院
* @return
*/
public List<CommonHospital> findAll(){
List<CommonHospital> list = new ArrayList<>();
CommonHospital commonHospital = null;
SQLiteDatabase db = commonHospitalDbHelper.getWritableDatabase();
Cursor cursor = db.rawQuery("select * from common_hospital",null);
while (cursor.moveToNext()){
commonHospital = new CommonHospital();
commonHospital.setId(cursor.getInt(cursor.getColumnIndex("id")));
commonHospital.setTime(cursor.getString(cursor.getColumnIndex("time")));
commonHospital.setCount(cursor.getInt(cursor.getColumnIndex("count")));
list.add(commonHospital);
}
return list;
}
} 然后就是一些在别的地方调用这些方法来进行具体操作啦。 除了前面给大家介绍的execSQL()和rawQuery()方法, SQLiteDatabase还专门提供了对应于添加、删除、更新、查询的操作方法:
insert()、delete()、update()和query() 。这些方法对于不太了解SQL语法的使用的人来说将是不错的选择,对于熟悉SQL语法的程序员
而言,直接使用execSQL()和rawQuery()方法执行SQL语句就能完成数据的添加、删除、更新、查询操作。 insert():
该方法返回新插入数据的行号,与主id无关;
delete():
中间的参数表示的是删除条件;
update():
第二个是你需要更新的值,第三个和第四个构成需要更改那些数据的条件;
最后就是query()方法啦:
该方法我们看到有好多重构的方法,一般我们用第3个这种就够啦;
第一个参数表名,第二个你要查询哪几个字段,第三和第四构成查询条件,第五个表示的是分组列,第六个表示的是分组条件,这两个一般传null就好了,第七个是排序列;
SQLite数据库使用的更多相关文章
- Android之SQLite数据库篇
一.SQLite简介 Google为Andriod的较大的数据处理提供了SQLite,他在数据存储.管理.维护等各方面都相当出色,功能也非常的强大. 二.SQLite的特点 1.轻量级使用 SQLit ...
- Qt5 开发 iOS 应用之访问 SQLite 数据库
开发环境: macOS 10.12.1 Xcode 8.1 Qt 5.8 iPhone 6S+iOS 10.1.1 源代码: 我在 Qt 程序里指定了数据库的名称来创建数据库,在 Win10.An ...
- 【Win 10 应用开发】Sqlite 数据库的简单用法
如果老周没记错的话,园子里曾经有朋友写过如何在 UWP 项目中使用 Sqlite数据库的文章.目前我们都是使用第三方封装的库,将来,SDK会加入对 Sqlite 的支持. 尽管目前 UWP-RT 库中 ...
- Android之SQLite数据库使用
转载整理于:http://my.csdn.net/lmj623565791 我刚开始接触Android的时候甚至都不敢相信,Android系统竟然是内置了数据库的!好吧,是我太孤陋寡闻了.由于我之前是 ...
- 让PDF.NET支持最新的SQLite数据库
最近项目中用到了SQLite,之前项目中用的是PDF.NET+MySQL的组合,已经写了不少代码,如果能把写好的代码直接用在SQLite上就好了,PDF.NET支持大部分主流的数据库,这个当然可以,只 ...
- iOS sqlite数据库图像化查看
问题描述:在xocde上用sqlite数据库的时候,因为没有图形化界面,有些时候很难看出自己设计的数据库是否有问题,比如我刚上手sqlite数据库设计id为自增长时,很自然的用了identify(1, ...
- Android中SQLite数据库小计
2016-03-16 Android数据库支持 本文节选并翻译<Enterprise Android - Programing Android Database Applications for ...
- Android开发-之SQLite数据库
之前我们讲了如何将数据存储在文件中,那么除了这种方式呢,就是我们常见的大家都知道的将数据存储在数据库当中了. 将数据存储在数据库中的优势: 1)存储在数据库中的数据更加方便操作,比如增.删.改.查等 ...
- Java操作Sqlite数据库-jdbc连接
Java操作Sqlite数据库步骤: 1. 导入Sqlite jdbc 本文使用sqlite-jdbc-3.7.2.jar,下载地址 http://pan.baidu.com/s/1kVHAGdD 2 ...
- Android开发学习——SQLite数据库与单元测试
SQLite数据库 轻量级关系型数据库 创建数据库需要使用的api:SQLiteOpenHelper public class Myopenhelper extends SQLiteOpenHelp ...
随机推荐
- 【66测试20161115】【树】【DP_LIS】【SPFA】【同余最短路】【递推】【矩阵快速幂】
还有3天,今天考试又崩了.状态还没有调整过来... 第一题:小L的二叉树 勤奋又善于思考的小L接触了信息学竞赛,开始的学习十分顺利.但是,小L对数据结构的掌握实在十分渣渣.所以,小L当时卡在了二叉树. ...
- Apache安装与属性配置
Apache 事先创建进程 按需维持适当的进程 模块块设计,核心比较小,各种功能都模块添加(包括php) 支持运行配置,支持单独编译模块 支持多种方式的虚拟主机配置 Socket IP ...
- AnyCAD.NET C#开发CAD软件实践(一)
免费的AnyCAD.NET发布了!俺喜欢的C#有了大展前途的机会了. 打算用这个框架搭建一套实用的CAD系统,目标是能买出去10套以上. 先看看AnyCAD.NET的自我介绍. http://www. ...
- CentOS 6.6编译安装Nginx1.6.2+MySQL5.6.21+PHP5.6.3
http://www.osyunwei.com/archives/8867.html 一.配置防火墙,开启80端口.3306端口 vi /etc/sysconfig/iptables #编辑防火墙配置 ...
- 初学者的python学习笔记2——作业篇
这次的作业是商城展示,最开始的确是一脸懵逼,后来研究了一下网上的例子,总算是搞出来了一个(其实算是网上列子的简化版?). 最开始是想要使用字典去做,发现显示列表的时候怎么也无法实现序号和名称对应,原因 ...
- iOS开发学习概述及知识整理
设计师设计出来了一个不错的引导界面,然而当我看到设计稿的时候,我们的app也没几天就要上线了.这个界面模仿了Evernote iOS app的风格. 我以迅雷不及掩耳盗铃之势开始在Xcode上编程,用 ...
- android开发虚拟机不能正常启动
点击 window---perspective---DDMS---查看设备状态, 如果显示没有可用设备,则在AVD manager中重 启即可, 若列表中有设备,但显示offline 可采用一下方式 ...
- 使用vs2010创建MFC C++ Ribbon程序
Your First MFC C++ Ribbon Application with Visual Studio 2010 Earlier this month, I put together my ...
- 使用Excel 2007绘制甘特图
本文将教大家如何使用Excel 2007制作甘特图.Excel并未提供甘特图类型,但还是可以绘制甘特图的,方法就是通过对堆积条形图类型进行自定义,使之显示任务.任务工期和层次结构. 下面的过程可帮助创 ...
- BZOJ 3156 防御准备
也是斜率优化....推下式子就好了. #include<iostream> #include<cstdio> #include<cstring> #include& ...