2 回答
TA贡献1858条经验 获得超8个赞
这是一个执行完整 conn/prep/query/fetch 操作的函数:
func getDatePrepQuery(driver string, connString string) error {
db, err := sql.Open(driver, connString)
if err != nil {
log.Printf("sql.Open(%s, %s)\n\t%s\n",
driver, connString, err.Error())
return err
}
defer db.Close()
query := "select SYSDATE from dual"
stmt, err := db.Prepare(query)
if err != nil {
log.Printf("db.Prepare(%s) failed.\n\t%s\n", query, err.Error())
return err
}
defer stmt.Close()
rows, err := stmt.Query()
if err != nil {
log.Printf("stmt.Query() failed.\n\t%s\n", err.Error())
return err
}
defer rows.Close()
var columns []string
columns, err = rows.Columns()
if err != nil {
log.Printf("rows.Columns() failed.\n\t%s\n", err.Error())
}
for i, c := range columns {
fmt.Printf("%3d %s\n", i, c)
}
for rows.Next() {
var sysdate time.Time
err = rows.Scan(&sysdate)
if err != nil {
log.Printf("rows.Scan(...) failed.\n\t%s\n", err.Error())
return err
}
fmt.Println("SYSDATE:", sysdate)
}
err = rows.Err()
if err != nil {
log.Printf("rows iteration failed.\n\t%s\n", err.Error())
return err
}
return nil
}
使用 Scan 是一个棘手的部分,因为 Oracle 程序员可能不习惯它。这个函数适用于我尝试过的所有 odbc、mgodbc、oci8、adodb 和 goracle 包。
- 2 回答
- 0 关注
- 184 浏览
添加回答
举报