2016-11-28 30 views
-4

我在後端和PostgreSQL中使用GoLang作爲數據庫。我是Go與PostgreSQL數據庫連接的新手。我使用Beego作爲後端。我想使用Golang database/sql包和lib/pq創建一個包含JSON類型字段之一的表。這是我做使用GoLang在json類型字段中創建Postgres表格

這是我創建表查詢

createtable:= `CREATE TABLE apply_leave1 (
       leaveid serial PRIMARY KEY NOT NULL , 
       empid varchar(10) NOT NULL , 
       leavedays double precision NOT NULL DEFAULT 0 , 
       mdays double precision NOT NULL DEFAULT 0 , 
       leavetype varchar(20) NOT NULL DEFAULT '' , 
       daytype text NOT NULL '', 
       leavefrom timestamp with time zone NOT NULL, 
       leaveto timestamp with time zone NOT NULL, 
       applieddate timestamp with time zone NOT NULL, 
       leavestatus varchar(15) NOT NULL DEFAULT '' , 
       resultdate timestamp with time zone, 
       certificatestatus bool NOT NULL DEFAULT FALSE 
       certificate json NULL)` 



    conn := fmt.Sprintf(
     "user=%s password=%s dbname=%s sslmode=disable", 
     "postgres", 
     "root", 
     "employee") 
    log.Println("Creating a new connection: %v", conn) 

    db, err := sql.Open("postgres", conn) 

    stmt, err1 := db.Prepare(createtable) 

    defer stmt.Close() 
    _, err = stmt.Exec() 
    if err != nil { 
     fmt.Println(err.Error() 
    } 

} 

這是扔我下面的錯誤

Handler crashed with error runtime error: invalid memory address or nil pointer dereference

但是,當我使用的查詢選擇的東西從表中存在表創建查詢或其他執行的sql代碼沒有問題。我感謝任何幫助。謝謝!

+0

請簡化您的代碼片段或提供引發錯誤的具體行。我們不能構建所有的應用程序並進行調試。 – I159

+0

還有一件更重要的事情 - 您的錯誤與您使用的sql或任何庫無關。這只是一個錯誤的指針操作。 – I159

+0

對不起。堆棧溢出的開始。感謝您的建議 - I159。編輯代碼是精確的。我可以知道哪個指針是問題。感謝 –

回答

0

我覺得你的問題是用來創建表的無效的SQL,它應該是:

CREATE TABLE apply_leave1 (
    leaveid serial PRIMARY KEY NOT NULL , 
    empid varchar(10) NOT NULL , 
    leavedays double precision NOT NULL DEFAULT 0 , 
    mdays double precision NOT NULL DEFAULT 0 , 
    leavetype varchar(20) NOT NULL DEFAULT '' , 
    daytype text NOT NULL DEFAULT '', 
    leavefrom timestamp with time zone NOT NULL, 
    leaveto timestamp with time zone NOT NULL, 
    applieddate timestamp with time zone NOT NULL, 
    leavestatus varchar(15) NOT NULL DEFAULT '' , 
    resultdate timestamp with time zone, 
    certificatestatus bool NOT NULL DEFAULT FALSE 
    certificate json NULL) 

你錯過了DEFAULT爲daytype列。此外,你沒有正確捕捉錯誤,因爲函數leave()可以在發送響應之前完全執行。當您發現錯誤時,您可以使用return

db, err := sql.Open("postgres", conn) 
if err != nil { 
    fmt.Println(err.Error()) 
    e.Data["json"] = err.Error() 
    e.ServeJSON() 
    return 
} 

此外,你正在創建一個連接,並沒有在func結束時關閉它。

相關問題