Estoy haciendo un WS
, en donde realizo una consulta a la base de datos, como la base de datos a la cual realizo la consulta es Informix
, la conexión la realizo por medio de ODBC
, el problema que tengo es al momento de crear el json
debido a los tipos de variable, agradezco la ayuda.
Para realizar la consulta y extraer el mapeo, estoy guiandome por este ejemplo que de entra me da el siguiente resultado:
-Paquetes importados:
import (
_"unicode/utf8"
_"os"
_ "github.com/alexbrainman/odbc"
"database/sql"
"fmt"
"os"
"time"
"reflect"
"log"
)
-código:
db, err := sql.Open("odbc", "DSN=" + host)
if err != nil {
fmt.Println("Could not connect to db:", err)
os.Exit(1)
}
err = db.Ping()
if err != nil {
fmt.Println("got an error:", err)
os.Exit(1)
}
/*SELECT*/
rows, err := db.Query("SELECT su.coduser AS id , TRIM(su.nomuser) AS user, s.fchven AS fch_ven, s.fecreg AS fch_registro FROM suser su JOIN sinfo s ON s.coduser = su.coduser WHERE su.nomuser=? AND su.pass=?",user_login,pass_login)
cols, _ := rows.Columns()
for rows.Next() {
// Create a slice of interface{}'s to represent each column,
// and a second slice to contain pointers to each item in the columns slice.
columns := make([]interface{}, len(cols))
columnPointers := make([]interface{}, len(cols))
for i, _ := range columns {
columnPointers[i] = &columns[i]
}
// Scan the result into the column pointers...
if err := rows.Scan(columnPointers...); err != nil {
//return err
}
// Create our map, and retrieve the value for each column from the pointers slice,
// storing it in the map with the name of the column as the key.
m := make(map[string]interface{})
for i, colName := range cols {
val := columnPointers[i].(*interface{})
m[colName] = *val
}
// Outputs: map[columnName:value columnName2:value2 columnName3:value3 ...]
fmt.Print(m)
}
La consulta esta bien, efectivamente me realiza el ciclo en caso de ser varios registros, pero cuando imprimo el map
para verlo en consola, me muestra el siguiente resultado:
map[id:769244 user:[65 100 109 105 110 95 117 115 101 114] fch_ven:2019-11-06 00:00:00 -0500 -05 fch_registro:2017-04-15 05:05:29 -0500 -05]2018/05/25 15:06:42 {0 <nil> 0 0 0 0 0 0 0 0 }
se que puedo hacer esto:
var name string
if err := rows.Scan(&name); err != nil {
log.Fatal(err)
}
Crear las variables y asociarlas, pero tengo problemas con los campos que son de tipo DATE
y DATETIME
, simplemente no me retorna la información, por eso opte por usar el ejemplo mencionado pero tengo problemas con los string
, aparte que cuando realizo el almacenamiento en una variable var test string = m["user"].(string)
. Simplemente me da error en la linea cuando lo estoy ejecutando, solo me dice que hay error mas no me especifica.