如果表是空的,你是一個在短短的一杆加油吧(你不以後需要再次做到這一點時,有表中的數據),並且你沒有太多行,那麼你可以緩存已經插入的名字並在內存中查找它們。
它更像是一個評論,我猜。
還有本作獲得最後插入的ID:
SELECT last_insert_rowid();
但是,如果上述應用,你會更快自行分配的ID,而不是把它定義爲AUTOINCREMENT。然後,您不需要獲取最後插入的ID,只需保留一個計數器並插入所有名稱,然後爲每個新名稱增加。
CREATE TABLE IF NOT EXISTS signals(sigid INTEGER PRIMARY KEY NOT NULL, name TEXT)
List<String> insertedNames = new List<String>();
int count = 0;
while(input.hasNext())
{
String name = input.next();
if(!insertedNames.contains(name))
{
var sql = "insert into table (sigid,name) VALUES (" + count + ", " + name + ")";
executeSql(sql);
insertedNames.add(name);
count++;
}
}
回答您的評論
public int getId(string name)
{
String sql = "select id from table where name='" + name + "'";
int theIdForTheName = executeAndGetFirstColumnAsInt(sql);
return theIdForTheName;
}
我不知道還有什麼要告訴你......
我已經找到了這個選項,但它不是我要找的。當我要求一個已經存在的名稱的ID時,它可能會返回錯誤的ID。例如,假設按照「CAT」 - > id = 1「DOG」 - > id = 2「FISH」 - > id = 3的順序添加。當我發送「CAT」查詢時,它會返回我id = 3(最後插入的id),即錯誤的id。 – alexroat 2012-02-23 16:08:37
回答您的意見,我需要看到你的代碼,這裏是我會做:'從表中選擇id其中名稱='CAT'' – mindandmedia 2012-02-23 16:13:57
讓我們incapsulate在一個函數的getId(名)這個查詢。 (「DOG」),getid(「CAT」),getid(「DOG」),getid(「FISH」),getid(「CAT」),getid(「BUNNY」)應按順序返回1, 2,1,3,2,4 last_inserted_id並不總是我要找的。 – alexroat 2012-02-23 16:15:56