一、数据库操作
package com.ping.db;
import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteDatabase.CursorFactory;
import android.database.sqlite.SQLiteOpenHelper;
/**
* @describe <数据库操作>
*/
public class SQLiteTool extends SQLiteOpenHelper {
private static final String DB_NAME = "medicalscience.db"; // 数据库文件名
private static final int VERSION = 1;// 数据库版本 public static SQLiteTool newInstance(Context context) {
return new SQLiteTool(context, DB_NAME, null, VERSION);
}
private SQLiteTool(Context context, String name, CursorFactory factory, int version) {
super(context, name, factory, version);
}
@Override
public void onCreate(SQLiteDatabase db) {
db.execSQL(DBTCollect.createTableSQL());//有需要创建表时,可以在这添加
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {//当数据库版本变大时调用
onCreate(db);
}
} 二、数据库管理类
package com.ping.db;
import java.util.concurrent.atomic.AtomicInteger;
import android.annotation.SuppressLint;
import android.database.sqlite.SQLiteDatabase;
import android.os.Build;
import com.ping.MyApplication;
/**
* @describe <数据库管理类>
*/
public class DBManager {
private AtomicInteger dbOpenCount = new AtomicInteger();//计数器
private static DBManager instance;
private static SQLiteTool sqlLiteTool;
private SQLiteDatabase database;
public static synchronized DBManager getInstance() {
if (instance == null) {
synchronized (DBManager.class) {
if (instance == null) {
instance = new DBManager();
}
}
}
return instance;
}
private DBManager() {
sqlLiteTool = SQLiteTool.newInstance(MyApplication.getInstance().getApplicationContext());
}
@SuppressLint("NewApi")
public synchronized SQLiteDatabase openDatabase() {
if (dbOpenCount.incrementAndGet() == 1) {
database = sqlLiteTool.getWritableDatabase();
if (Build.VERSION.SDK_INT >= 11) {
database.enableWriteAheadLogging();// 允许读写同时进行
}
}
return database;
}
public synchronized void closeDatabase() {
if (dbOpenCount.decrementAndGet() == 0) {
database.close();
database = null;
}
}
} 三、数据增删改查
package com.ping.db;
import java.util.ArrayList;
import android.content.ContentValues;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
/**
* @describe <数据库操作--收藏表的操作 >
*/
public class DBTCollect {
public static final String TNAME = "Tcollect";
// 创建表的语句
public static String createTableSQL() {
return "CREATE TABLE IF NOT EXISTS " + TNAME + " (kid INTEGER PRIMARY KEY AUTOINCREMENT, id TEXT, title TEXT)";
}
// 删除表的语句
public static String deleteTabelSQL() {
return "DROP TABLE IF EXISTS " + TNAME;
}
//查询数据是否存在
public static boolean isCollected(String id) {
boolean isCollected = false;
SQLiteDatabase db = DBManager.getInstance().openDatabase();//获得SQLiteDatabase对象
String sql = "select * from " + TNAME + " where id = '" + id + "'";
Cursor cursor = db.rawQuery(sql, null);
if (cursor.getCount() > 0) {
isCollected = true;
}
cursor.close();
DBManager.getInstance().closeDatabase();//关闭
return isCollected;
} // 删除数据
public static void deleteCollect(String mid) {
SQLiteDatabase db = DBManager.getInstance().openDatabase();
db.delete(TNAME, "id = ?", new String[] { id });
DBManager.getInstance().closeDatabase();
} //增加数据
public static void addCollect(Object obj) {
SQLiteDatabase db = DBManager.getInstance().openDatabase();
ContentValues cv = new ContentValues();
cv.put("id", obj.id);
cv.put("title", obj.title);
db.insert(TNAME, null, cv);
DBManager.getInstance().closeDatabase();
}
//查询数据
public static ArrayList<Object> getAllCollect() {
SQLiteDatabase db = DBManager.getInstance().openDatabase();
Cursor cursor = db.query(TNAME, null, null, null, null, null, null);
ArrayList<Object> objs = new ArrayList<Object>();
while (cursor.moveToNext()) {
Object obj = new Object();
obj.id = cursor.getString(cursor.getColumnIndex("id"));
obj.title = cursor.getString(cursor.getColumnIndex("title"));
objs.add(obj);
}
cursor.close();
DBManager.getInstance().closeDatabase();
return objs;
}
}

Android项目中单实例数据库类,解决database is locked的更多相关文章

  1. XamarinSQLite教程在Xamarin.Android项目中提取数据库文件

    XamarinSQLite教程在Xamarin.Android项目中提取数据库文件 由于不能直接打开该文件,开发者需要先将数据库文件从Android系统中提取出来.操作步骤如下. (5)选择MyDoc ...

  2. XamarinSQLite教程在Xamarin.Android项目中定位数据库文件

    XamarinSQLite教程在Xamarin.Android项目中定位数据库文件 实际开发中,经常需要验证数据库操作的正确性.这个时候,需要打开数据库文件,进行确认.下面是如何找到MyDocumen ...

  3. XamarinSQLite教程在Xamarin.Android项目中使用数据库

    XamarinSQLite教程在Xamarin.Android项目中使用数据库 在Xamarin.Android项目中使用预设数据库的具体操作步骤如下: (1)创建一个Xamarin.Android项 ...

  4. Android多线程操作sqlite(Sqlite解决database locked问题)

    参考http://blog.csdn.net/sdsxleon/article/details/18259973  很好 https://github.com/2point0/Android-Data ...

  5. 用gradle管理android项目出现的问题以及解决方法

    1.项目结构 最好是全部在root 项目配置 一个settings.gradle 一个build.gradle 2.多项目依赖 http://www.gradle.org/docs/current/u ...

  6. Android多线程操作sqlite(Sqlite解决database locked问题)(2)使用事务处理的效果

    问题场景描述: 在页面中用到了ViewPager控件,ViewPager中的内容分别是两个ListView,两个ListView的数据都来自本地数据库(先从网络下载数据,然后更新本地数据库),在实际的 ...

  7. 使用FMDB多线程访问数据库,及database is locked的问题

    每日更新关注:http://weibo.com/hanjunqiang  新浪微博 今天终于解决了多线程同时访问数据库时,报数据库锁定的问题,错误信息是: Unknown error finalizi ...

  8. 使用FMDB多线程訪问数据库,及database is locked的问题

    今天最终攻克了多线程同一时候訪问数据库时,报数据库锁定的问题.错误信息是: Unknown error finalizing or resetting statement (5: database i ...

  9. <转>使用eclipse编译cocos2d-x示例项目,创建cocos2d-x android项目并部署到真机

    准备 今天将cocos2d-x的示例项目tests编译到android真机运行,以及如何创建cocos2d-x的android项目. 打开cocos2d-x的tests项目,路径为:D:\cocos2 ...

随机推荐

  1. 【转】SIP初步

    1.什么是SIP SIP(会话发起协议)属于IP应用层协议,用于在IP网上为用户提供会话应用.会话(Session)指两方或多方用户之间的语音.视频.及其他媒体形式的通信,具体可能是IP电话.会议.即 ...

  2. 修改bigbluebutton白板上传中文乱码

          中文命名的文档,上传是乱码 -- 显示的 打开后, 中文部分是乱码 Comment 1 by project member ffdixon, Nov 08, 2010 Translatio ...

  3. ubuntu下搭建cocos2dx编程环境-中

        上篇文章里讲了在ubuntu下部署cocos2d-x开发环境,这篇文章主要示范在ubuntu下部署cocos2d-x android开发环境.分开写就是因为我看很多文章里都将这两件事情混杂着写 ...

  4. OpenSSL 使用 base64 编码/解码

    简述 关于 OpenSSL 的介绍及安装请参见:Windows下编译OpenSSL 下面主要介绍有关 OpenSSL 使用 base64 编码/解码. 简述 编码解码 更多参考 编码/解码 #incl ...

  5. 编辑器Emacs下载网址(中国镜像)

      Root gnu emacs windows File Name ↓ File Size ↓ Date ↓ Parent directory/ - - README 14K 2014-Nov-15 ...

  6. 应用scikit-learn做文本分类

    文本挖掘的paper没找到统一的benchmark,只好自己跑程序,走过路过的前辈如果知道20newsgroups或者其它好用的公共数据集的分类(最好要所有类分类结果,全部或取部分特征无所谓)麻烦留言 ...

  7. OOP数据库操作方法

    一.数据库操作 连接MYSQL数据 面向对象访问数据库e.g. 造对象 $dx=new MySQLi("localhost","root","123& ...

  8. [原]武大预选赛F题-(裸并查集+下标离散化+floyd最短路)

    Problem 1542 - F - Countries Time Limit: 1000MS Memory Limit: 65536KB Total Submit: 266 Accepted: 36 ...

  9. HUD-1142

    A Walk Through the Forest Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Jav ...

  10. samba linux windows 请联系管理员

    在使用Samba进行建立Window与Linux共享时,要是不能访问,出现“您可能没有权限使用网络资源”, 那就是SELinux在作怪了 要是想让共享目录能访问,可以使用命令 #setenforce ...