我已經嘗試了一個準備好的語句和一個常規語句,使用一個長的iPhone模擬器路徑從我的表中檢索記錄。在iPhone上包含路徑失敗的SQLite查詢
我根本無法讓SELECT語句在WHERE語句中使用字段Path。如果我刪除WHERE語句,它將返回記錄。
例如
Last Added[/Users/admin/Library/Developer/CoreSimulator/Devices/1546523B-D9E4-45F6-9ACA-ADA5CF73DFE4/data/Containers/Data/Application/9187662E-16F3-4573-B486-256BDA00CBD1/Documents/wf_mages-3.lha]
SQL[SELECT ID FROM Tune WHERE Path="/Users/admin/Library/Developer/CoreSimulator/Devices/1546523B-D9E4-45F6-9ACA-ADA5CF73DFE4/data/Containers/Data/Application/9187662E-16F3-4573-B486-256BDA00CBD1/Documents/wf_mages-3.lha"]
我在查詢中試過雙引號和單引號。我甚至在SQLiteBrowser中嘗試了相同的查詢,它工作正常。
SELECT ID FROM Tune WHERE Path LIKE'%mages%'works fine。
正斜槓或路徑值的大小有問題嗎?是否需要以某種方式逃避正斜槓?
我能找到關於正斜槓的唯一其他帖子推薦使用準備好的語句,但這是我最初開始的,他們不會工作。查找在我的表格中的其他字段上工作正常 - 只是沒有路徑。
int GetTuneIDWithPath(char *pszPath)
{
// TEST
char txTmp [ 1024 ];
sprintf(g_txSQL, "SELECT %s", fldTune_ID);
sprintf(txTmp, " FROM %s ", tbTune);
strcat(g_txSQL, txTmp);
//sprintf(txTmp, " WHERE %s=\"%s\"", fldTune_Path, pszPath);
//strcat(g_txSQL, txTmp);
// sprintf(txTmp, " WHERE %s='%s'", fldTune_Path, pszPath);
//strcat(g_txSQL, txTmp);
//sprintf(txTmp, " WHERE %s LIKE '%%mages%%'", fldTune_Path);
//strcat(g_txSQL, txTmp);
LogDebugf("SQL[%s]", g_txSQL);
char *zErrMsg = 0;
char **pszResult;
int nRows;
int nCols;
int rc;
rc = sqlite3_get_table_wrapper(g_MainDB,
g_txSQL,
&pszResult,
&nRows,
&nCols,
&zErrMsg);
if(nRows != 1)
{
LogDebugf("FAILED nRows: %d", nRows);
return FALSE;
}
// First row is field names, so start at 1
int nCol = 0;
int nID = Safe_atoi( pszResult[ nCols + nCol ]); nCol ++;
LogDebugf("PDS> nID: %d Find[%s]", nID, pszPath);
return nID;
}
在此之前,我曾嘗試使用預處理語句就像我的其他查詢做到:
char txTmp [ 1024 ];
sprintf(g_txSQL, "SELECT %s", fldTune_ID);
sprintf(txTmp, " FROM %s WHERE %s=?", tbTune, fldTune_Path);
strcat(g_txSQL, txTmp);
sqlite3_stmt *stmt = NULL;
sqlite3_prepare(g_MainDB, g_txSQL, -1, &stmt, NULL);
sqlite3_reset(stmt);
sqlite3_bind_text(stmt, 1, pszPath, strlen(pszPath), SQLITE_STATIC);
rc = sqlite3_step(stmt);
if(rc != SQLITE_ROW)
{
LogDebugf("PDS> Lookup failed [%s] rc: %d", pszPath, rc);
return FALSE;
}
int nID = sqlite3_column_int(stmt, 0);
LogDebugf("PDS> nID: %d Find[%s]", nID, pszPath);
顯示您的代碼。 –
@CL - 添加了一些代碼。 – SparkyNZ