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常用串口操作函 ...
随机推荐
- linux物理地址和虚拟地址
- 《数据结构与算法之美》 <02>复杂度分析(下):浅析最好、最坏、平均、均摊时间复杂度?
上一节,我们讲了复杂度的大 O 表示法和几个分析技巧,还举了一些常见复杂度分析的例子,比如 O(1).O(logn).O(n).O(nlogn) 复杂度分析.掌握了这些内容,对于复杂度分析这个知识点, ...
- Hadoop_18_MapRduce 内部的shuffle机制
1.Mapreduce的shuffle机制: Mapreduce中,map阶段处理的数据如何传递给Reduce阶段,是mapreduce框架中最关键的一个流程,这个流程就叫shuffle 将mapta ...
- Ubuntu系统--安装官方flash插件包的方法
浏览器安装官方install_flash_player_npapi_linux.x86_64.tar.gz插件包的方法 第一步:下载安装包. adobe flash player的官方下载instal ...
- js修改元素的属性
<script type="text/javascript"> //给id为nice的元素 添加title属性并赋值为"测试title" funct ...
- 配置linux ftp服务器,客户端报list remote folder fail
XFTP出现列表文件夹失败.主要是因为FTP模式不对,应该为主动连接模式, 可以在设置主机属性 - 选项页签 - 将默认勾选的“使用被动模式”(使用消极模式)的多选框取消...就可以了...
- PHPStorm 3.3 破解方法 以及汉化
第一步修改host文件(host文件地址为): C:\Windows\System32\drivers\etc 将以下内容添加到host文件里面 0.0.0.0 account.jetbrai ...
- 0912 for循环及内置方法
目录 for 循环 1.循环 2.循环取值 3.range 4.for + break 5.for+continue 6.for + else 数字类型内置方法 整型 浮点型 字符串 1.作用 2.作 ...
- Invalid argument: Key: label. Data types don't match. Data type: int64 but expected type: float
改为
- Python3-元祖
# Tuple(元组) # 元组(tuple)与列表类似,不同之处在于元组的元素不能修改.元组写在小括号(())里,元素之间用逗号隔开. # 元组中的元素类型也可以不相同 tuple = ('abcd ...