const char* Recipe52::sqliteGetValueForKey(const char * key) { // キー文字列に対応する文字列を取得する CCString *strValue = NULL; sqlite3 *db = NULL; if (sqliteOpen(&db) == SQLITE_OK) { const char *sql_select = "SELECT value FROM test1 WHERE key=?"; sqlite3_stmt *stmt = NULL; if (sqlite3_prepare_v2(db, sql_select, -1, &stmt, NULL) == SQLITE_OK) { sqlite3_bind_text(stmt, 1, key, -1, SQLITE_TRANSIENT); int ret = sqlite3_step(stmt); if( ret == SQLITE_DONE || ret == SQLITE_ROW) { const char *val = (const char *)sqlite3_column_text(stmt, 0); strValue = CCString::create(val); } sqlite3_reset(stmt); } sqlite3_finalize(stmt); } sqlite3_close(db); if (strValue != NULL) { return strValue->getCString(); } return NULL; }
//データベースのテーブルの作成 void SaveSQL::sqliteCreateTable(){ //データベースを作成 sqlite3 *db = NULL; if(sqliteOpen(&db) == SQLITE_OK){ // key とvalueの2つ値がある テーブル(test1)を作成 const char *sql_createtable = "CREATE TABLE test1(key TEXT,value TEXT)"; sqlite3_stmt *stmt = NULL; if (sqlite3_prepare_v2(db, sql_createtable, -1, &stmt, NULL) == SQLITE_OK) { if (sqlite3_step(stmt) == SQLITE_DONE) { CCLOG("create table done"); } sqlite3_reset(stmt); } sqlite3_finalize(stmt); } sqlite3_close(db); }
//データベースのテーブルの作成 void SaveSQL::sqliteCreateTable(){ //データベースを作成 sqlite3 *db = NULL; if(sqliteOpen(&db) == SQLITE_OK){ //データベースの削除 char *errMsg = NULL; int err = 0; err = sqlite3_exec(db, "DROP TABLE IF EXISTS questions", NULL, NULL, &errMsg); if(err != SQLITE_OK){ printf("%s\n", errMsg); sqlite3_free(errMsg); errMsg = NULL; /* TODO: エラー処理 */ } //データベース削除終 //テーブル(questions)を作成 //列: no:int primary key auto ,text:text,correctCount:int,inCorrectCount:int,reviewFlag:int const char *sql_createtable = "CREATE TABLE questions(questionId integer primary key,type text,japanese text,english text)"; sqlite3_stmt *stmt = NULL; if (sqlite3_prepare_v2(db, sql_createtable, -1, &stmt, NULL) == SQLITE_OK) { if (sqlite3_step(stmt) == SQLITE_DONE) { CCLOG("create table done"); } sqlite3_reset(stmt); } sqlite3_finalize(stmt); } sqlite3_close(db); }
void Recipe52::sqliteCreateTable() { // データベースファイルを作成する sqlite3 *db = NULL; if (sqliteOpen(&db) == SQLITE_OK) { const char *sql_createtable = "CREATE TABLE test1(key TEXT,value TEXT)"; sqlite3_stmt *stmt = NULL; if (sqlite3_prepare_v2(db, sql_createtable, -1, &stmt, NULL) == SQLITE_OK) { if (sqlite3_step(stmt) == SQLITE_DONE) { CCLOG("create table done"); } sqlite3_reset(stmt); } sqlite3_finalize(stmt); } sqlite3_close(db); }
//keyから値を取り出す。 const char *SaveSQL::sqliteGetValueForKey(const char *key){ __String *strValue = NULL; sqlite3 *db = NULL; if (sqliteOpen(&db) == SQLITE_OK) { //test1テーブルからkeyに合わせたvalueを取り出す const char *sql_select = "SELECT value FROM test1 WHERE key=?"; sqlite3_stmt *stmt = NULL; if (sqlite3_prepare_v2(db, sql_select, -1, &stmt, NULL) == SQLITE_OK) { sqlite3_bind_text(stmt, 1, key, -1, SQLITE_TRANSIENT); int ret = sqlite3_step(stmt); if (ret == SQLITE_DONE || ret == SQLITE_ROW) { const char *val = (const char*)sqlite3_column_text(stmt, 0); strValue = __String::create(val); } sqlite3_reset(stmt); } sqlite3_finalize(stmt); } sqlite3_close(db); //valueがある場合 if (strValue != NULL) { return strValue->getCString(); } return NULL; }
//keyから値を取り出す。 Vector<Question*> *SaveSQL::sqliteGetValueForKey(const char *key, int limit){ sqlite3 *db = NULL; //配列を作成 Vector<Question*> *questions = new Vector<Question*>; if (sqliteOpen(&db) == SQLITE_OK) { //種別に合わせて取り出す問題を決める //sql コマンドの作成 std::string sql = StringUtils::format("SELECT * FROM questions WHERE type = '%s' ORDER BY RANDOM() LIMIT %d",key,limit); //const char型に変換 const char *sql_select = sql.c_str(); CCLOG("%s",sql_select); sqlite3_stmt *stmt = NULL; if (sqlite3_prepare_v2(db, sql_select, -1, &stmt, NULL) == SQLITE_OK) { int r; while (SQLITE_ROW == (r=sqlite3_step(stmt))){ //宣言(for文でクラス宣言する場合、 newしないと同番地のメモリアドレスが指定され逐一上書きされる模様) /* Question *question;だと駄目 */ Question *question = new Question; //格納 //id question->questionId = (int)sqlite3_column_int(stmt, 0); //種別 question->type = (std::string)StringUtils::format("%s", sqlite3_column_text(stmt, 1)); //日本語 question->japanese = (std::string)StringUtils::format("%s", sqlite3_column_text(stmt, 2)); //英語 question->english = (std::string)StringUtils::format("%s", sqlite3_column_text(stmt, 3)); //配列に挿入 questions->pushBack(question); } if (SQLITE_DONE!=r){ // エラー log("DB error :実行エラー"); sqlite3_reset(stmt); } } sqlite3_finalize(stmt); } sqlite3_close(db); return questions; }
SQLite::SQLite(const std::string & filename) { ErrorCode ec; handle_ = sqliteOpen(filename, ec); ec.check_(); }
void SQLite::open(const std::wstring & filename, ErrorCode & ec) { if(handle_) sqlite3_close(handle_); handle_ = sqliteOpen(mstd::utf8(filename), ec); }
SQLite::SQLite(const std::wstring & filename, ErrorCode & ec) : handle_(sqliteOpen(mstd::utf8(filename), ec)) {}
SQLite::SQLite(const std::string & filename, ErrorCode & ec) : handle_(sqliteOpen(filename, ec)) { }