我正在创建一个服务,其中有三个主题:
现在我看过像these这样的帖子,据说只有一个Helper类可用,而且只有DB连接。我试图通过使用Singleton模式只实现Helper类的一个实例,但是我完全混淆了如何创建只能创建一个可以实现前面提到的三个任务的数据库连接。这是我对Helper类的实现。
package com.example.userpc.roadtracker;
import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
/**
* Created by USER PC on 5/21/2016.
*/
public class DatabaseHelper extends SQLiteOpenHelper {
private static final String DATABASE_NAME="location_service.db";
private static final int VERSION=1;
private static final String DB_CREATE="CREATE TABLE `location_service`.`location` ( `id` INT NOT NULL AUTO_INCREMENT , `longitude` DOUBLE NOT NULL , `latitude` DOUBLE NOT NULL , PRIMARY KEY (`id`), UNIQUE (`longitude`, `latitude`)) ENGINE = MyISAM;";
private static SQLiteDatabase mDatabase=null;
private static DatabaseHelper mDatabaseHelper=null;
private DatabaseHelper(Context context) {
super(context, DATABASE_NAME, null, VERSION);
}
public static DatabaseHelper getInstance(Context context)
{
if(mDatabaseHelper==null)
return new DatabaseHelper(context);
else
return mDatabaseHelper;
}
public SQLiteDatabase getUsableDataBase()
{
if(mDatabase==null)
return this.getWritableDatabase();
else
return mDatabase;
}
@Override
public void onCreate(SQLiteDatabase sqLiteDatabase) {
sqLiteDatabase.execSQL(DB_CREATE);
}
@Override
public void onUpgrade(SQLiteDatabase sqLiteDatabase, int i, int i1) {
}
}
提前致谢。
答案 0 :(得分:1)
不,您仍需要同步访问SQLiteOpenHelper实例的代码块。
它将是具有Singleton的单个实例,但这并不意味着2个线程无法访问同一个实例。