2016-03-21 11 views
5

一括挿入を作成しようとしました。私はGORM github.com/jinzhu/gormゴラン結合アレイインターフェイス

import (
    "fmt" 
    dB "github.com/edwinlab/api/repositories" 
) 

func Update() error { 
    tx := dB.GetWriteDB().Begin() 
    sqlStr := "INSERT INTO city(code, name) VALUES (?, ?),(?, ?)" 
    vals := []interface{}{} 

    vals = append(vals, "XX1", "Jakarta") 
    vals = append(vals, "XX2", "Bandung") 

    tx.Exec(sqlStr, vals) 

    tx.Commit() 

    return nil 
} 

を使用しかし、私はエラーだ:私は手動でクエリを使用する場合は

Error 1136: Column count doesn't match value count at row 1 becuse i return wrong query

INSERT INTO city(code, name) VALUES ('XX1','Jakarta','XX2','Bandung', %!v(MISSING)),(%!v(MISSING), %!v(MISSING)) 

それが動作:

tx.Exec(sqlStr, "XX1", "Jakarta", "XX2", "Bandung") 

それは生成された:

INSERT INTO city(code, name) VALUES ('XX1', 'Jakarta'),('XX2', 'Bandung') 

問題は配列の作り方です文字列のような文字列を生成する"XX1", "Jakarta", ...

ありがとうございました。

+0

あなたは1つのクエリを使用して2つのデータを挿入したいと思いますか? – Kasnady

+0

はい一度に複数のデータを挿入したいのですが、参考資料はhttp://stackoverflow.com/a/21112176/2486312 – user2486312

答えて

4

variadicパラメータを持つ関数にスライスの要素を渡したい場合は、すべての要素を個別に渡し、スライス値を1つの引数として渡したくないことをコンパイラに伝えるには、...を使用する必要があります。 :

tx.Exec(sqlStr, vals...) 

詳細はPassing arguments to ... parametersです。あなたがvals...を渡す必要がだから

func (tx *Tx) Exec(query string, args ...interface{}) (Result, error) 

Tx.Exec()はの署名を持っています。また、返されたエラーを確認することも忘れないでください。例:

res, err := tx.Exec(sqlStr, vals...) 
if err != nil { 
    // handle error 
} 
+0

です。ありがとうございます。 – user2486312