package main import ( "database/sql" "fmt" "log" _ "xugu_driver/xugu" ) func main() { db, err := sql.Open("xugusql", "IP=10.28.20.101;DB=SYSTEM;User=SYSDBA;PWD=SYSDBA;Port=5190;AUTO_COMMIT=on;CHAR_SET=UTF8") //_, err = db.Exec("create table go_test(c1 int, c2 varchar);") //db.Ping() if err != nil { log.Fatal(err) } // err = db.Ping() // if err != nil { // fmt.Printf("connect xugu dbms ... failed\n") // } else { // fmt.Printf("connect xugu dbms ... ok\n") // } // stmt, err := db.Prepare("SELECT ? FROM gotest2;") // stmt.Query("1") //查询 // row, err := db.Query("select 1 from gotest2;") // if err != nil { // fmt.Println("查询错误", err) // } // col, _ := row.Columns() // fmt.Println("row.Columns(): ", col) // fmt.Println("len(col)", len(col)) // pvals := make([]interface{}, len(col)) // for key, _ := range pvals { // dest := make([]byte, 216) // pvals[key] = &dest // } /* end for */ // for row.Next() { // row.Scan(pvals...) // for _, v := range pvals { // //fmt.Printf("pvals:%v\t \n", v) binary.LittleEndian.Uint32(col.Col_Data) // //fmt.Printf("第%d次: %s\t", k, string(*(v.(*[]byte)))) // // fmt.Printf("pvals:%v\t \n", (v.(*[]byte))) // fmt.Printf("结果 %s\t", string(*(v.(*[]byte)))) // } // fmt.Printf("\n") // } //消息类型为E // r, err := db.Exec("drop table ta3;drop table ta4;") // r.RowsAffected() // db.Exec("INSERT INTO gotest VALUES('gt3');") //db.Prepare // stmt, err := db.Prepare("INSERT INTO gotest values(?);") // if err != nil { // log.Fatal(err) // } // ret, err := stmt.Exec("gt32") // if err != nil { // log.Fatal(err) // } // fmt.Println("ret", ret) //db.Exec //db.Exec("INSERT INTO gotest2 VALUES(1, 'gt3');") //db.Query // rows, err := db.Query("select * from gotest") // if err != nil { // log.Fatal(err) // } // var cols []string // cols, err = rows.Columns() // if err != nil { // log.Fatal(err) // } // pvals := make([]interface{}, len(cols)) // for key, _ := range pvals { // dest := make([]byte, 216) // pvals[key] = &dest // } /* end for */ // for rows.Next() { // err = rows.Scan(pvals...) // if err != nil { // log.Fatal(err) // } // for _, v := range pvals { // fmt.Printf("%s\t", string(*(v.(*[]byte)))) // } // fmt.Printf("\n") // } // rows.Close() //插入blob //db.Exec("create table goblob(a int, b blob);") // 打开文件 // file, err := os.Open("todo.txt") // if err != nil { // log.Fatal(err) // } // defer file.Close() // 读取文件内容 // content, err := io.ReadAll(file) // if err != nil { // log.Fatal(err) // } //db.Exec("insert into goblob values(1, ?);", content) //stmt方式插入 // stmt, err := db.Prepare("insert into goblob values(1, ?);") // if err != nil { // fmt.Println("error", err) // } // _, err = stmt.Exec(content) // if err != nil { // fmt.Println("error", err) // } //查询blob rows, err := db.Query("select b from goblob;") if err != nil { fmt.Println("error", err) } var cols []string cols, err = rows.Columns() if err != nil { log.Fatal(err) } pvals := make([]interface{}, len(cols)) for key, _ := range pvals { dest := make([]byte, 216) pvals[key] = &dest } /* end for */ for rows.Next() { fmt.Println("rows.Next()") err = rows.Scan(pvals...) if err != nil { log.Fatal(err) } for _, v := range pvals { fmt.Printf("aa %s\t", string(*(v.(*[]byte)))) } fmt.Printf("\n") } rows.Close() db.Close() }