GO API: Database Connection
client_db.go
student_db.go
client_db.go
package db
import (
"database/sql"
_ "github.com/lib/pq"
. "test.com/goapi/app/utils"
"sync"
"log"
)
var (
db *sql.DB
ConnOnce sync.Once
)
// create database connection
func GetDBConnection() *sql.DB {
var err error
ConnOnce.Do(func() {
db, err = sql.Open("postgres", "postgresql://"+COCKROACHDB_USERNAME_ENV+"@"+COCKROACHDB_HOST_ENV+":"+COCKROACHDB_PORT_ENV+
"/"+COCKROACHDB_DB_ENV+"?"+"sslmode=disable")
})
if err != nil {
log.Fatal("error connecting to the database: ", err)
}
return db
}
func ExecuteQuery(query string, args string) *sql.Rows{
db := GetDBConnection()
if args == "" {
rows, err := db.Query(query)
if err != nil {
log.Println("Error in executing query: ", err)
}
return rows
} else {
rows, err := db.Query(query, args)
if err != nil {
log.Println("Error in executing query: ", err)
}
return rows
}
}
func ExecuteCreateQuery(query string, args []interface{}) {
db := GetDBConnection()
_, err := db.Query(query, args...)
if err != nil {
log.Println("Error in executing query: ", err)
}
}
student_db.go
Please write comments if you find anything incorrect, or you want to share more information about the topic discussed above.package db import ( . "test.com/goapi/app/model" "database/sql" "log" ) func parseRow(rows *sql.Rows) []Student { var students []Student for rows.Next() { var ( rollNumber int name string batch string branch string ) if err := rows.Scan(&rollNumber, &name, &batch, &branch); err != nil { log.Println("error in parsing ", err) } student := Student{ RollNumber: rollNumber, Name: name, Batch: batch, Branch: branch, } students = append(students, student) } return students } func GetStudentsDB() []Student{ query := "SELECT * FROM student_tlb" rows := ExecuteQuery(query, "") students := parseRow(rows) return students } func GetStudentDB(rollNumber string) Student{ query := "SELECT * FROM student_tlb WHERE roll_number = $1" rows := ExecuteQuery(query, rollNumber) students := parseRow(rows) return students[0] } func CreateStudentDB(student Student) { args := make([]interface{}, 4) args[0] = student.RollNumber args[1] = student.Name args[2] = student.Batch args[3] = student.Branch query := "INSERT INTO student_tlb (roll_number, name, batch, branch) VALUES($1, $2, $3, $4)" ExecuteCreateQuery(query, args) } func UpdateStudentDB(student Student) { args := make([]interface{}, 4) args[0] = student.Name args[1] = student.Batch args[2] = student.Branch args[3] = student.RollNumber query := "UPDATE student_tlb SET (name, batch, branch) = ($1, $2, $3) WHERE roll_number = $4" ExecuteCreateQuery(query, args) } func DeleteStudentDB(rollNumber string) { query := "DELETE FROM student_tlb WHERE roll_number = $1" ExecuteQuery(query, rollNumber) }
Comments
Post a Comment