zoukankan      html  css  js  c++  java
  • 010-Go 操作PostgreSQL数据库2

    1:sql脚本

    create table post(
        id    serial primary key,
        content    text,
        author    varchar(100)
    )

    2:post.go

    package post
    
    import(
    	"fmt"
    	"database/sql"
    	_"github.com/lib/pq"
    )
    
    const(
        host = "192.168.72.128"
        port = 5432
        user = "test"
        password = "test"
        dbname = "testdb"
    )
    
    type Post struct{
    	ID		int
    	Content string
    	Author	string
    }
    
    var Db *sql.DB
    
    func init(){
    	var err error
    	
    	psqlInfo := fmt.Sprintf("host=%s port=%d user=%s "+
    		"password=%s dbname=%s sslmode=disable",host, port, user, password, dbname)
    
    	Db, err = sql.Open("postgres", psqlInfo)
    	if err != nil{
    		panic(err)
    	}
    }
    
    func (post *Post) GetPosts(limit int) (posts []Post, err error){
    	sql := "select id,content,author from post limit $1";
    	
    	rows, err := Db.Query(sql, limit)
    	if err != nil{
    		return
    	}
    
    	defer rows.Close()
    
    	for rows.Next(){
    		post := Post{}
    		err = rows.Scan(&post.ID, &post.Content, &post.Author)
    		if err != nil{
    			return
    		}
    		posts = append(posts, post)
    	}
    	
    	return
    }
    
    func (p *Post) GetPost(id int) (post Post, err error){
    	post = Post{}
    
    	sql := "select id,content,author from post where id=$1"
    
    	err = Db.QueryRow(sql, id).Scan(&post.ID, &post.Content, &post.Author)
    
    	return
    }
    
    func (post *Post) AddPost() (err error){
    	sql := "insert into post(content,author) values($1,$2) returning id"
    
    	stmt, err := Db.Prepare(sql)
    	if err != nil{
    		return
    	}
    
    	defer stmt.Close()
    
    	err = stmt.QueryRow(post.Content, post.Author).Scan(&post.ID)
    
    	return
    }
    
    func (post *Post) DelPost()(err error){
    	sql := "delete from post where id=$1"
    	_,err = Db.Exec(sql, post.ID)
    	return
    }
    
    func (post *Post) EditPost() (err error){
    	sql := "update post set content=$1 where id=$2"
    	_,err = Db.Exec(sql, post.Content, post.ID)
    	return
    }
    

    3:main.go

    package main
    
    import(
    	"fmt"
    	"Chapter02/post"
    )
    
    func main(){
    	p := post.Post{
    		Content: "Hello java!",
    		Author: "王五",
    	}
    
    	fmt.Println(p)
    
    	err := p.AddPost()
    	if err != nil{
    		panic(err)
    	}
    
    	fmt.Println(p)
    
    	var posts = []post.Post{}
    	posts, err = p.GetPosts(10)
    	if err != nil{
    		panic(err)
    	}
    	for _,post := range posts{
    		fmt.Printf("ID:%d,Content:%s,Author:%s
    ", post.ID, post.Content, post.Author)
    	}
    
    	pp, err := p.GetPost(p.ID)
    	if err != nil{
    		panic(err)
    	}
    	fmt.Println(pp)
    }
    

      

  • 相关阅读:
    聊聊部署在docker容器里面的springboot项目如何启用arthas
    如何低侵入的记录调用日志
    聊聊如何在spring事务中正确进行远程调用
    聊聊因不恰当使用alibaba sentinel而踩到的坑
    SqlServer行转列关键字——Pivot
    [转] 为后人挖坑指南
    动态加载js并调用其中指定名称方法
    Html网页模态居中弹窗
    SqlServer 要了解死锁必须学会制造死锁
    SqlServer中的(分区)表文件组
  • 原文地址:https://www.cnblogs.com/yshyee/p/9141853.html
Copyright © 2011-2022 走看看