如何从MySQL中选择数据然后将其附加到新结构中并将其转换为字节

时间:2017-03-20 11:04:42

标签: mysql go

我想使用Go语言从MySQL数据库中读取数据。脚本就像这样

const size_t BIT_LENGTH = 16;
static unsigned char bit_pwd[] = {0x13, 0x4E, 0x83, 0xF4, 0xEC, 0xBC, 0xDD, 0xB4, 0x77, 0xEF, 0x7F, 0x4B, 0xB0, 0xC8, 0x03, 0x1E};
static unsigned char chr_pwd[BIT_LENGTH * 2];

char *getPwd() {
    unsigned char c1 = 0x80;
    unsigned char c2 = c1;
    unsigned char *p = chr_pwd;

    memset(chr_pwd, '\0', BIT_LENGTH * 2);
    for (jint i = 0; i < BIT_LENGTH; i++) {
        if (i % 2 != 0) {
            bit_pwd[i] ^= c1++;
        }
        else {
            bit_pwd[i] ^= c2--;
        }
        p += sprintf((char *) p, "%02X", bit_pwd[i]);
    }
    chr_pwd[BIT_LENGTH * 2] = '\0';
    return (char *) chr_pwd;
}

// You will get real password ("93CEFC75923EA0370B6B04CECA4E7A99") from getPwd method.
_objGetWritableDatabase = env->CallObjectMethod(obj, _midGetWritableDatabase, env->NewStringUTF(getPwd()));  

返回的数据将保存到对象Struct中。结构就像这样

func GetAllCountry() []*Country{

    dbConnection := db.ConnectMySQL()

    rows, err := dbConnection.Query("SELECT id, country_code, country_name, phone_code, icon FROM country;")
    if err != nil {
        log.Fatal(err)
    }
    defer rows.Close()

    country := new(Country)
    var countries []*Country
    for rows.Next() {
        err := rows.Scan(&country.id, &country.country_code, &country.country_name, &country.phone_code, &country.icon)
        if err != nil {
            log.Fatal(err)
        }
        countries = append(countries, country)
        fmt.Println(country)
    }
    return countries
}

在其他文件中,我正在创建一个获取所有数据的函数。我调用该函数,然后将其转换为type Country struct { id int `json:"Country.id"` country_code string `json:"Country.country_code"` country_name string `json:"Country.country_name"` phone_code string `json:"Country.phone_code"` icon string `json:"Country.icon"` } ,因为它曾经将它发送到MessageBroker。

以下是将其转换为[]byte

的功能
[]byte

func GetCountry(msg string) []byte { // country := new(countryModel.Country) var countries []*countryModel.Country countries = countryModel.GetAllCountry() log.Println("Show result: ", countries) jsResult, err := json.Marshal(countries) if err != nil { logger.Error(err, "Failed on GetCountry") } log.Println("Show result JSON: ", jsResult) return jsResult } 函数的返回结果不是我想要的。 在那个函数中,我得到了

GetCountry

我在控制台上显示数据。

[
  {},
  {}
]

请帮忙。

1 个答案:

答案 0 :(得分:0)

正如@ M-AbdelRahman在评论中所提到的,您的Country结构字段需要导出(以大写字母开头的那些)因为json.Marshal跳过了未导出的字段(以小写字母开头的字段)以及您回复{}的原因。

type Country struct {
    Id             int `json:"Country.id"`
    CountryCode    string `json:"Country.country_code"`
    CountryName    string `json:"Country.country_name"`
    PhoneCode      string `json:"Country.phone_code"`
    Icon           string `json:"Country.icon"`
}

您的扫描必须相应更改。

err := rows.Scan(&country.Id, &country.CountryCode, &country.CountryName, &country.PhoneCode, &country.Icon)