2015-05-09 148 views
0

我是新來的,試圖從sqlite數據庫檢索數據。 我使用github.com/mattn/go-sqlite3作爲sqlite驅動程序。Go/golang sqlite查詢不返回任何行

我發送的查詢不會返回任何結果,即使它應該。我試過我的程序手動生成的查詢,它會返回數據,因爲它應該在手動使用查詢時以及當我通過我的程序發送時返回數據。

這裏是我的代碼:

for index := range Array { 

id, _ := strconv.Atoi(Array[index]) 


rand.Seed(time.Now().UnixNano()) 
RandomNr := rand.Intn(100) 
fmt.Printf("index: %d - randomnr: %d \n", id, RandomNr) 





rows, errROW := db.Query("SELECT user.id,user.name,stage.link,player.url,player.characterchance,player.chance FROM user,stage,player WHERE user.id = '%d' AND '%d' <= user.chance AND stage.user = user.id AND stage.domain = player.id AND player.chance > 0 ORDER BY player.id ASC \n",id, RandomNr)//.Scan(&idr, &name, &link, &url, &characterchance, &chance) 



//this is what the finished query looks like and it returns the rows as its supposed to 
//rows, errROW := db.Query("SELECT user.id,user.name,stage.link,player.url,player.characterchance,player.chance FROM user,stage,player WHERE user.id = '203' AND '33' <= user.chance AND stage.user = user.id AND stage.domain = player.id AND player.chance > 0 ORDER BY player.id ASC") 

if errROW != nil { 
    fmt.Println("errROW") 
    log.Println(errROW) 

} 
defer rows.Close() 
if rows.Next() == false { 

    fmt.Println("no rows ") 

} 
for rows.Next() { 
    fmt.Println("where are the rows") 
    var id int 
    var name string 
    var link string 
    var url string 
    var characterchance int 
    var chance int 

    rows.Scan(&id, &name, &link, &url, &characterchance, &chance) 
    fmt.Println(id,name,link,url,characterchance,chance) 


} 
rows.Close() 

} 

} 

這種查詢可以返回多個或單個行。我也嘗試通過QueryRow檢索數據作爲單行,也沒有返回任何結果。

任何幫助將不勝感激。

更新: 我加 如果rows.Next()==假

是試圖發現問題。刪除它會得到相同的結果。此外,我不會收到來自掃描的錯誤消息。 for rows.next()循環甚至不會執行。

+0

沒有想法的人? – Markh

回答

2

當你這樣做:

if rows.Next() == false 

您滾動到第一行

for rows.Next() 

移動到下一行

基本上,你跳過第一在您提供的示例代碼中的結果集中排成一行。

此外,您正在忽略掃描中的錯誤。

這就像如果查詢返回至少2行(因爲第一行被跳過)

+0

我更新了我的問題以反映您的答案 - 它並未爲我解決問題。 – Markh

+0

當你運行它時,它正在打印WTF線呢? –

+0

是的,它正在運行該行。 – Markh

0

好吧,我想通了,問題是什麼將打印的東西:

我的查詢中我使用: %d作爲我的變量佔位符,當我應該使用$ 1,$ 2等。使用此查詢返回結果如預期。

對我來說,這似乎很奇怪,允許這種行爲從go或sqlite返回沒有錯誤,甚至當你打印輸出查詢並手動使用sqlite3時也可以使用。從C開始,剛開始時,這顯然可能是導致一些頭痛的原因。