2015-06-04 3 views
1

Так что я пытаюсь использовать драйвер mysql для вставки данных в базу данных.GoLang mysql исполнение не работает

В частности, я использую этот один -

"github.com/go-sql-driver/mysql" 

Это мой код

func main() { 

db, err := sql.Open("mysql", "psanker:[email protected]/education_data") 
err = db.Ping() 

if err != nil { 
    fmt.Println("Failed to prepare connection to database") 
    log.Fatal("Error:", err.Error()) 
} 

defer db.Close() 


    content, err := ioutil.ReadFile("activities.csv") 

    lines := strings.Split(string(content), "\r") 

    //only work so long as I have one district 
    rows, err := db.Query("SELECT id FROM districts") 
    var districtId int 
    defer rows.Close() 

    for rows.Next() { 
     err := rows.Scan(&districtId) 
     check(err) 
    } 


    for i, line := range lines { 
     if i > 1 { 
      splitStr := strings.Split(line, ",") 
      var activityCode string 

      if strings.Contains(splitStr[0], "-") { 
       //this is an activity 
       activityCode = splitStr[0] 
       stmt1, _ := db.Prepare("INSERT INTO activities(code) VALUES(?)") 
       stmt2, _ := db.Prepare("INSERT INTO activities(name) VALUES(?)") 
       res, _ := stmt1.Exec(splitStr[0]) 
       stmt2.Exec(splitStr[1]) 
      } else { 
       //this is a sub activity 
       stmt1, _ := db.Prepare("INSERT INTO sub_activities(code) VALUES(?)") 
       stmt2, _ := db.Prepare("INSERT INTO sub_activities(name) VALUES(?)") 
       stmt1.Exec(splitStr[0]) 
       stmt2.Exec(splitStr[1]) 
       if activityCode != "" { 
        rows, _ := db.Query("SELECT id from activities where code = ?", activityCode) 
        var activityId int 
        for rows.Next() { 
         err := rows.Scan(&activityId) 
         check(err) 
         stmt3, err := db.Prepare("INSERT INTO sub_activities(activity_id) VALUES(?)") 
         stmt3.Exec(activityId) 
        } 
       } 
       rows, _ := db.Query("SELECT id from sub_activities where code= ?", splitStr[0]) 
       var sub_activityId int 
       for rows.Next() { 
        err := rows.Scan(&sub_activityId) 
        check(err) 
        stmt5, _ := db.Prepare("INSERT INTO sub_activity_expenditure(district_id) VALUES(?)") 
        stmt6, _ := db.Prepare("INSERT INTO sub_activity_expenditure(sub_activity_id) VALUES(?)") 
        stmt7, _ := db.Prepare("INSERT INTO sub_activity_expenditure(expenditure) VALUES(?)") 
        stmt5.Exec(districtId) 
        stmt6.Exec(sub_activityId) 
        stmt7.Exec(splitStr[2]) 
       } 
      } 
     } 
    } 
} 

Когда я проверяю свою базу данных SQL, нет ни одной строки, вставленной в таблицы. Я думаю, что я обращаюсь к правильной базе данных, потому что исходный запрос, который получает идентификатор из районов, возвращает 1, что является правильным.

Что происходит?

EDIT

Я подтвердил, что я в правильном дб, делая это

rows, err = db.Query("SELECT DATABASE();") 
var test string 

for rows.Next() { 
    rows.Scan(&test) 
    fmt.Println(test) 
} 

, которая печатает education_data

+0

сделать вызов 'SELECT, DATABASE();' и увидеть, где вы – Drew

+0

ждать так db.Prepare («SELECT DATABASE()»), а затем, что ? – praks5432

+0

тогда, как выполнить его? – Drew

ответ

1

как вы пытаетесь вставить в таблицу, которая (в чате по крайней мере) мне напомнили, что ваши столбцы не равны нулю, и вы действительно хотели создать 1 строку, когда вы фактически создали два ... это не удалось для stmt1 и stmt2 cuz, не имеющих значения для столбцов, не были заданы параметры для замены для всех необходимые данные для вставки для успеха.

сосредоточиться на создании 1 строки для stmt1 и stmt2 (объединить их в один stmt1 для выполнения с двумя параметрами).

убедитесь, что строки обернуты с одной цитатой

+0

Итак, я распечатал splitStr [0] и splitStr [1], и они оба были строковыми значениями – praks5432

+0

, которые я могу понять. это 'districtId',' activityId' и 'sub_activityId' – Drew

+0

, поэтому я прокомментировал все, кроме материалов для stmt1 и stmt2, и до сих пор ничего. Я делаю SELECT * из действий, и получаю этот вывод - mysql> SELECT * FROM activities; Пустой набор (0.00 сек) – praks5432

Смежные вопросы