我剛開始評估Rust。在Github上使用Rust和sqlite3回購,我試圖確定一個Cursor的EOF。我不知道如何做到「正確」,我想這可能是通過「匹配」聲明。如何使用sqlite3選擇Rust中的遊標末尾?
在下列2行第二行是我當前如何確定EOF,但是這顯然不是「正確」的方式:
let oNextResult:sqlite::types::ResultCode = oDbCursor.step();
tDone = (fmt!("%?", oNextResult) == ~"SQLITE_DONE");
以下是包含2行以上的未完成的功能。請原諒缺乏Rust命名約定,但我會考慮實現這一點。
/********************
**** Update Data ****
*********************/
fn fUpdateData(oDb1:&sqlite::database::Database, iUpdateMax:int) -> bool {
println(fmt!("Updating %d Rows .......", iUpdateMax));
let sSql:~str = fmt!("Select ikey, sname, iborn, dbal from test LIMIT %d",
iUpdateMax);
let oDbExec = oDb1.exec(sSql);
if oDbExec.is_err() {
println(fmt!("Select Failed! : %?, sql=%s", oDbExec, sSql));
return false;
}
println("Select succeeded. Processing select list .....");
let mut iUpdateCount: int = 0;
let oDbCursor:sqlite::cursor::Cursor = oDb1.prepare(sSql, &None).unwrap();
let mut tDone:bool = false;
while !tDone {
let oNextResult:sqlite::types::ResultCode = oDbCursor.step();
tDone = (fmt!("%?", oNextResult) == ~"SQLITE_DONE");
if !tDone {
let sKey = oDbCursor.get_text(0);
let sName = oDbCursor.get_text(1);
let sBorn = oDbCursor.get_text(2);
let sBal = oDbCursor.get_text(3);
println(fmt!("skey = %s, sname = %s, sBorn = %s, sBal = %s", sKey,
sName, sBorn, sBal));
iUpdateCount += 1;
}
}
println(fmt!("Update succeeded, items updated = %d", iUpdateCount));
return true;
}
非常感謝。我希望有一個優雅的解決方案,因爲我討厭使用「break」。 - 我知道別人不同意。我必須對你的解決方案做一些小的修改,如下所示:「while(oDbCursor.step()== sqlite :: types :: SQLITE_ROW){」。如果這是正確的,你可能想編輯你的答案。順便說一句,我還沒有在生產中使用回購,我準備進行改變。 –
已將SQLITE_OK更改爲SQLITE_ROW。 –