zoukankan      html  css  js  c++  java
  • 安装gcc 使用 go-sqlite3 Golang 链接 sqlite3

     gcc 安装非常重要,golang的好多项目大部分都是go c混编。

    先安装gcc,需要FQ,为了方便使用我上传到百度云了。

    链接:https://pan.baidu.com/s/17NbFOizhext_YINOz-NU7A
    提取码:3jb8

    安装步骤  百度云下载,解压到你喜欢的磁盘。

    下面就是添加环境变量,

    添加新变量  MinGW , 这个名字是我自己把解压的改了,解压后是 名字是 mingw64,

    然后把变量名加到 Path , %MinGW%in

     

    测试是否安装成功

    gcc -V
    

     成功了 就是这样

     下面就是正式开始使用 go-sqlite3 ,我们不用下载和安装sqlite3, 这个库就是嵌入式的数据库。

    非常建议大家使用 go mod  比go get 什么省事太多,go get 遇到被墙,FQ也不行,/x/ 包从goole 迁到 github 了 但是内部路径没有改,mod 有一个开源项目

    https://www.goproxy.io/ 就是这个项目 可以看一下,省好多时间。

    怎么 使用 mod ,官网少了双引号,会报错,不知道为什么没有改。

    // powershell 下用这两个
    GO111MODULE=on
    
    GOPROXY="https://goproxy.io"
    

     开启代理后,直接在import 下写要引入的库,然后golad会提示红色,不用管。也可以按照编辑器说的做。

    但是建议

    import (
    	"database/sql"
    	_ "github.com/mattn/go-sqlite3"
    	"log"
    )
    

     

    这样一会就安装好,也添加到 go.sum  go.mod ,都2019 年了 使用 mod 喽。

    安装好以后下面是参考代码。只是做测试,以后扩展也方便。项目目录

    尽力 mvc 开发结构

    下面是个个文件的代码

    initSqlit.go

    package model
    
    import (
    	"database/sql"
    	_ "github.com/mattn/go-sqlite3"
    	"log"
    )
    
    type SQLiteDB struct {
    	Sqlite3 *sql.DB
    }
    
    var SQLITE *SQLiteDB
    
    func InitDB() {
    	SQLITE = &SQLiteDB{
    		Sqlite3: ConnectDB(),
    	}
    }
    func ConnectDB() *sql.DB {
    	db, err := sql.Open("sqlite3", "foo.db")
    	if err != nil {
    		log.Fatal("链接错误")
    	}
    
    	return db
    }
    

     sqlite3.go

    package repositories
    
    import (
    	"database/sql"
    	"fmt"
    	"leetcode/sqlite3_m/model"
    	"log"
    	"time"
    )
    
    func checkErr(err error) {
    	if err != nil {
    		fmt.Println("Prepare Error  ", err)
    	}
    }
    
    type RepositoriesSqlite struct {
    	sqlite *sql.DB
    }
    
    func NewRepositoriesSqlite() *RepositoriesSqlite {
    	return &RepositoriesSqlite{sqlite: model.SQLITE.Sqlite3}
    }
    
    // Ping sql
    func (r *RepositoriesSqlite) Ping() {
    	if err := r.sqlite.Ping(); err != nil {
    		log.Fatal(err)
    	}
    	fmt.Println("PING OK")
    }
    
    // 创建表
    func (r *RepositoriesSqlite) Create() {
    	sql := r.sqlite
    	sqlStmt := `
    	create table userinfo (username text , departname text , created text);
    	`
    	_, err := sql.Exec(sqlStmt)
    	checkErr(err)
    	//fmt.Println(f)
    }
    
    // 插入数据
    func (r *RepositoriesSqlite) Insert() {
    	sql := r.sqlite
    	stmt, err := sql.Prepare("INSERT INTO userinfo(username, departname, created) values(?,?,?)")
    	checkErr(err)
    	res, err := stmt.Exec("我的名字", "IEC118", time.Now())
    	checkErr(err)
    	_, err = res.LastInsertId()
    	checkErr(err)
    	//fmt.Println("ID  ...  ",id)
    }
    
    // 查询数据
    func (r *RepositoriesSqlite) Query() {
    	sql := r.sqlite
    	rows, err := sql.Query("SELECT * FROM userinfo")
    	checkErr(err)
    	for rows.Next() {
    		var username string
    		var department string
    		var created string
    		err = rows.Scan(&username, &department, &created)
    		checkErr(err)
    
    		fmt.Print(username, "  ")
    		fmt.Print(department, "  ")
    		fmt.Print(created, "  
    ")
    	}
    }
    
    // 删除数据
    
    func(r *RepositoriesSqlite) Delete() {
    	sql := r.sqlite
    	stmt,err := sql.Prepare("DELETE  FROM userinfo WHERE username = ?")
    	if err != nil {
    		log.Fatal(err)
    	}
    	result ,err :=stmt.Exec("astaxie")
    	affectNum, err := result.RowsAffected()
    	if err != nil {
    		log.Fatal(err)
    	}
    	fmt.Println("delete affect rows is ", affectNum)
    
    }
    
    // 数据更新
    
    func (r *RepositoriesSqlite) Update(){
    	sql := r.sqlite
    	stmt , err := sql.Prepare("UPDATE userinfo SET created = ? WHERE username = ?")
    	if err != nil{
    		log.Fatal(err)
    	}
    	result , err :=stmt.Exec("2016-09-7","我的名字")
    	affectNum, err := result.RowsAffected()
    	if err != nil {
    		log.Fatal(err)
    	}
    	fmt.Println("update affect rows is ", affectNum)
    }
    

     main.go

    package main
    
    import (
    	_ "github.com/mattn/go-sqlite3"
    	"leetcode/sqlite3_m/model"
    	"leetcode/sqlite3_m/repositories"
    )
    
    func main() {
    	model.InitDB()
    	s := repositories.NewRepositoriesSqlite()
    	s.Ping()
    	//s.Create()
    	//s.Insert()
    	//s.Delete()
    	//s.Update()
    	//s.Query()
    }
    

     没做测试,也不知道测试什么。

    大概就是这样,还有什么问题可以留言联系我。没毕业的学生,不对的地方,和我说一下,谢谢。

  • 相关阅读:
    树状数组
    LCA最近公共祖先
    ordered_set
    马拉车算法
    数论
    图论
    其他
    线段树
    序列自动机
    优先队列
  • 原文地址:https://www.cnblogs.com/Addoil/p/11136155.html
Copyright © 2011-2022 走看看