相关疑难解决方法(0)

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

用于在Android中写入SQLite数据库的推荐设计模式

伙计们,

我正在寻找一种设计模式,使UI线程能够与客户端SQLite数据库交互,该数据库可能具有批量插入(需要10秒),快速插入和读取,并且不会阻止UI线程.

我想知道我是否正在使用最佳设计模式,因为我最近调试了死锁和同步问题,而且我对我的最终产品没有100%的信心.

所有数据库访问现在都通过单例类进行瓶颈.这是伪代码,显示我如何在我的单例DataManager中接近写入:

public class DataManager {

  private SQLiteDatabase mDb;
  private ArrayList<Message> mCachedMessages;

  public ArrayList<Message> readMessages() { 
    return mCachedMessages; 
  }

  public void writeMessage(Message m) {
    new WriteMessageAsyncTask().execute(m);
  }

  protected synchronized void dbWriteMessage(Message m) {
    this.mDb.replace(MESSAGE_TABLE_NAME, null, m.toContentValues());
  }

  protected ArrayList<Message> dbReadMessages() {
    // SQLite query for messages
  }

  private class WriteMessageAsyncTask extends AsyncTask<Message, Void, ArrayList<Messages>> {
    protected Void doInBackground(Message... args) {
       DataManager.this.mDb.execSQL("BEGIN TRANSACTION;");
       DataManager.this.dbWriteMessage(args[0]);
       // More possibly expensive DB writes
       DataManager.this.mDb.execSQL("COMMIT TRANSACTION;");
       ArrayList<Messages> newMessages = DataManager.this.dbReadMessages();
       return newMessages;
    } …
Run Code Online (Sandbox Code Playgroud)

sqlite multithreading android synchronization

7
推荐指数
1
解决办法
4998
查看次数

HTC Desire中的数据库锁定问题

在我的应用程序中,一项服务是从服务器获取数据并将其插入table A.

如果我去特定的UI,我需要列出来自另一个的数据,table B如果后台操作正在执行它将生成数据库锁定异常.我在两个不同的表上并行完成了两个数据库操作.

它在三星gt15801中工作正常.但是htc希望它会产生数据库锁定错误.

HTC的愿望 - 插入过程需要91秒.

三星gt15801 - 插入过程需要21秒.

database concurrency android locking transactions

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

SQLite 更改数据库项目的排序顺序

所以想象一下这是我的数据库的快速模型:

在此处输入图片说明

数据库中的项目按列表呈现给用户,每个列表都显示在一个新片段上,这些片段显示在视图页面上。因此,假设在这种假设情况下,viewpager 上将有两个片段,第一个片段将显示first_list,第二个片段将显示second_list。这是该查询的代码:

 public static Cursor getListItems (final Context context, String listName) {
    if (mDatabase == null || !mDatabase.isOpen())
        open(context);  //This gets the writable db.

    String where = LIST_NAME + " = '" + listName + "'";
    return mDatabase.query(TABLE_LIST_ITEMS, PROJECTION_LIST_ITEMS, 
    where, null, null, null, SORT_ORDER);
}
Run Code Online (Sandbox Code Playgroud)

哪里SORT_ORDERorder_in_list,这个效果很好,与开始。

现在,列表视图可以使用 public library重新排列,它试图允许用户控制每个列表中项目的顺序。这是我遇到问题的地方,没有add(int index, Object object)光标,或者其他一些管理排序的简单方法。我一开始以为我可以简单地调用mDatabase.update()更改值,order_in_list但这有效,但结果并不如预期。例如,用户将第二拖动到位置,请记住:零索引值,我们现在有两个order_in_list为零的项目。虽然我可以叫mDatabase.update()项目一个更新他的位置,一个 …

database sqlite android

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

Android - 如何处理1000条记录SQLite

我想在开始时在我的SQLite上添加1000条记录,但问题是,当我启动APP时,它会变成白色屏幕,然后是黑屏,直到它崩溃,当我放入5条记录时,它仍然在做同样的事情.白色屏幕和黑屏,但是当添加记录时,它会向我显示所有记录的祝酒词,所以它有效...这是我的SQLiteBaseAdapter:

public class ClientsSQL extends SQLiteOpenHelper {
// Declaramos la sentencia para crear la tabla
String sqlCreate = "CREATE TABLE Clients(NIF text,cognom1 text,cognom2 text,nom text)";



 public ClientsSQL(Context context, String name, SQLiteDatabase.CursorFactory factory,
                          int version) {
        super(context, name, factory, version);
        // TODO Auto-generated constructor stub
    }
    @Override
    public void onCreate(SQLiteDatabase db) {

        db.execSQL(sqlCreate);
        db.execSQL("INSERT INTO Clients VALUES ('39410028B', 'hola1', 'Hola2', 'Jonathan')");
        Log.v("INFO1", "creating db");


    }

    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
        // TODO Auto-generated method …
Run Code Online (Sandbox Code Playgroud)

sqlite android

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