1

データベースに複数のレコードを同時に挿入しています

ここにコードがあります:-

public synchronized boolean execute_Batch_Query(final JSONArray accObj) 
{
    boolean value = false;

    UiApplication.getUiApplication().invokeLater(new Runnable() 
    {
        public void run() 
        {
            String sqlStatement = "INSERT INTO Records_Table(id ,name ,description) " +"VALUES (?,?,?)";

            try 
            {
                JSONArray jsonArray = accObj;
                int size = jsonArray.length();
                Statement st = db.createStatement(sqlStatement);
                st.prepare();

                for(int i =0 ; i<size ; i++)
                {
                    JSONObject jsonObj = (JSONObject)jsonArray.getJSONObject(i);
                    String id = Global.EMPTY;
                    String name = Global.EMPTY;
                    String description = Global.EMPTY;
                    id      = jsonObj.getString("id");
                    name    = jsonObj.getString("name");
                    description = jsonObj.getString("description");
                    st.bind(1,id);
                    st.bind(2,name);
                    st.bind(3,description);

                    st.execute();
                    st.reset();


                }
                st.close();
                Log.d("SQL", sqlStatement);
            } 
            catch ( Exception e ) 
            {
                Log.e(e.getMessage());
            } finally {
                // close();
            }
        }
    });
    return value;
}

このコードは一度に 10 ~ 15 のレコードを挿入しますが、その後ディスク I/O エラーが発生します。I/O エラーが発生する理由を教えてください。

4

1 に答える 1

1

これは実際には答えではなく、いくつかの考慮事項です。

  1. コードは問題ないように見えます (つまり、通常の条件下で動作するはずです)。

  2. あなたが得るnet.rim.device.api.database.DatabaseException: disk I/O error。これは正確な理由を示していません。DatabaseException定義された理由を持つ 3 つのサブクラスがあります。

    • DatabaseBindingException- パラメータを SQL ステートメントにバインドできなかったことを示します。
    • DatabaseIOException- データベース ファイルのオープン、作成、オープンまたは作成、または削除に失敗したことを示します。
    • DatabasePathException- データベース ファイルへのパスの形式が正しくないことを示します。

上記の例外のいずれも取得しないため、実際の理由を定義することは不可能です。

アイデア:

  • 別のSDカードを試す
  • リセットする(バッテリーを抜く)
  • 同じ BB OS バージョンの別のデバイスを試す
  • 別の BB OS バージョンを実行しているデバイスを試す
于 2013-05-31T08:06:09.027 に答える