ODBC를 통해 백엔드 FileMaker 기반 데이터베이스에 Go REST API를 연결하려고합니다.ODBC in Go/공백 레코드
Windows에 FileMaker ODBC 드라이버를 성공적으로 설치 했으므로 DSN이 작동합니다.
이동에 DB에 연결하려면 mgodbc
패키지를 사용하고 있습니다.
그러나 연결이 작동하는 동안 (런타임 오류 없음) 쿼리를 실행할 때 공백/null 레코드 만 반환됩니다. 다음과 같이
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=*****;")
나는 DB 연결을 만들려면 다음 코드가 있습니다. 그런 다음 쿼리 메서드 중 하나를 호출하여 모델 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
다음으로 읽고있다 : I 모델로 스캔 값을 인쇄 할 때, 난 그냥 완전히 빈 행을 얻을
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. FileMaker DB에 대해 연결된 서버 연결을 통해 SQL Server에서 쿼리를 실행하면 쿼리가 확실히 값을 반환합니다.
'sql.NullString' 대신'[] byte' 타입을 가진 변수로 값을 스캔하면 어떻게 될까요? – putu
'[] byte'로 변경하고 문자열 ('log.Print (p.FirstName)'없이 같은 print 문을 사용하면 배열에 값이 없으므로'[]'이 인쇄됩니다. – Ben
드라이버를'mgodbc'에서 ['odbc' 드라이버] (https://github.com/alexbrainman/odbc)로 변경하면 어떻게됩니까? – putu