我試圖通過ODBC將Go REST API連接到基於後端FileMaker的數據庫。ODBC返回空/空記錄
我在Windows上成功安裝了FileMaker ODBC驅動程序,並且DSN正在運行。
我正在使用Go中的mgodbc
軟件包連接到數據庫。
但是,雖然連接有效(無運行時錯誤),但當我運行查詢時,我只是返回空白/空記錄。我有以下代碼來創建一個數據庫連接:
func NewDB(dataSourceName string) (*DB, error) {
db, err := sql.Open("mgodbc", dataSourceName)
if err != nil {
return nil, err
}
if err = db.Ping(); err != nil {
return nil, err
}
// TEST
return &DB{db}, nil
}
這會從我的main
方法稱爲如下:db, err := md.NewDB("DSN=cet_registrations2;Uid=*****;Pwd=*****;")
。然後,我打電話給我的一個查詢方法,並嘗試將其讀入模型struct
。我簡化了我的查詢,使其更容易:
func (db *DB) GetStudent(id int) (*Student, error) {
s := new(Student)
p := new(PersonalDetails)
log.Println(id)
rows, err := db.Query("SELECT FN_Gn_Pn FROM STUDENTS")
i := 0
if err != nil {
log.Fatal(err)
}
defer rows.Close()
for rows.Next() {
i++
err := rows.Scan(&p.FirstName)
log.Print(p.FirstName.String)
log.Printf(strconv.Itoa(i))
if err != nil {
log.Fatal(err)
}
}
err = rows.Err()
if err != nil {
log.Fatal(err)
}
s.ID = 34114
s.Details = p
return s, err
}
,我讀成以下struct
:
import (
"database/sql"
u "sydney.edu.au/bric9018/cet.api/util"
)
type PersonalDetails struct {
// Unique identifier for person
ID int32 `json:"id,omitempty"`
// First name of person
FirstName sql.NullString `json:"firstName,omitempty"`
// Last name of person.
LastName sql.NullString `json:"lastName,omitempty"`
// Person nominated preferrered name.
PreferredName sql.NullString `json:"preferredName,omitempty"`
// Person's SSO username for University systems
Unikey sql.NullString `json:"unikey,omitempty"`
// Person's personal email
PersonalEmail sql.NullString `json:"personalEmail,omitempty"`
// Sydney University email
UniEmail sql.NullString `json:"uniEmail,omitempty"`
// Person's date of birth
Dob u.NullTime `json:"dob,omitempty"`
}
不過,我只是得到完全空白行,當我打印掃描到模型中的價值使用log.Print(p.FirstName.String)
。我似乎沒有得到任何值通過掃描回到我的struct
。爲什麼是這樣?
P.S.當我在SQL Server中通過鏈接服務器連接對FileMaker數據庫運行時,查詢肯定會返回值。
如果您將該值掃描到具有'[] byte'類型而不是'sql.NullString'的變量,您會得到什麼? – putu
如果將其更改爲'[] byte'並使用不帶字符串的相同打印語句('log.Print(p.FirstName)'),則不會在數組中找到任何值,即打印出[]。 – Ben
如果將驅動程序從'mgodbc'更改爲['odbc'驅動程序](https://github.com/alexbrainman/odbc)(只更改導入部分)? – putu