我正在尝试连接sqlite但不能。有人能帮我吗?我在这里看不到任何错误,我在谷歌和这里搜索了这个问题的高低,但我找不到任何方法来解决这个问题。
我正在关注教程here
请帮助我,我对这个错误感到疯狂。 =(
[super viewDidLoad];
// Do any additional setup after loading the view, typically from a nib.
sqlite3 *contactDB; //declare pointer to database structurery
const char *dbPath = [databasePath UTF8String]; //convert NSString to UTF8String
//open database file. TRUE = success, FALSE = failed
if (sqlite3_open(dbPath, &contactDB)== SQLITE_OK){
NSLog(@"Opened");
sqlite3_stmt *statement;
NSString *querySQL = @"SELECT address, phone FROM contacts";
const char *query_stmt = [querySQL UTF8String];
if (sqlite3_prepare_v2(contactDB, query_stmt, 1, &statement, NULL) == SQLITE_OK) {
NSLog(@"Statement is OK");
}else{
NSLog(@"Statement FAILED");
}
}else{
NSLog(@"Failed");
}
日志只显示“已打开”,然后显示“语句失败”
答案 0 :(得分:6)
我就是这样做的。 (我的数据库类的编译部分)
显示sql错误。
sqlite3 *_database;
sqlite3_open([databasePath UTF8String], &_database);
NSString *sqlStatement = @"SELECT address, phone FROM contacts";
const char *sql = [sqlStatement UTF8String];
static sqlite3_stmt *compiledStatement;
int result = sqlite3_prepare_v2(_database, sql, -1, &compiledStatement, NULL);
if(result != SQLITE_OK) {
NSLog(@"Prepare-error #%i: %s", result, sqlite3_errmsg(_database));
}
result = sqlite3_step(compiledStatement);
if (result != SQLITE_DONE) {
NSLog(@"Step-error #%i for '%@': %s", result, sqlStatement, sqlite3_errmsg(_database));
}
sqlite3_finalize(compiledStatement);
答案 1 :(得分:1)
错误在这行代码中。
if (sqlite3_prepare_v2(contactDB, query_stmt, 1, &statement, NULL) == SQLITE_OK) {
1
错了。来自SQLite文档:
int sqlite3_prepare_v2(
sqlite3 *db, /* Database handle */
const char *zSql, /* SQL statement, UTF-8 encoded */
int nByte, /* Maximum length of zSql in bytes. */
sqlite3_stmt **ppStmt, /* OUT: Statement handle */
const char **pzTail /* OUT: Pointer to unused portion of zSql */
);
If the nByte argument is less than zero, then zSql is read up to the first zero
terminator. If nByte is non-negative, then it is the maximum number of bytes
read from zSql.
所以你强迫SQLite只读取语句中的第一个字节。当然这是无效的。
答案 2 :(得分:0)
确保您在项目中完成了这些要点。
确认该文件列在" 复制捆绑资源"在您的目标" 构建阶段"而不是" 复制文件"使用自定义目标或子路径。
确保您与sqlite文件没有任何路径冲突。我的意思是文档directory/database path/
是正确的。
我已经实现了像
这样的sqlite查询 SELECT * FROM someTable WHERE status LIKE 'someString' AND BankName LIKE 'someString'
而不是
SELECT * FROM someTable WHERE status='someString' AND BankName='someString'
确保您没有在任何其他应用程序中包含sqlite文件
确保您没有具有相同路径的重复sqlite文件。
经过多次努力,这对我有用,我希望它有所帮助。如果有帮助,请投票。