Example usage for android.database.sqlite SQLiteStatement bindString

List of usage examples for android.database.sqlite SQLiteStatement bindString

Introduction

In this page you can find the example usage for android.database.sqlite SQLiteStatement bindString.

Prototype

public void bindString(int index, String value) 

Source Link

Document

Bind a String value to this statement.

Usage

From source file:co.rewen.statex.StateXModule.java

/**
 * Inserts multiple (key, value) pairs. If one or more of the pairs cannot be inserted, this will
 * return StateXFailure, but all other pairs will have been inserted.
 * The insertion will replace conflicting (key, value) pairs.
 */// w  ww  .j  a v a 2  s.  co m
@ReactMethod
public void multiSet(final ReadableArray keyValueArray, final Callback callback) {
    if (keyValueArray.size() == 0) {
        callback.invoke(AsyncStorageErrorUtil.getInvalidKeyError(null));
        return;
    }

    new GuardedAsyncTask<Void, Void>(getReactApplicationContext()) {
        @Override
        protected void doInBackgroundGuarded(Void... params) {
            if (!ensureDatabase()) {
                callback.invoke(AsyncStorageErrorUtil.getDBError(null));
                return;
            }

            String sql = "INSERT OR REPLACE INTO " + TABLE_STATE + " VALUES (?, ?);";
            SQLiteStatement statement = mStateXDatabaseSupplier.get().compileStatement(sql);
            WritableMap error = null;
            ArrayList<String> keys = new ArrayList<>();
            try {
                mStateXDatabaseSupplier.get().beginTransaction();
                for (int idx = 0; idx < keyValueArray.size(); idx++) {
                    if (keyValueArray.getArray(idx).size() != 2) {
                        error = AsyncStorageErrorUtil.getInvalidValueError(null);
                        break;
                    }
                    String key = keyValueArray.getArray(idx).getString(0);
                    if (key == null) {
                        error = AsyncStorageErrorUtil.getInvalidKeyError(null);
                        break;
                    }
                    String value = keyValueArray.getArray(idx).getString(1);
                    if (value == null) {
                        error = AsyncStorageErrorUtil.getInvalidValueError(null);
                        break;
                    }

                    keys.add(key);
                    statement.clearBindings();
                    statement.bindString(1, key);
                    statement.bindString(2, value);
                    statement.execute();
                }
                mStateXDatabaseSupplier.get().setTransactionSuccessful();
            } catch (Exception e) {
                FLog.w(ReactConstants.TAG, e.getMessage(), e);
                error = AsyncStorageErrorUtil.getError(null, e.getMessage());
            } finally {
                try {
                    mStateXDatabaseSupplier.get().endTransaction();
                } catch (Exception e) {
                    FLog.w(ReactConstants.TAG, e.getMessage(), e);
                    if (error == null) {
                        error = AsyncStorageErrorUtil.getError(null, e.getMessage());
                    }
                }
            }
            if (error != null) {
                callback.invoke(error);
            } else {
                callback.invoke();
                notifyStateChanged(keys);
            }
        }
    }.execute();
}

From source file:de.stadtrallye.rallyesoft.model.chat.Chatroom.java

/**
 * Save ChatEntries to DB/*from w w  w. j  av a 2  s  . c  o  m*/
 *
 * @param entries All entries that have a higher chatID than this.newestID will be saved to DB
 */
private void saveChats(List<ChatEntry> entries) {
    //KEY_ID, KEY_TIME, FOREIGN_GROUP, FOREIGN_USER, KEY_MESSAGE, KEY_PICTURE, FOREIGN_ROOM
    SQLiteStatement s = getDb().compileStatement("INSERT INTO " + DatabaseHelper.Chats.TABLE + " ("
            + DatabaseHelper.strStr(DatabaseHelper.Chats.COLS) + ") VALUES (?, ?, ?, ?, ?, ?, " + chatroomID
            + ")");

    int chatId;
    List<ChatEntry> update = new ArrayList<>();

    stateLock.writeLock().lock();
    try {
        ChatEntry c;
        for (Iterator<ChatEntry> i = entries.iterator(); i.hasNext();) {
            c = i.next();

            if (c.chatID <= newestID) { // Already seen this entry
                if (c.timestamp > lastUpdateTime) { // Entry has changed since last seen
                    update.add(c);
                }
                i.remove(); // ignore
                continue;

            }

            try {
                //            Log.d(THIS, "Inserted "+c+" in Messages");

                s.bindLong(1, c.chatID);
                s.bindLong(2, c.timestamp);
                s.bindLong(3, c.groupID);
                s.bindLong(4, c.userID);
                s.bindString(5, c.message);

                if (c.pictureHash != null)
                    s.bindString(6, c.pictureHash);
                else
                    s.bindNull(6);

                chatId = (int) s.executeInsert();

                //            Log.d(THIS, "Inserted "+c+" in Chats");

                if (chatId != c.chatID)
                    throw new SQLDataException();

            } catch (Exception e) {
                Log.e(THIS, "Single Insert failed", e);
            }
        }

        if (entries.size() > 0) {
            ChatEntry last = entries.get(entries.size() - 1);

            setLast(last.timestamp, last.chatID);
        }

        Log.i(THIS, "Received " + entries.size() + " new Chats in Chatroom " + chatroomID + " since "
                + lastUpdateTime);

    } catch (Exception e) {
        Log.e(THIS, "All Inserts failed", e);
    } finally {
        stateLock.writeLock().unlock();
        s.close();
    }

    if (update.size() > 0) {
        Log.w(THIS, "Chat entries were changed on Server: " + update);
        for (ChatEntry c : update) {
            editChat(c);
        }
    }

    checkForNewUsers();
    checkForNewGroups();

    notifyChatsChanged();
}

From source file:com.ichi2.anki.SyncClient.java

private void updateDeck(JSONObject deckPayload) {
    try {//from  w ww .  jav  a2  s.  com
        JSONArray meta = deckPayload.getJSONArray("meta");

        // Update meta information
        String sqlMeta = "INSERT OR REPLACE INTO deckVars (key, value) VALUES(?,?)";
        SQLiteStatement statement = AnkiDatabaseManager.getDatabase(mDeck.getDeckPath()).getDatabase()
                .compileStatement(sqlMeta);
        int lenMeta = meta.length();
        for (int i = 0; i < lenMeta; i++) {
            JSONArray deckVar = meta.getJSONArray(i);

            // key
            statement.bindString(1, deckVar.getString(0));
            // value
            statement.bindString(2, deckVar.getString(1));

            statement.execute();
        }
        statement.close();

        // Update deck
        mDeck.updateFromJson(deckPayload);
    } catch (JSONException e) {
        Log.i(AnkiDroidApp.TAG, "JSONException = " + e.getMessage());
    }

}

From source file:com.ichi2.anki.SyncClient.java

private void updateModels(JSONArray models) {
    ArrayList<String> insertedModelsIds = new ArrayList<String>();
    AnkiDb ankiDB = AnkiDatabaseManager.getDatabase(mDeck.getDeckPath());

    String sql = "INSERT OR REPLACE INTO models"
            + " (id, deckId, created, modified, tags, name, description, features, spacing, initialSpacing, source)"
            + " VALUES(?,?,?,?,?,?,?,?,?,?,?)";
    SQLiteStatement statement = ankiDB.getDatabase().compileStatement(sql);
    int len = models.length();
    for (int i = 0; i < len; i++) {
        try {//from ww  w.ja va 2s  . c  om
            JSONObject model = models.getJSONObject(i);

            // id
            String id = model.getString("id");
            statement.bindString(1, id);
            // deckId
            statement.bindLong(2, model.getLong("deckId"));
            // created
            statement.bindDouble(3, model.getDouble("created"));
            // modified
            statement.bindDouble(4, model.getDouble("modified"));
            // tags
            statement.bindString(5, model.getString("tags"));
            // name
            statement.bindString(6, model.getString("name"));
            // description
            statement.bindString(7, model.getString("name"));
            // features
            statement.bindString(8, model.getString("features"));
            // spacing
            statement.bindDouble(9, model.getDouble("spacing"));
            // initialSpacing
            statement.bindDouble(10, model.getDouble("initialSpacing"));
            // source
            statement.bindLong(11, model.getLong("source"));

            statement.execute();

            insertedModelsIds.add(id);

            mergeFieldModels(id, model.getJSONArray("fieldModels"));
            mergeCardModels(id, model.getJSONArray("cardModels"));
        } catch (JSONException e) {
            Log.i(AnkiDroidApp.TAG, "JSONException = " + e.getMessage());
        }
    }
    statement.close();

    // Delete inserted models from modelsDeleted
    ankiDB.getDatabase()
            .execSQL("DELETE FROM modelsDeleted WHERE modelId IN " + Utils.ids2str(insertedModelsIds));
}

From source file:com.ichi2.anki.SyncClient.java

private void updateSources(JSONArray sources) {
    String sql = "INSERT OR REPLACE INTO sources VALUES(?,?,?,?,?)";
    SQLiteStatement statement = AnkiDatabaseManager.getDatabase(mDeck.getDeckPath()).getDatabase()
            .compileStatement(sql);/*www  . j a v  a  2  s  .co m*/
    int len = sources.length();
    for (int i = 0; i < len; i++) {
        try {
            JSONArray source = sources.getJSONArray(i);
            statement.bindLong(1, source.getLong(0));
            statement.bindString(2, source.getString(1));
            statement.bindDouble(3, source.getDouble(2));
            statement.bindDouble(4, source.getDouble(3));
            statement.bindString(5, source.getString(4));
            statement.execute();
        } catch (JSONException e) {
            Log.i(AnkiDroidApp.TAG, "JSONException = " + e.getMessage());
        }
    }
    statement.close();
}

From source file:com.ichi2.anki.SyncClient.java

private void mergeFieldModels(String modelId, JSONArray fieldModels) {
    ArrayList<String> ids = new ArrayList<String>();
    AnkiDb ankiDB = AnkiDatabaseManager.getDatabase(mDeck.getDeckPath());

    String sql = "INSERT OR REPLACE INTO fieldModels VALUES(?,?,?,?,?,?,?,?,?,?,?,?,?,?)";
    SQLiteStatement statement = ankiDB.getDatabase().compileStatement(sql);
    int len = fieldModels.length();
    for (int i = 0; i < len; i++) {
        try {/*from w w w .java 2 s .  com*/
            JSONObject fieldModel = fieldModels.getJSONObject(i);

            // id
            String id = fieldModel.getString("id");
            statement.bindString(1, id);
            // ordinal
            statement.bindString(2, fieldModel.getString("ordinal"));
            // modelId
            statement.bindLong(3, fieldModel.getLong("modelId"));
            // name
            statement.bindString(4, fieldModel.getString("name"));
            // description
            statement.bindString(5, fieldModel.getString("description"));
            // features
            statement.bindString(6, fieldModel.getString("features"));
            // required
            statement.bindLong(7, Utils.booleanToInt(fieldModel.getBoolean("required")));
            // unique
            statement.bindLong(8, Utils.booleanToInt(fieldModel.getBoolean("unique")));
            // numeric
            statement.bindLong(9, Utils.booleanToInt(fieldModel.getBoolean("numeric")));
            // quizFontFamily
            if (fieldModel.isNull("quizFontFamily")) {
                statement.bindNull(10);
            } else {
                statement.bindString(10, fieldModel.getString("quizFontFamily"));
            }
            // quizFontSize
            if (fieldModel.isNull("quizFontSize")) {
                statement.bindNull(11);
            } else {
                statement.bindString(11, fieldModel.getString("quizFontSize"));
            }
            // quizFontColour
            if (fieldModel.isNull("quizFontColour")) {
                statement.bindNull(12);
            } else {
                statement.bindString(12, fieldModel.getString("quizFontColour"));
            }
            // editFontFamily
            if (fieldModel.isNull("editFontFamily")) {
                statement.bindNull(13);
            } else {
                statement.bindString(13, fieldModel.getString("editFontFamily"));
            }
            // editFontSize
            statement.bindString(14, fieldModel.getString("editFontSize"));

            statement.execute();

            ids.add(id);
        } catch (JSONException e) {
            Log.i(AnkiDroidApp.TAG, "JSONException");
        }
    }
    statement.close();

    // Delete field models that were not returned by the server
    ArrayList<String> fieldModelsIds = ankiDB.queryColumn(String.class,
            "SELECT id FROM fieldModels WHERE modelId = " + modelId, 0);

    for (String fieldModelId : fieldModelsIds) {
        if (!ids.contains(fieldModelId)) {
            mDeck.deleteFieldModel(modelId, fieldModelId);
        }
    }
}

From source file:com.ichi2.anki.SyncClient.java

private void updateMedia(JSONArray media) {
    AnkiDb ankiDB = AnkiDatabaseManager.getDatabase(mDeck.getDeckPath());
    ArrayList<String> mediaIds = new ArrayList<String>();

    String sql = "INSERT OR REPLACE INTO media (id, filename, size, created, originalPath, description) "
            + "VALUES(?,?,?,?,?,?)";
    SQLiteStatement statement = ankiDB.getDatabase().compileStatement(sql);
    int len = media.length();
    for (int i = 0; i < len; i++) {
        try {/*from  w ww . j av  a  2s.  c o m*/
            JSONArray m = media.getJSONArray(i);

            // Grab media ids, to delete them later
            String id = m.getString(0);
            mediaIds.add(id);

            // id
            statement.bindString(1, id);
            // filename
            statement.bindString(2, m.getString(1));
            // size
            statement.bindString(3, m.getString(2));
            // created
            statement.bindDouble(4, m.getDouble(3));
            // originalPath
            statement.bindString(5, m.getString(4));
            // description
            statement.bindString(6, m.getString(5));

            statement.execute();
        } catch (JSONException e) {
            Log.i(AnkiDroidApp.TAG, "JSONException = " + e.getMessage());
        }
    }
    statement.close();

    ankiDB.getDatabase().execSQL("DELETE FROM mediaDeleted WHERE mediaId IN " + Utils.ids2str(mediaIds));
}

From source file:com.ichi2.anki.SyncClient.java

private void mergeCardModels(String modelId, JSONArray cardModels) {
    ArrayList<String> ids = new ArrayList<String>();
    AnkiDb ankiDB = AnkiDatabaseManager.getDatabase(mDeck.getDeckPath());

    String sql = "INSERT OR REPLACE INTO cardModels (id, ordinal, modelId, name, description, active, qformat, "
            + "aformat, lformat, qedformat, aedformat, questionInAnswer, questionFontFamily, questionFontSize, "
            + "questionFontColour, questionAlign, answerFontFamily, answerFontSize, answerFontColour, answerAlign, "
            + "lastFontFamily, lastFontSize, lastFontColour, editQuestionFontFamily, editQuestionFontSize, "
            + "editAnswerFontFamily, editAnswerFontSize, allowEmptyAnswer, typeAnswer) "
            + "VALUES(?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)";
    SQLiteStatement statement = ankiDB.getDatabase().compileStatement(sql);
    int len = cardModels.length();
    for (int i = 0; i < len; i++) {
        try {/*ww  w . j  ava  2 s .c o m*/
            JSONObject cardModel = cardModels.getJSONObject(i);

            // id
            String id = cardModel.getString("id");
            statement.bindString(1, id);
            // ordinal
            statement.bindString(2, cardModel.getString("ordinal"));
            // modelId
            statement.bindLong(3, cardModel.getLong("modelId"));
            // name
            statement.bindString(4, cardModel.getString("name"));
            // description
            statement.bindString(5, cardModel.getString("description"));
            // active
            statement.bindLong(6, Utils.booleanToInt(cardModel.getBoolean("active")));
            // qformat
            statement.bindString(7, cardModel.getString("qformat"));
            // aformat
            statement.bindString(8, cardModel.getString("aformat"));
            // lformat
            if (cardModel.isNull("lformat")) {
                statement.bindNull(9);
            } else {
                statement.bindString(9, cardModel.getString("lformat"));
            }
            // qedformat
            if (cardModel.isNull("qedformat")) {
                statement.bindNull(10);
            } else {
                statement.bindString(10, cardModel.getString("qedformat"));
            }
            // aedformat
            if (cardModel.isNull("aedformat")) {
                statement.bindNull(11);
            } else {
                statement.bindString(11, cardModel.getString("aedformat"));
            }
            // questionInAnswer
            statement.bindLong(12, Utils.booleanToInt(cardModel.getBoolean("questionInAnswer")));
            // questionFontFamily
            statement.bindString(13, cardModel.getString("questionFontFamily"));
            // questionFontSize
            statement.bindString(14, cardModel.getString("questionFontSize"));
            // questionFontColour
            statement.bindString(15, cardModel.getString("questionFontColour"));
            // questionAlign
            statement.bindString(16, cardModel.getString("questionAlign"));
            // answerFontFamily
            statement.bindString(17, cardModel.getString("answerFontFamily"));
            // answerFontSize
            statement.bindString(18, cardModel.getString("answerFontSize"));
            // answerFontColour
            statement.bindString(19, cardModel.getString("answerFontColour"));
            // answerAlign
            statement.bindString(20, cardModel.getString("answerAlign"));
            // lastFontFamily
            statement.bindString(21, cardModel.getString("lastFontFamily"));
            // lastFontSize
            statement.bindString(22, cardModel.getString("lastFontSize"));
            // lastFontColour
            statement.bindString(23, cardModel.getString("lastFontColour"));
            // editQuestionFontFamily
            if (cardModel.isNull("editQuestionFontFamily")) {
                statement.bindNull(24);
            } else {
                statement.bindString(24, cardModel.getString("editQuestionFontFamily"));
            }
            // editQuestionFontSize
            if (cardModel.isNull("editQuestionFontSize")) {
                statement.bindNull(25);
            } else {
                statement.bindString(25, cardModel.getString("editQuestionFontSize"));
            }
            // editAnswerFontFamily
            if (cardModel.isNull("editAnswerFontFamily")) {
                statement.bindNull(26);
            } else {
                statement.bindString(26, cardModel.getString("editAnswerFontFamily"));
            }
            // editAnswerFontSize
            if (cardModel.isNull("editAnswerFontSize")) {
                statement.bindNull(27);
            } else {
                statement.bindString(27, cardModel.getString("editAnswerFontSize"));
            }
            // allowEmptyAnswer
            if (cardModel.isNull("allowEmptyAnswer")) {
                cardModel.put("allowEmptyAnswer", true);
            }
            statement.bindLong(28, Utils.booleanToInt(cardModel.getBoolean("allowEmptyAnswer")));
            // typeAnswer
            statement.bindString(29, cardModel.getString("typeAnswer"));

            statement.execute();

            ids.add(id);
        } catch (JSONException e) {
            Log.i(AnkiDroidApp.TAG, "JSONException = " + e.getMessage());
        }
    }
    statement.close();

    // Delete card models that were not returned by the server
    ArrayList<String> cardModelsIds = ankiDB.queryColumn(String.class,
            "SELECT id FROM cardModels WHERE modelId = " + modelId, 0);

    for (String cardModelId : cardModelsIds) {
        if (!ids.contains(cardModelId)) {
            mDeck.deleteCardModel(modelId, cardModelId);
        }
    }
}

From source file:com.ichi2.anki.SyncClient.java

private void updateFacts(JSONObject factsDict) {
    try {/*  w  w  w  .  ja v  a2  s.c  o  m*/
        AnkiDb ankiDB = AnkiDatabaseManager.getDatabase(mDeck.getDeckPath());
        JSONArray facts = factsDict.getJSONArray("facts");
        int lenFacts = facts.length();

        if (lenFacts > 0) {
            JSONArray fields = factsDict.getJSONArray("fields");
            int lenFields = fields.length();

            // Grab fact ids
            // They will be used later to recalculate the count of facts and to delete them from DB
            ArrayList<String> factIds = new ArrayList<String>();
            for (int i = 0; i < lenFacts; i++) {
                factIds.add(facts.getJSONArray(i).getString(0));
            }
            String factIdsString = Utils.ids2str(factIds);

            // Recalculate fact count
            mDeck.setFactCount((int) (mDeck.getFactCount() + (lenFacts
                    - ankiDB.queryScalar("SELECT COUNT(*) FROM facts WHERE id IN " + factIdsString))));

            // Update facts
            String sqlFact = "INSERT OR REPLACE INTO facts (id, modelId, created, modified, tags, spaceUntil, lastCardId)"
                    + " VALUES(?,?,?,?,?,?,?)";
            SQLiteStatement statement = ankiDB.getDatabase().compileStatement(sqlFact);
            for (int i = 0; i < lenFacts; i++) {
                JSONArray fact = facts.getJSONArray(i);

                // id
                statement.bindLong(1, fact.getLong(0));
                // modelId
                statement.bindLong(2, fact.getLong(1));
                // created
                statement.bindDouble(3, fact.getDouble(2));
                // modified
                statement.bindDouble(4, fact.getDouble(3));
                // tags
                statement.bindString(5, fact.getString(4));
                // spaceUntil
                statement.bindDouble(6, fact.getDouble(5));
                // lastCardId
                if (!fact.isNull(6)) {
                    statement.bindLong(7, fact.getLong(6));
                } else {
                    statement.bindNull(7);
                }

                statement.execute();
            }
            statement.close();

            // Update fields (and delete first the local ones, since ids may have changed)
            ankiDB.getDatabase().execSQL("DELETE FROM fields WHERE factId IN " + factIdsString);

            String sqlFields = "INSERT INTO fields (id, factId, fieldModelId, ordinal, value) VALUES(?,?,?,?,?)";
            statement = ankiDB.getDatabase().compileStatement(sqlFields);
            for (int i = 0; i < lenFields; i++) {
                JSONArray field = fields.getJSONArray(i);

                // id
                statement.bindLong(1, field.getLong(0));
                // factId
                statement.bindLong(2, field.getLong(1));
                // fieldModelId
                statement.bindLong(3, field.getLong(2));
                // ordinal
                statement.bindString(4, field.getString(3));
                // value
                statement.bindString(5, field.getString(4));

                statement.execute();
            }
            statement.close();

            // Delete inserted facts from deleted
            ankiDB.getDatabase().execSQL("DELETE FROM factsDeleted WHERE factId IN " + factIdsString);
        }
    } catch (JSONException e) {
        Log.i(AnkiDroidApp.TAG, "JSONException = " + e.getMessage());
    }
}

From source file:com.ichi2.anki.SyncClient.java

private void updateHistory(JSONArray history) {
    String sql = "INSERT OR IGNORE INTO reviewHistory (cardId, time, lastInterval, nextInterval, ease, delay, "
            + "lastFactor, nextFactor, reps, thinkingTime, yesCount, noCount) VALUES(?,?,?,?,?,?,?,?,?,?,?,?)";
    SQLiteStatement statement = AnkiDatabaseManager.getDatabase(mDeck.getDeckPath()).getDatabase()
            .compileStatement(sql);// www  . j  a  v  a2 s  .c  o m
    int len = history.length();
    for (int i = 0; i < len; i++) {
        try {
            JSONArray h = history.getJSONArray(i);

            // cardId
            statement.bindLong(1, h.getLong(0));
            // time
            statement.bindDouble(2, h.getDouble(1));
            // lastInterval
            statement.bindDouble(3, h.getDouble(2));
            // nextInterval
            statement.bindDouble(4, h.getDouble(3));
            // ease
            statement.bindString(5, h.getString(4));
            // delay
            statement.bindDouble(6, h.getDouble(5));
            // lastFactor
            statement.bindDouble(7, h.getDouble(6));
            // nextFactor
            statement.bindDouble(8, h.getDouble(7));
            // reps
            statement.bindDouble(9, h.getDouble(8));
            // thinkingTime
            statement.bindDouble(10, h.getDouble(9));
            // yesCount
            statement.bindDouble(11, h.getDouble(10));
            // noCount
            statement.bindDouble(12, h.getDouble(11));

            statement.execute();
        } catch (JSONException e) {
            Log.i(AnkiDroidApp.TAG, "JSONException = " + e.getMessage());
        }
    }
    statement.close();
}