Home | History | Annotate | Download | only in sql
      1 // Copyright 2013 The Go Authors. All rights reserved.
      2 // Use of this source code is governed by a BSD-style
      3 // license that can be found in the LICENSE file.
      4 
      5 package sql_test
      6 
      7 import (
      8 	"database/sql"
      9 	"fmt"
     10 	"log"
     11 )
     12 
     13 var db *sql.DB
     14 
     15 func ExampleDB_Query() {
     16 	age := 27
     17 	rows, err := db.Query("SELECT name FROM users WHERE age=?", age)
     18 	if err != nil {
     19 		log.Fatal(err)
     20 	}
     21 	defer rows.Close()
     22 	for rows.Next() {
     23 		var name string
     24 		if err := rows.Scan(&name); err != nil {
     25 			log.Fatal(err)
     26 		}
     27 		fmt.Printf("%s is %d\n", name, age)
     28 	}
     29 	if err := rows.Err(); err != nil {
     30 		log.Fatal(err)
     31 	}
     32 }
     33 
     34 func ExampleDB_QueryRow() {
     35 	id := 123
     36 	var username string
     37 	err := db.QueryRow("SELECT username FROM users WHERE id=?", id).Scan(&username)
     38 	switch {
     39 	case err == sql.ErrNoRows:
     40 		log.Printf("No user with that ID.")
     41 	case err != nil:
     42 		log.Fatal(err)
     43 	default:
     44 		fmt.Printf("Username is %s\n", username)
     45 	}
     46 }
     47 
     48 func ExampleDB_Query_multipleResultSets() {
     49 	age := 27
     50 	q := `
     51 create temp table uid (id bigint); -- Create temp table for queries.
     52 insert into uid
     53 select id from users where age < ?; -- Populate temp table.
     54 
     55 -- First result set.
     56 select
     57 	users.id, name
     58 from
     59 	users
     60 	join uid on users.id = uid.id
     61 ;
     62 
     63 -- Second result set.
     64 select 
     65 	ur.user, ur.role
     66 from
     67 	user_roles as ur
     68 	join uid on uid.id = ur.user
     69 ;
     70 	`
     71 	rows, err := db.Query(q, age)
     72 	if err != nil {
     73 		log.Fatal(err)
     74 	}
     75 	defer rows.Close()
     76 
     77 	for rows.Next() {
     78 		var (
     79 			id   int64
     80 			name string
     81 		)
     82 		if err := rows.Scan(&id, &name); err != nil {
     83 			log.Fatal(err)
     84 		}
     85 		fmt.Printf("id %d name is %s\n", id, name)
     86 	}
     87 	if !rows.NextResultSet() {
     88 		log.Fatal("expected more result sets", rows.Err())
     89 	}
     90 	var roleMap = map[int64]string{
     91 		1: "user",
     92 		2: "admin",
     93 		3: "gopher",
     94 	}
     95 	for rows.Next() {
     96 		var (
     97 			id   int64
     98 			role int64
     99 		)
    100 		if err := rows.Scan(&id, &role); err != nil {
    101 			log.Fatal(err)
    102 		}
    103 		fmt.Printf("id %d has role %s\n", id, roleMap[role])
    104 	}
    105 	if err := rows.Err(); err != nil {
    106 		log.Fatal(err)
    107 	}
    108 }
    109