mirror of https://github.com/golang/go.git
109 lines
1.9 KiB
Go
109 lines
1.9 KiB
Go
// Copyright 2013 The Go Authors. All rights reserved.
|
|
// Use of this source code is governed by a BSD-style
|
|
// license that can be found in the LICENSE file.
|
|
|
|
package sql_test
|
|
|
|
import (
|
|
"database/sql"
|
|
"fmt"
|
|
"log"
|
|
)
|
|
|
|
var db *sql.DB
|
|
|
|
func ExampleDB_Query() {
|
|
age := 27
|
|
rows, err := db.Query("SELECT name FROM users WHERE age=?", age)
|
|
if err != nil {
|
|
log.Fatal(err)
|
|
}
|
|
defer rows.Close()
|
|
for rows.Next() {
|
|
var name string
|
|
if err := rows.Scan(&name); err != nil {
|
|
log.Fatal(err)
|
|
}
|
|
fmt.Printf("%s is %d\n", name, age)
|
|
}
|
|
if err := rows.Err(); err != nil {
|
|
log.Fatal(err)
|
|
}
|
|
}
|
|
|
|
func ExampleDB_QueryRow() {
|
|
id := 123
|
|
var username string
|
|
err := db.QueryRow("SELECT username FROM users WHERE id=?", id).Scan(&username)
|
|
switch {
|
|
case err == sql.ErrNoRows:
|
|
log.Printf("No user with that ID.")
|
|
case err != nil:
|
|
log.Fatal(err)
|
|
default:
|
|
fmt.Printf("Username is %s\n", username)
|
|
}
|
|
}
|
|
|
|
func ExampleDB_Query_multipleResultSets() {
|
|
age := 27
|
|
q := `
|
|
create temp table uid (id bigint); -- Create temp table for queries.
|
|
insert into uid
|
|
select id from users where age < ?; -- Populate temp table.
|
|
|
|
-- First result set.
|
|
select
|
|
users.id, name
|
|
from
|
|
users
|
|
join uid on users.id = uid.id
|
|
;
|
|
|
|
-- Second result set.
|
|
select
|
|
ur.user, ur.role
|
|
from
|
|
user_roles as ur
|
|
join uid on uid.id = ur.user
|
|
;
|
|
`
|
|
rows, err := db.Query(q, age)
|
|
if err != nil {
|
|
log.Fatal(err)
|
|
}
|
|
defer rows.Close()
|
|
|
|
for rows.Next() {
|
|
var (
|
|
id int64
|
|
name string
|
|
)
|
|
if err := rows.Scan(&id, &name); err != nil {
|
|
log.Fatal(err)
|
|
}
|
|
fmt.Printf("id %d name is %s\n", id, name)
|
|
}
|
|
if !rows.NextResultSet() {
|
|
log.Fatal("expected more result sets", rows.Err())
|
|
}
|
|
var roleMap = map[int64]string{
|
|
1: "user",
|
|
2: "admin",
|
|
3: "gopher",
|
|
}
|
|
for rows.Next() {
|
|
var (
|
|
id int64
|
|
role int64
|
|
)
|
|
if err := rows.Scan(&id, &role); err != nil {
|
|
log.Fatal(err)
|
|
}
|
|
fmt.Printf("id %d has role %s\n", id, roleMap[role])
|
|
}
|
|
if err := rows.Err(); err != nil {
|
|
log.Fatal(err)
|
|
}
|
|
}
|