标签: sqliteopenhelper

Android中SQLite的默认线程模式是什么?

http://www.sqlite.org/threadsafe.html

从上面的链接我了解到,SQLite支持三种不同的线程模式:单线程,多线程和序列化.我很想知道"Android中SQLite的默认线程模式是什么"?有没有办法以务实的方式改变线程模式?如果是这样,我得到的优势是什么?什么时候选择带有一些样品的?

提前致谢.

sqlite android sqliteopenhelper

10
推荐指数
1
解决办法
1688
查看次数

如何在sqlite中列出数据库的所有触发器?

我不能删除触发器,但当我尝试创建一个具有相同名称的新触发器时 - 它会提醒我触发器存在.所以,我想列出所有触发器,找出问题所在.

sqlite sqliteopenhelper android-sqlite

10
推荐指数
1
解决办法
8742
查看次数

SQLite连接对象泄露 - Android

我正在制作我的第一个Android应用程序,我首先学习了一些sqlite教程,这教我使用扩展SQLiteOpenHelper的databaseHelper.所以我的databaseHelper确实扩展了SQLiteOpenHelper.我在Logcat中收到了一个sqlite连接泄漏警告,所以想要了解如何解决这个问题.

我收到此错误:

02-01 21:39:50.740: W/SQLiteConnectionPool(32061): A SQLiteConnection object for database '/data/data/com.btf271.fashionassistant/databases/clothingManager' was leaked!  Please fix your application to end transactions in progress properly and to close the database when it is no longer needed.
Run Code Online (Sandbox Code Playgroud)

我的databaseHelper函数在发生泄漏时被调用:

 public List<Sticker> getObjectsByGenderAndCategory(String gender, String category) {
        List<Sticker> objects = new ArrayList<Object>();
        String selectQuery = String.format(
                "SELECT * FROM %s WHERE %s = \"%s\" AND %s = \"%s\"",
                TABLE_OBJECT, KEY_GENDER, gender, KEY_CATEGORY, category);

        Log.e(LOG, selectQuery);

        SQLiteDatabase db = this.getReadableDatabase();
        Cursor c = db.rawQuery(selectQuery, null);
     try{ …
Run Code Online (Sandbox Code Playgroud)

sqlite android memory-leaks sqliteopenhelper

10
推荐指数
3
解决办法
3万
查看次数

Android Studio中的"android.database.sqlite.SQLitepenhelper中没有默认构造函数"

尝试使用SQLiteOpenHelper扩展类,但是此错误显示:"android.database.sqlite.SQLitepenhelper中没有可用的默认构造函数"以及其他"无法解析符号类别,注意......"

class DbHelper extends SQLiteOpenHelper {


    @Override
    public void onCreate(SQLiteDatabase db) {

        db.execSQL(Category.getSql());
        db.execSQL(Note.getSql());
        db.execSQL(Attachment.getSql());
        db.execSQL(CheckItem.getSql());
    }

    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
        db.execSQL("DROP TABLE IF EXISTS " + Category.TABLE_NAME);
       db.execSQL("DROP TABLE IF EXISTS " + Note.TABLE_NAME);
        db.execSQL("DROP TABLE IF EXISTS " + Attachment.TABLE_NAME);
        db.execSQL("DROP TABLE IF EXISTS " + CheckItem.TABLE_NAME);

        onCreate(db);
    }
Run Code Online (Sandbox Code Playgroud)

sqlite android constructor default sqliteopenhelper

10
推荐指数
1
解决办法
2万
查看次数

为什么我不能在没有运行时错误的情况下使用Resources.getSystem()?

public class BobDatabase extends SQLiteOpenHelper{
private static final String DATABASE_NAME = "bob.db";
private static final int DATABASE_VERSION = 1;
public static final String DEFAULT_PROFILE = "default_profile";

public BobDatabase(Context context) 
{
    super(context, DATABASE_NAME, null, DATABASE_VERSION);
}

@Override
public void onCreate(SQLiteDatabase database) 
{
    createProfileTable(database);
    createTimeTable(database);
    createEventTable(database);
    createLocationTable(database);
}

/**
 * Creates a table for Profile objects, executes the string create_profile_table_sql
 * contained within strings.xml
 * @param database
 */
public void createProfileTable(SQLiteDatabase database)
{
    database.execSQL(Resources.getSystem().getString(R.string.create_profile_table_sql));
}}
Run Code Online (Sandbox Code Playgroud)

我收到这个错误

01-14 12:20:57.591:E/AndroidRuntime(1825):引起:android.content.res.Resources $ NotFoundException:字符串资源ID#0x7f040003

导致错误的代码是createProfileTable中的单行,具体是Resources.getSystem().getString(R.string.create_profile_table_sql) …

java eclipse android sqliteopenhelper

9
推荐指数
2
解决办法
7559
查看次数

对SQLiteOpenHelper感到困惑并创建多个表

我觉得Android开发人员关于在SQLite中保存数据的准则确实缺乏.当谈到多个表时,我很困惑一般指南是什么.

我目前有两个管理器向UI公开(CRUD)两组不同的实体.

我是:

在每个Manager中创建一个私有类SQLiteOpenHelper.每个Helper都有自己的onCreate用于自己的TABLE?

要么

创建一个创建两个TABLE的单个公共类SQLiteOpenHelper?

我没有看到使用一个在另一个之上的明显优势,但我看到它们都被使用了.Android对此有何看法?

database sqlite android sqliteopenhelper

9
推荐指数
1
解决办法
6208
查看次数

SQLiteOpenHelper同步

所以我想出了一些想法,我想知道它是否可以实现.

假设我有多个表(数据库模型),每个表都由某个类表示.我不会使用单一模式和open helper,所以我创建了一个简单的类来提供数据库的单个实例.我我们的想法是,只要所有表都引用SQLiteDatabase(由open helper返回),它们都将使用相同的数据库实例,并且可能不需要将工作与数据库同步,因为open helper执行此操作.当最后一个表完成它的工作GC将收集打开的帮助器(因为最后一个引用将是弱引用) - >调用finalize()并在此方法期间关闭db以防止来自OS的任何警告.我的问题是:这可以工作吗?它会自动关闭数据库,它会泄漏还是抛出一些异常?

这是我的班级:

public class DatabaseHelper {

private static WeakReference<SomeCustomOpenHelper> sDBOpenHelper;

private void notifyDBCreate(SQLiteDatabase db) {
    for (DBTable table : mTables) {
        table.onDBCreate(db);
    }
}

private void notifyDBUpgrade(SQLiteDatabase db) {
    for (DBTable table : mTables) {
        table.onDBUpgrade(db);
    }
}

public SQLiteDatabase getDatabase(boolean readOnly) {
    SomeCustomOpenHelper dbHelper = sDBOpenHelper.get();
    if (dbHelper == null) {
        dbHelper = new SomeCustomOpenHelper(context, name, factory, version, new DatabaseEventsCallback());
        sDBOpenHelper = new WeakReference<SomeCustomOpenHelper>(dbHelper);
    }
    if (readOnly) {
        return dbHelper.getReadableDatabase();
    } else { …
Run Code Online (Sandbox Code Playgroud)

android synchronization weak-references sqliteopenhelper

9
推荐指数
1
解决办法
2134
查看次数

在SQLiteOpenHelper中使用onCreate获取上下文

在我的Android应用程序中:如何在SQLiteOpenHelper的onCreate方法中访问Context?

android sqliteopenhelper

8
推荐指数
1
解决办法
4016
查看次数

Android AsyncTask和SQLite数据库实例

我有一个问题,我不知道如何处理它.我的应用中的一项活动有多个AsyncTasks访问单个SQLiteOpenHelper.我初始化并打开帮助程序onCreate(),我正在关闭它onStop().我还检查它是否已经初始化onResume().

由于我已经发布了我的应用程序,因此doInBackground在尝试访问数据库帮助程序时,我收到了Null Exception错误的数量.我知道这是因为DB onStop()doInBackground被调用之前就已经关闭了(公平).

我的问题是,我应该在哪里关闭数据库连接?在Activity中使用DB帮助程序的单个实例并从多个线程(AsyncTasks)访问它是正确的吗?或者我应该为每个使用单独的DB帮助程序实例AsyncTask

这是我活动的简化骨架:

public class MyActivity extends Activity{
    private DbHelper mDbHelper;
    private ArrayList<ExampleObject> objects;

    @Override
    public void onStop(){
        super.onStop();
        if(mDbHelper != null){
            mDbHelper.close();
            mDbHelper = null;
        }
    }

    @Override
    public void onResume(){
        super.onResume();
        if(mDbHelper == null){
            mDbHelper = new DbHelper(this);
            mDbHelper.open();
        }
    }

    @Override 
    public void onCreate(Bundle icicle) { 
        super.onCreate(icicle); 
        DbHelper mDbHelper = new DbHelper(this);
        mDbHelper.open();
    }

    private …
Run Code Online (Sandbox Code Playgroud)

sqlite android android-asynctask sqliteopenhelper

8
推荐指数
3
解决办法
1万
查看次数

如何将音频/视频文件存储到 android 中的 SQLite 数据库中。?

我是开发新手,通过将图像转换为字节数组并将其存储到 BLOB 中的 SQLite 数据库(在下面的代码中找到),我成功地将图像存储到数据库中。但是我不知道如何将音频/视频存储到数据库中,任何人都可以帮助我 PLZ ...

 public void getImage(View view){
    Intent intent = new Intent();
    intent.setAction(Intent.ACTION_GET_CONTENT);
    intent.setType("image/* video/*");
    startActivityForResult(Intent.createChooser(intent, "select picture"), 1);

}

public void onActivityResult(int requestCode, int resultCode, Intent data){
    if(resultCode == RESULT_OK){
        Uri imageUri = data.getData();
        String imagePath = getPath(imageUri);

        image1.setVisibility(View.VISIBLE);

        image1.setImageURI(imageUri);
        Bitmap bitmap = BitmapFactory.decodeFile(imagePath);
        Toast.makeText(getApplicationContext(), ""+bitmap, Toast.LENGTH_SHORT).show();
        ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
        bitmap.compress(Bitmap.CompressFormat.PNG, 100, byteArrayOutputStream);
        img = byteArrayOutputStream.toByteArray();
    }
}

 public String getPath(Uri uri) {
    String[] projection = { MediaStore.Images.Media.DATA };
    Cursor cursor = managedQuery(uri, …
Run Code Online (Sandbox Code Playgroud)

sqlite android sqliteopenhelper android-sqlite android-database

8
推荐指数
1
解决办法
1万
查看次数