Java SQLite泄漏数据错误和其他随机错误

Java SQLite泄漏数据错误和其他随机错误,java,android,database,sqlite,Java,Android,Database,Sqlite,当启动我的应用程序时,它应该只创建一个SQLite数据库。但是,根据logcat,将创建一个数据库,插入一行,然后再次创建数据库。 然后说, A SQLiteConnection object for database '/data/data/com.example.wolfe_000.final_final_zeno/databases/User_Info' was leaked! Please fix your application to end transactions in prog

当启动我的应用程序时,它应该只创建一个SQLite数据库。但是,根据logcat,将创建一个数据库,插入一行,然后再次创建数据库。 然后说,

A SQLiteConnection object for database '/data/data/com.example.wolfe_000.final_final_zeno/databases/User_Info' was leaked!  Please fix your application to end transactions in progress properly and to close the database when it is no longer needed.
我以前曾尝试在与数据库交互后关闭数据库,但它似乎对我不起作用。我真的很想得到一些建议,我是SQLite的新手,完全迷路了。这是代码

package com.example.wolfe_000.final_final_zeno;

import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
import android.util.Log;

/**
 * Created by wolfe_000 on 19/04/2015.
 */
public class DatabaseOperations extends SQLiteOpenHelper {

public static int database_version = 1;
public String CREATE_QUERY = "CREATE TABLE " + TableData.TableInfo.TABLE_NAME + "(" + TableData.TableInfo.USER_NAME +" TEXT," + TableData.TableInfo.USER_WEIGHT +" TEXT," + TableData.TableInfo.USER_GOAL +" TEXT," + TableData.TableInfo.USER_PASS +" TEXT," + TableData.TableInfo.USER_EMAIL +" TEXT);";


public DatabaseOperations(Context context) {
    super(context, TableData.TableInfo.DATABASE_NAME, null, database_version);
    Log.d("Database Operations", "Database Created");
}

@Override
public void onCreate(SQLiteDatabase sdb) {
    sdb.execSQL(CREATE_QUERY);
    Log.d("Database Operations", "Database Created");
}

@Override
public void onUpgrade(SQLiteDatabase arg0, int arg1, int arg2) {

}

public void putInformation(DatabaseOperations dop, String name, String pass, String email, String weight, String goal) {
    SQLiteDatabase SQ = dop.getWritableDatabase();
    ContentValues cv = new ContentValues();
    cv.put(TableData.TableInfo.USER_NAME, name);
    cv.put(TableData.TableInfo.USER_PASS, pass);
    cv.put(TableData.TableInfo.USER_EMAIL, email);
    cv.put(TableData.TableInfo.USER_WEIGHT, weight);
    cv.put(TableData.TableInfo.USER_GOAL, goal);
    long k = SQ.insert(TableData.TableInfo.TABLE_NAME, null, cv);
    Log.d("Database Operations", "One Raw Inserted");
}

public Cursor getInformation(DatabaseOperations dop){
    SQLiteDatabase SQ = dop.getReadableDatabase();
    String[] columns = {TableData.TableInfo.USER_NAME, TableData.TableInfo.USER_PASS, TableData.TableInfo.USER_EMAIL, TableData.TableInfo.USER_WEIGHT, TableData.TableInfo.USER_GOAL};
    Cursor CR = SQ.query(TableData.TableInfo.TABLE_NAME, columns, null, null, null, null, null);
    return CR;
}

}

您只需关闭打开的数据库

DatabaseOperations mHelper = new DatabaseOperations(this);
SQLiteDatabase db = mHelper.getWritableDatabase();
//your other operation like cursor and adapter...

db.close();

您需要在这两种方法中调用SQ.close方法来关闭数据库。当您在执行这两个操作时,您还没有关闭数据库。例如,就在这个函数上?public void putInformationDatabaseOperations dop、字符串名称、字符串传递、字符串电子邮件、字符串权重、字符串目标{SQLiteDatabase SQ=dop.getwriteabledatabase;ContentValues cv=new ContentValues;cv.putTableData.TableInfo.USER_NAME,NAME;long k=SQ.insertTableData.TableInfo.TABLE_NAME,null,cv;Log.dDatabase操作,一次原始插入;SQ.close;}是的,在您完成数据库的所有工作(如插入、删除等)后关闭