Sqlite的操作示例代码
import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper; /**
* 黑名单数据库
*/
public class BlackNumberOpenHelper extends SQLiteOpenHelper { public BlackNumberOpenHelper(Context context) {
super(context, "blacknumber.db", null, 1);
} @Override
public void onCreate(SQLiteDatabase db) {
//创建表 number: 电话号码; mode: 拦截模式,0(拦截电话),1(拦截短信),2(拦截全部)
String sql = "create table blacknumber(_id integer primary key autoincrement, number " +
"varchar(30), mode integer)";
db.execSQL(sql);
} @Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { }
}
import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import java.util.ArrayList;
import cn.loaderman.mobilesafe11.db.BlackNumberOpenHelper;
import cn.loaderman.mobilesafe11.domain.BlackNumberInfo; /**
* Created by Administrator on 2016/11/24 0024.
* <p/>
* 黑名单增删改查操作: crud
* <p/>
* 单例设计模式
*/
public class BlackNumberDao { private final BlackNumberOpenHelper mHelper; //3. 声明一个静态对象: 两种方式初始化: 1. 饿汉模式
// private static BlackNumberDao mInstance = new BlackNumberDao();
//2. 懒汉模式
private static BlackNumberDao mInstance; //1. 私有构造方法
private BlackNumberDao(Context ctx) {
mHelper = new BlackNumberOpenHelper(ctx);
} //2.公开方法,返回单例对象
public static BlackNumberDao getInstance(Context ctx) {
//懒汉: 考虑线程安全问题, 两种方式: 1. 给方法加同步锁 synchronized, 效率低; 2. 给创建对象的代码块加同步锁
//读数据不会出现线程安全问题, 写数据会出现线程安全问题
//A, B, C
if (mInstance == null) {
//B, C
synchronized (BlackNumberDao.class) {
//A
if (mInstance == null) {
mInstance = new BlackNumberDao(ctx);
}
}
} return mInstance;
} public boolean add(String number, int mode) {
SQLiteDatabase database = mHelper.getWritableDatabase(); ContentValues values = new ContentValues();
values.put("number", number);
values.put("mode", mode);
//返回的是插入记录的id, -1表示失败
long insert = database.insert("blacknumber", null, values);
database.close();
return insert != -1;
} public boolean delete(String number) {
SQLiteDatabase database = mHelper.getWritableDatabase();
//返回删除的行数
int delete = database.delete("blacknumber", "number=?", new String[]{number});
database.close();
return delete > 0;
} public boolean update(String number, int mode) {
SQLiteDatabase database = mHelper.getWritableDatabase();
ContentValues values = new ContentValues();
//values.put("number", number);
values.put("mode", mode);
//返回更新的行数
int update = database.update("blacknumber", values, "number=?", new String[]{number});
database.close();
return update > 0;
} //查询某号码是否在黑名单数据库中
public boolean find(String number) {
SQLiteDatabase database = mHelper.getReadableDatabase(); Cursor cursor = database.query("blacknumber", null,
"number=?", new
String[]{number}, null, null, null);
boolean exist = false;
if (cursor != null) {
if (cursor.moveToNext()) {
//查询到了结果
//return true;
exist = true;
}
cursor.close();
}
database.close();
return exist;
} //查询某个号码的拦截模式
//返回-1表示没有查到结果
public int findMode(String number) {
SQLiteDatabase database = mHelper.getReadableDatabase(); Cursor cursor = database.query("blacknumber", new String[]{"mode"},
"number=?", new
String[]{number}, null, null, null); int mode = -1;
if (cursor != null) {
if (cursor.moveToNext()) {
//查询到了结果
mode = cursor.getInt(0);
}
cursor.close();
}
database.close();
return mode;
}
//查询所有黑名单集合
public ArrayList<BlackNumberInfo> findAll() {
SQLiteDatabase database = mHelper.getReadableDatabase();
Cursor cursor = database.query("blacknumber", new String[]{"number", "mode"},
null, null, null, null, null);
ArrayList<BlackNumberInfo> list = new ArrayList<>();
if (cursor != null) {
while (cursor.moveToNext()) {
BlackNumberInfo info = new BlackNumberInfo();
String number = cursor.getString(0);
int mode = cursor.getInt(1);
info.number = number;
info.mode = mode;
list.add(info);
}
cursor.close();
}
database.close(); return list;
} //分页查询黑名单集合
//index:查询的起始位置
public ArrayList<BlackNumberInfo> findPart(int index) {
SQLiteDatabase database = mHelper.getReadableDatabase();
//select * from blacknumber limit 0,20
//limit x,y : x代表起始数据位置; y代表查询多少条记录
//根据id逆序排列
Cursor cursor = database.rawQuery("select number,mode from blacknumber order by _id desc " +"limit ?,20", new String[]{index + ""});
ArrayList<BlackNumberInfo> list = new ArrayList<>();
if (cursor != null) {
while (cursor.moveToNext()) {
BlackNumberInfo info = new BlackNumberInfo();
String number = cursor.getString(0);
int mode = cursor.getInt(1);
info.number = number;
info.mode = mode;
list.add(info);
}
cursor.close();
}
database.close();
return list;
} //返回条目总个数
public int getTotalCount() {
//select count(*) from blacknumber
SQLiteDatabase database = mHelper.getReadableDatabase();
Cursor cursor = database.rawQuery("select count(*) from blacknumber", null);
int count = 0;
if (cursor != null) {
if (cursor.moveToNext()) {
count = cursor.getInt(0);
}
cursor.close();
}
database.close();
return count;
}
}
Sqlite的操作示例代码的更多相关文章
- lua连接数据库操作示例代码
lua连接数据库可以使用resty.mysql库 示例代码如下: local mysql = require "resty.mysql" local db, err = mysql ...
- android Api操作SQLite数据库的示例代码
import android.content.Context; import android.database.sqlite.SQLiteDatabase; import android.databa ...
- 用SQL语句操作Sqlite数据库的示例代码
import android.content.Context; import android.database.sqlite.SQLiteDatabase; import android.databa ...
- ConcurrentHashMap Put()操作示例代码
非常简练: private static void put(MetricKey key, float value) { MetricValue current; do { current = map. ...
- C#文件的拆分与合并操作示例
C#文件的拆分与合并操作示例代码. 全局变量定义 ;//文件大小 //拆分.合并的文件数 int count; FileInfo splitFile; string splitFliePath; Fi ...
- C#使用互斥量(Mutex)实现多进程并发操作时多进程间线程同步操作(进程同步)的简单示例代码及使用方法
本文主要是实现操作系统级别的多进程间线程同步(进程同步)的示例代码及测试结果.代码经过测试,可供参考,也可直接使用. 承接上一篇博客的业务场景[C#使用读写锁三行代码简单解决多线程并发写入文件时线程同 ...
- 3.NetDh框架之缓存操作类和二次开发模式简单设计(附源码和示例代码)
前言 NetDh框架适用于C/S.B/S的服务端框架,可用于项目开发和学习.目前包含以下四个模块 1.数据库操作层封装Dapper,支持多种数据库类型.多库实例,简单强大: 此部分具体说明可参考博客: ...
- 2.NetDh框架之简单高效的日志操作类(附源码和示例代码)
前言 NetDh框架适用于C/S.B/S的服务端框架,可用于项目开发和学习.目前包含以下四个模块 1.数据库操作层封装Dapper,支持多种数据库类型.多库实例,简单强大: 此部分具体说明可参考博客: ...
- Arduino - 串口操作函数与示例代码大全
来源:https://blog.csdn.net/iracer/article/details/50334041 Arduino - 串口操作函数与示例代码大全 本文总结了Arduino常用串口操作函 ...
随机推荐
- 【坑】new一个对象时,tostring报空指针异常
错误环境 java1.8.0_111 错误描述 对某vo进行了修改,属性类型由long修改为了Long,getter.setter没有修改类型 调用该对象的new方法时抛出npe 错误原因 没深究.. ...
- 地沟油jiance
与地沟油较劲九年(我和我的祖国) 任 飞 2019年06月13日05:00 来源:人民网-人民日报 分享到: 地沟油中含有多种有毒有害物质,但地沟油的检测却是一大难题.单靠眼睛谁也无法判断 ...
- 解读Position
首先Position在字面讲是位置的意思,在HTML中是定位的意思,它有四种属性:分别是static是静态的,也是默认的效果,没有特别的设定,遵循基本的定位规定,不能通过z-index进行层次分级. ...
- kotlin字符串模板&条件控制
字符串模版: 小时候都有要求记日记的习惯,下面是一小学生记的日记: 很漂亮的流水账,那细分析一下这些文件其实大体都类似,只有几个不同点: 其实就是地点变了,那对于这种有规律的文字可以采用kotlin的 ...
- Spring源码解读(一)
前期准备 首先搭建一个简单的Spring Demo工程 项目目录结构如下图所示: applicationContect.xml (可以取其他文件名,只要在加载配置文件时指定文件路径) <?xml ...
- windows下多个python版本共存 及安装Django
了解python的人都知道python有2.x版本和3.x版本,而python3.x版本不向下兼容,但是根据具体的需要,有时候要2.x和3.x共存,python共存本身没有问题,只是需要设置一些环境变 ...
- BZOJ 1845: [Cqoi2005] 三角形面积并 (辛普森积分)
大力辛普森积分 精度什么的搞了我好久- 学到了Simpson的一个trick 深度开11,eps开1e-4.跑的比有些扫描线还快- CODE #include <bits/stdc++.h> ...
- MySQL5.7.21解压版安装详细教程(转)
由于本人经常装系统,每次装完系统之后都要重新安装一些软件,安装软件的时候又要上网查找安装的教程,比较麻烦,所以自己整理了MySQL5.7.21解压版的安装方法,以便查看. 1.首先,你要下载MySQL ...
- Spring@PostConstruct和@PreDestroy注解详解
@PostConstruct注解使用 @PostConstructApi使用说明 The PostConstruct annotation is used on a method that needs ...
- Spring AMQP 发送消息到 RabbitMQ 收到 x-queue-type 错误
在使用 Spring AMQP 发送消息到 RabbitMQ 的时候收到错误信息: inequivalent arg 'x-queue-type' for queue 'com.ossez.real. ...