Драйвер datastax, заставляющий приложение быть "lombquo; zombie" ldquo; и не выход

sqlite3_exec не подходит, если вы хотите обрабатывать возвращаемые данные в том месте, где вы его запрашиваете, и имеет некоторые другие недостатки.

Для запроса вы всегда должны использовать sqlite3_prepare_v2 , а затем вызовите sqlite3_step в цикле. Чтобы получить значения переменных в инструкции, используйте маркеры параметров (?) и функции sqlite3_bind * . Чтобы прочитать возвращаемые значения, используйте функции sqlite3_column _ * (но в этом случае вы действительно не хотите читать какие-либо значения).

char *user = "Supu";
char *password = "secret";
sqlite3_stmt *stmt;
const char *sql = "SELECT username, password FROM user WHERE username = ? AND password = ?";
rc = sqlite3_prepare_v2(db, sql, -1, &stmt, NULL);
if (rc != SQLITE_OK) {
    fprintf(stderr, "error: %s, %s\n", sql, sqlite3_errmsg(db));
} else {
    sqlite3_bind_text(stmt, 1, user, -1, SQLITE_TRANSIENT);
    sqlite3_bind_text(stmt, 2, password, -1, SQLITE_TRANSIENT);
    while ((rc = sqlite3_step(stmt)) == SQLITE_ROW) {
        printf("returned row: user = %s, password = %s\n",
               sqlite3_column_text(stmt, 0),
               sqlite3_column_text(stmt, 1));
        count++;
    }
    if (rc != SQLITE_DONE)
        fprintf(stderr, "error: %s\n", sqlite3_errmsg(db));
    sqlite3_finalize(stmt);
}

0
задан Avner Barr 16 January 2019 в 15:33
поделиться

1 ответ

В слегка предвзятом ответе вы можете посмотреть https://github.com/outworkers/phantom вместо использования стандартного драйвера java.

  • Вы получаете scala.concurrent.Future, monix.eval.Task или даже com.twitter.util.Future из запроса автоматически. Вы можете выбирать между всеми тремя.
  • Пулы соединений с БД лучше изолированы внутри уровней абстракции ContactPoint и Database, в которых есть shutdown методы, которые можно легко подключить к жизненному циклу приложения.
  • Это намного быстрее, чем драйвер Java, так как сериализация и десериализация типов выполняется во время компиляции через более продвинутые механизмы макросов.

Краткий ответ: у вас должен быть способ вызова session.close или session.closeAsync в течение жизненного цикла, когда вы отключаете все остальное, это как он предназначен для работы.

0
ответ дан flavian 16 January 2019 в 15:33
поделиться
Другие вопросы по тегам:

Похожие вопросы: