Android Sqlite的使用(多线程优化)
2016-06-27 11:44
363 查看
1 新建一个数据库打开类继承自SQLiteOpenHelper。
2 创建数据访问接口,因为用于存储线程信息,所以命名为ThreadDao。
3 在ThreadDaoImp1类中实现ThreadDao接口,调用类中方法用于操作数据库的增删改查。
package com.db; import android.content.Context; import android.database.sqlite.SQLiteDatabase; import android.database.sqlite.SQLiteOpenHelper; /** * Created by c9736 on 2016/6/26. */ public class DBHelper extends SQLiteOpenHelper{ private static final String DB_NAME="download.db"; private static final int VERSION=1; private static final String SQI_CREATE="create table thread_info(_id integer primary key autoincrement,thread_id integer,url text,start " + "integer,end integer,finished integer);"; private static final String SQL_DROP="drop table if exists thread_info"; public DBHelper(Context context) { super(context, DB_NAME, null, VERSION); } @Override public void onCreate(SQLiteDatabase db) { db.execSQL(SQI_CREATE); } @Override public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { db.execSQL(SQL_DROP); db.execSQL(SQI_CREATE); } } /** * 获得类的对象 */ public static DBHelper getInstance(Context context){ if(dbHelper==null){ dbHelper=new DBHelper(context); //永远只会被实例化一次 } return dbHelper; }
2 创建数据访问接口,因为用于存储线程信息,所以命名为ThreadDao。
package com.db; import com.entities.ThreadInfo; import java.util.List; /** * 数据访问接口 * Created by c9736 on 2016/6/26. */ public interface ThreadDao { /** 插入线程信息 */ public void insertThread(ThreadInfo threadInfo); /** 删除线程 */ public void deleteThread(String url,int Thread_id); /** * 更新线程 */ public void updateThread(String url,int thread_id,int finished); /** 查询文件线程信息 */ public List<ThreadInfo> getThreads(String url); /** *线程是否存在 */ public boolean isExists(String url ,int thread_id); }
3 在ThreadDaoImp1类中实现ThreadDao接口,调用类中方法用于操作数据库的增删改查。
package com.db; import android.content.Context; import android.database.Cursor; import android.database.sqlite.SQLiteDatabase; import android.util.Log; import com.entities.ThreadInfo; import java.util.ArrayList; import java.util.List; /** * 数据访问接口的实现 * Created by c9736 on 2016/6/26. */ public class ThreadDaoImp1 implements ThreadDao { private DBHelper dbHelper=null; public ThreadDaoImp1(Context context){ dbHelper=DBHelper.getInstance(context); } @Override public synchronized void insertThread(ThreadInfo threadInfo) {//多线程优化,任何时刻不能有多个线程进行插入操作,防止死锁发送 SQLiteDatabase db=dbHelper.getWritableDatabase();//获取可写的数据库 db.execSQL("insert into thread_info(thread_id,url,start,end,finished)values(?,?,?,?,?)",new Object[]{threadInfo.getId() ,threadInfo.getUrl(), threadInfo.getStart() ,threadInfo.getEnd(),threadInfo.getFinished()}); db.close(); } @Override public synchronized void deleteThread(String url) { SQLiteDatabase db=dbHelper.getWritableDatabase();//获取可写的数据库 db.execSQL("delete from thread_info where url=?",new Object[]{url}); db.close(); } @Override public synchronized void updateThread(String url, int thread_id, int finished) { SQLiteDatabase db=dbHelper.getWritableDatabase();//获取可写的数据库 db.execSQL("update thread_info set finished=? where url=? and thread_id=?",new Object[]{finished,url,thread_id}); db.close(); } @Override public List<ThreadInfo> getThreads(String url) { SQLiteDatabase db=dbHelper.getReadableDatabase(); List<ThreadInfo> threadInfoList=new ArrayList<ThreadInfo>(); Cursor cursor=db.rawQuery("select * from thread_info where url=?",new String[]{url}); while (cursor.moveToNext()){ ThreadInfo threadInfo=new ThreadInfo(); threadInfo.setId(cursor.getInt(cursor.getColumnIndex("thread_id"))); threadInfo.setUrl(cursor.getString(cursor.getColumnIndex("url"))); threadInfo.setStart(cursor.getInt(cursor.getColumnIndex("start"))); threadInfo.setEnd(cursor.getInt(cursor.getColumnIndex("end"))); threadInfo.setFinished(cursor.getInt(cursor.getColumnIndex("finished"))); Log.i("test", "thread_info_Query" + threadInfo.toString()); threadInfoList.add(threadInfo); } db.close(); return threadInfoList; } @Override public boolean isExists(String url,int thread_id) { be5b SQLiteDatabase db=dbHelper.getReadableDatabase(); Cursor cursor=db.rawQuery("select * from thread_info where url=? and thread_id=?",new String[]{url,thread_id+""}); boolean exists=cursor.moveToNext(); db.close(); return false; } } package com.entities; /** * 线程信息 * Created by c9736 on 2016/6/25. */ public class ThreadInfo { private int id; private String url; private int start; private int end; private int finished; public ThreadInfo(int id, int finished, String url, int start, int end) { this.id = id; this.finished = finished; this.url = url; this.start = start; this.end = end; } @Override public String toString() { return "ThreadInfo{" + "id=" + id + ", url='" + url + '\'' + ", start=" + start + ", end=" + end + ", finished=" + finished + '}'; } public ThreadInfo() { super(); } public int getId() { return id; } public void setId(int id) { this.id = id; } public String getUrl() { return url; } public void setUrl(String url) { this.url = url; } public int getStart() { return start; } public void setStart(int start) { this.start = start; } public int getEnd() { return end; } public void setEnd(int end) { this.end = end; } public int getFinished() { return finished; } public void setFinished(int finished) { this.finished = finished; } }
相关文章推荐
- 使用C++实现JNI接口需要注意的事项
- Android IPC进程间通讯机制
- Android Manifest 用法
- [转载]Activity中ConfigChanges属性的用法
- Android之获取手机上的图片和视频缩略图thumbnails
- Android之使用Http协议实现文件上传功能
- Android学习笔记(二九):嵌入浏览器
- android string.xml文件中的整型和string型代替
- i-jetty环境搭配与编译
- android之定时器AlarmManager
- android wifi 无线调试
- Android Native 绘图方法
- Android java 与 javascript互访(相互调用)的方法例子
- android 代码实现控件之间的间距
- android FragmentPagerAdapter的“标准”配置
- Android"解决"onTouch和onClick的冲突问题
- android:installLocation简析
- android searchView的关闭事件