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常用串口操作函 ...
随机推荐
- Python学习记录7-继承
面向对象的三大特性 封装 继承 多态 封装 封装就是对对象的成员进行访问限制 封装的三个级别: 公开,public 受保护的,protected 私有的,private public,private, ...
- 使用python下载图片(福利)
刚学python 没多久, 代码处处是漏洞,也希望各位大佬理解一下 爬出来的图片... 使用的 是 https://www.tianapi.com/ 接口下的 美女图片... (需要自己注册一个账号 ...
- Protocol handler start failedCaused by: java.net.SocketException: Permission denied
最近在使用mac启动项目的时候,发现原本在Windows下正常跑的项目报错如下: Protocol handler start failedCaused by: java.net.SocketExce ...
- Educational Codeforces Round 37 G. List Of Integers (二分,容斥定律,数论)
G. List Of Integers time limit per test 5 seconds memory limit per test 256 megabytes input standard ...
- Appium Desired Capabilities-General Capabilities
Desired Capabilities are keys and values encoded in a JSON object, sent by Appium clients to the ser ...
- python渗透测试工具集
下载地址:https://github.com/githubmaidou/tools
- RabbitMQ与Spring集成配置
1.引入相关jar包 //RabbitMQ compile group: 'org.springframework.amqp', name: 'spring-rabbit', version: '1. ...
- 小米 oj 马走日 (bfs 或 双向bfs)
马走日 序号:#56难度:困难时间限制:1500ms内存限制:10M 描述 在中国象棋中,马只能走日字型.现在给出一个由 N*M 个格子组成的中国象棋棋盘( 有(N+1)*(M+1)个交叉点可以落子 ...
- 在linux操作系统上进行简单的C语言源码的gcc编译实验
尝试在linux上用gcc 而非封装完好的codeblocks,vs等ide 来编译c和cpp源程序 首先查看我的gcc版本,我的是VM centos 自带的,没有的话得自行安装,安装上gcc就可以在 ...
- JavaWeb_(Hibernate框架)Hibernate论坛项目中一对多案例
基于SSH论坛小型项目 传送门 用户和发帖进行举例 一对多关系:一个用户可以发表多个帖子 一对一关系:一个帖子属于一个用户发布 创建数据库用户user表 CREATE TABLE `hforum`.` ...