如何解决SQLiteOpenHelper.getDatabaseLocked错误试图访问一个SQLite数据库中的android? [英] How can i fix SQLiteOpenHelper.getDatabaseLocked error while trying to access a SQLite database in android?
本文介绍了如何解决SQLiteOpenHelper.getDatabaseLocked错误试图访问一个SQLite数据库中的android?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我试图从SQLite数据库检索一些数据。但是,当我尝试使用方法getTaskSent检索数据,我得到了以下错误。任何人都可以给我建议以下错误的解决方案?
E / AndroidRuntime(23159):在android.database.sqlite.SQLiteOpenHelper.getDatabaseLocked(SQLiteOpenHelper.java:224)
下面是我的数据库code:
公共类数据库处理器扩展SQLiteOpenHelper {
私有静态最后弦乐的logcat = NULL;
公共数据库处理器(背景下的ApplicationContext){
超(ApplicationContext中,androidsqlite.db,空,4);
// TODO自动生成构造函数存根
Log.d(logcat中,数据库创建);
}
@覆盖
公共无效的onCreate(SQLiteDatabase DB){
// TODO自动生成方法存根
查询字符串,QUERY1,query2;
查询=CREATE TABLE用户登陆(phoneId INTEGER PRIMARY KEY,用户名文本,用户ID INTEGER,联系人TEXT唯一的);
QUERY1 =CREATE TABLE任务(任务id INTEGER PRIMARY KEY,标题文本,说明文本,文本D1,D2文本,文本T1,T2文本,接收文本,发送文本);
query2 =CREATE TABLE我(fbId INTEGER PRIMARY KEY,fbname TEXT,fbuserid INTEGER,fbpic BLOB,pH值文本,电子邮件文本);
db.execSQL(QUERY1);
db.execSQL(查询);
db.execSQL(query2);
}
公共无效inserttask(HashMap的<字符串,字符串> queryValues){
SQLiteDatabase数据库= this.getWritableDatabase();
ContentValues values2 =新ContentValues();
values2.put(标题,queryValues.get(标题));
values2.put(递减,queryValues.get(降序));
values2.put(D1,queryValues.get(D1));
values2.put(D2,queryValues.get(D2));
values2.put(T1,queryValues.get(T1));
values2.put(T2,queryValues.get(T2));
values2.put(发件人,queryValues.get(发件人));
values2.put(接收器,queryValues.get(接收器));
database.insert(任务,空,values2);
database.close();
}
公众的ArrayList< HashMap的<字符串,字符串>> getTaskSent(){
ArrayList的< HashMap的<字符串,字符串>>单词表;
单词表=新的ArrayList< HashMap的<字符串,字符串>>();
字符串selectQuery =SELECT * FROM任务;
SQLiteDatabase数据库= this.getReadableDatabase();
光标光标= database.rawQuery(selectQuery,NULL);
如果(cursor.moveToFirst()){
做 {
HashMap的<字符串,字符串>图=新的HashMap<字符串,字符串>();
//map.put("userid,cursor.getString(1));
map.put(标题,cursor.getString(1));
map.put(递减,cursor.getString(2));
map.put(D1,cursor.getString(3));
map.put(D2,cursor.getString(4));
map.put(T1,cursor.getString(5));
map.put(T2,cursor.getString(6));
map.put(接收机,cursor.getString(7));
wordList.add(图)
}而(cursor.moveToNext());
} cursor.close();
database.close();
返回词表;
}
解决方案
在上下文
传递给你的数据库处理器
构造函数是空
。
I am trying to retrieve some data from a Sqlite database. But when I try to retrieve data using the method getTaskSent, I get the following errors. Can anyone suggest me a solution for the following errors?
E/AndroidRuntime(23159): at android.database.sqlite.SQLiteOpenHelper.getDatabaseLocked(SQLiteOpenHelper.java:224)
Here is my database code:
public class Databasehandler extends SQLiteOpenHelper{
private static final String LOGCAT = null;
public Databasehandler(Context applicationcontext) {
super(applicationcontext,"androidsqlite.db", null, 4);
// TODO Auto-generated constructor stub
Log.d(LOGCAT,"Database Created");
}
@Override
public void onCreate(SQLiteDatabase db) {
// TODO Auto-generated method stub
String query,query1,query2;
query = "CREATE TABLE userlogin ( phoneId INTEGER PRIMARY KEY,username TEXT,userid INTEGER,contacts TEXT UNIQUE)";
query1 = "CREATE TABLE task ( TaskId INTEGER PRIMARY KEY,heading TEXT,desc TEXT,d1 TEXT,d2 TEXT,t1 TEXT,t2 TEXT,receiver TEXT,sender TEXT)";
query2 = "CREATE TABLE me ( fbId INTEGER PRIMARY KEY,fbname TEXT,fbuserid INTEGER,fbpic BLOB,ph TEXT,email TEXT)";
db.execSQL(query1);
db.execSQL(query);
db.execSQL(query2);
}
public void inserttask(HashMap<String, String> queryValues) {
SQLiteDatabase database = this.getWritableDatabase();
ContentValues values2 = new ContentValues();
values2.put("heading", queryValues.get("heading"));
values2.put("desc", queryValues.get("desc"));
values2.put("d1", queryValues.get("d1"));
values2.put("d2", queryValues.get("d2"));
values2.put("t1", queryValues.get("t1"));
values2.put("t2", queryValues.get("t2"));
values2.put("sender", queryValues.get("sender"));
values2.put("receiver", queryValues.get("receiver"));
database.insert("task", null, values2);
database.close();
}
public ArrayList<HashMap<String, String>> getTaskSent() {
ArrayList<HashMap<String, String>> wordList;
wordList = new ArrayList<HashMap<String, String>>();
String selectQuery = "SELECT * FROM task";
SQLiteDatabase database = this.getReadableDatabase();
Cursor cursor = database.rawQuery(selectQuery, null);
if (cursor.moveToFirst()) {
do {
HashMap<String, String> map = new HashMap<String, String>();
//map.put("userid", cursor.getString(1));
map.put("heading", cursor.getString(1));
map.put("desc", cursor.getString(2));
map.put("d1", cursor.getString(3));
map.put("d2", cursor.getString(4));
map.put("t1", cursor.getString(5));
map.put("t2", cursor.getString(6));
map.put("receiver", cursor.getString(7));
wordList.add(map);
} while (cursor.moveToNext());
}cursor.close();
database.close();
return wordList;
}
解决方案
The Context
you pass to your Databasehandler
constructor is null
.
这篇关于如何解决SQLiteOpenHelper.getDatabaseLocked错误试图访问一个SQLite数据库中的android?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文