一旦我们成功连接到数据库,我们就可以执行SQL查询并读取数据库表中的所有值。首先,我们需要准备SQL语句。
```go
statement, err := db.Prepare("SELECT * FROM table_name")
if err != nil {
panic(err.Error())
}
defer statement.Close()
```
接下来,我们可以使用`Query()`函数执行查询并获取结果。
```go
rows, err := statement.Query()
if err != nil {
panic(err.Error())
}
defer rows.Close()
```
然后,我们可以遍历结果集并读取每一行的值。
```go
for rows.Next() {
var column1 string
var column2 int
// ...
err := rows.Scan(&column1, &column2)
if err != nil {
panic(err.Error())
}
// 处理每一行的值
}
```
在循环中,我们使用`Scan()`函数从结果集中读取每个列的值。我们需要将变量的指针传递给这个函数,以便它可以将值填充到变量中。
处理查询结果
一旦我们读取了每一行的值,我们就可以根据需求进行处理。例如,我们可以将这些值存储到结构体中,或者将它们打印到控制台上。
```go
type Row struct {
Column1 string
Column2 int
// ...
}
var result []Row
for rows.Next() {
var row Row
err := rows.Scan(&row.Column1, &row.Column2)
if err != nil {
panic(err.Error())
}
result = append(result, row)
}
for _, row := range result {
fmt.Println(row.Column1, row.Column2)
}
```
在上面的示例中,我们定义了一个名为`Row`的结构体来存储每一行的值。我们创建了一个切片来存储所有的行。在循环中,我们将每一行的值读取到`Row`结构体中,并将其追加到切片中。最后,我们使用一个循环来打印每一行的值。