2016-11-28 4 views
-4

私はバックエンドでGoLangを、データベースとしてPostgreSQLを使用しています。 GoとPostgreSQLデータベース接続が初めてです。私はBeegoをバックエンドとして使用しています。 Golang database/sqlパッケージとlib/pqを使用して、JSONタイプのフィールドの1つでテーブルを作成したいとします。それ私が何をすべきかGoLangを使用してjsonタイプフィールドを持つPostgresにテーブルを作成します

これは私のこれは私に次のエラー

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

を投げている。しかし、私はそこにあるテーブルから何かを選択するクエリを使用していたときに

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() 
    } 

} 

テーブルクエリの作成テーブル作成クエリや他の実行されたSQLコードに問題はありません。私はどんな助けにも感謝します。ありがとう!

+0

コードスニペットを簡略化するか、エラーを発生させる具体的な行を入力してください。アプリケーションをすべてビルドしてデバッグすることはできません。 – I159

+0

もう1つ重要なことは - あなたのエラーはSQLやあなたが使っているライブラリとは関係がないことです。これはちょうど間違ったポインタ操作です。 – I159

+0

sorry.beginner on stack overflow。あなたのアドバイスをありがとう - 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) 

あなたはdaytypeの列にDEFAULTを欠場。また、func leave()は応答を送信する前に完全に実行できるので、エラーを正しくキャッチしていません。エラーが見つかった場合はreturnを使用できます。

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

また、接続を作成していて、funcの最後に接続を終了していないとします。

関連する問題