переписать SQL-оператор Вставить ИЛИ ЗАМЕНИТЬ из Java для C ++ NDK Android

Мне нужно переписать это SQLite Заявления с Java на C ++, потому что низкая производительность:
Я красную арктику

Улучшить производительность SQLite INSERT-в-секунду?

Но я полностью запутался, потому что я не могу найти никакого sqlstatemenst вставки или обновления

 public synchronized void saveMatchValue(int photoRecOwner, int[] photoRecAssign, float[] value) {
SQLiteDatabase database = databaseHelper.getWritableDatabase();
database.beginTransaction();

В Java:

      String sql = " INSERT OR REPLACE INTO " + TypeContract.CTablePhotoMatch.TABLE_NAME + "("+ TypeContract.CTablePhotoMatch.FK_OWNER + "," + TypeContract.CTablePhotoMatch.FK_ASSIGN + ","+ TypeContract.CTablePhotoMatch.VALUE + ") VALUES (?, ?, ?) ;";

// Это может быть то же самое в C ++? лайк

         string sqlstatement = "INSERT INTO abe_account ("...........

И отдых для меня ясен плюс минус // это

    SQLiteStatement stmt = database.compileStatement(sql);// stmt.bindDouble(index, value);
// database.compileStatement(sql)
try {
String[] whereArgs = new String[2];
int rows = 0;
for (int i = 0; i < photoRecAssign.length; i++) {

if (photoRecOwner > photoRecAssign[i]) {
stmt.bindDouble(1, photoRecOwner);
stmt.bindDouble(2, photoRecAssign[i]);} else {
stmt.bindDouble(1, photoRecAssign[i]);
stmt.bindDouble(2, photoRecOwner);}
stmt.bindDouble(3, value[i]);

try {
long entryID = stmt.executeInsert();
} catch (Exception e) {
// updtStmt.executeUpdateDelete();
} finally {
stmt.clearBindings();

}
// ContentValues contentValues = crossTableContentValues(
// photoRecOwner, photoRecAssign[i], value[i]);
// database.insert(TypeContract.CTablePhotoMatch.TABLE_NAME,
// null,
// contentValues);
}
database.setTransactionSuccessful();
} finally {
stmt.close();

database.endTransaction();
// database.close();
}
}

0

Решение

Ты можешь использовать std::to_string построить строку, используя ваши переменные

#include <string>
std::string sql = " INSERT OR REPLACE INTO " + std::to_string(TypeContract.CTablePhotoMatch.TABLE_NAME) + "(" + ...;

Если какая-либо из ваших переменных уже std::string, тогда вам не нужно использовать эту функцию, вы можете просто использовать + соединить

1

Другие решения

это нормально?

      void NativeSaveMAValues(int size,int photoRecOwner,int photoRecAssign[],double value[]){

sqlite3 *db;
sqlite3_stmt * stmt;

char * sErrMsg = 0;
char * tail = 0;
int nRetCode;
char sSQL [BUFFER_SIZE] = "\0";

//sqlite3_prepare_v2(db,  sSQL, BUFFER_SIZE, &stmt, &tail);
std::string sqlstatement =  std::string(" INSERT OR REPLACE INTO CrossPhotoMatchTable") + "("+ "fk_owner" + ","+ "fk_assign" + ","+ "value" + ") VALUES (?, ?, ?) ;";

sqlite3_prepare( db, sqlstatement.c_str(), -1, &stmt, NULL );
sqlite3_exec(db, "BEGIN TRANSACTION", NULL, NULL, &sErrMsg);

for (int i = 0; i < size; i++) {

if (photoRecOwner > photoRecAssign[i]) {

sqlite3_bind_int(stmt, 1, photoRecOwner);
sqlite3_bind_int(stmt, 2, photoRecAssign[i]);
// stmt.bindDouble(1, photoRecOwner);} else {
sqlite3_bind_int(stmt, 1, photoRecAssign[i]);
sqlite3_bind_int(stmt, 2, photoRecOwner);

}

sqlite3_bind_double(stmt, 3, value[i]);try {

sqlite3_step(stmt);//todo isDONE?:

sqlite3_clear_bindings(stmt);
sqlite3_reset(stmt);

} catch (std::exception e) {             // updtStmt.executeUpdateDelete();}

}

sqlite3_exec(db, "END TRANSACTION", NULL, NULL, &sErrMsg);
sqlite3_finalize(stmt);

}

0

По вопросам рекламы [email protected]