2015-05-09 23 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开始,刚开始时,这显然可能是导致一些头痛的原因。