• Go入门笔记-22 访问sqlite3数据库


    1、linux下创建sqlite表

    sudo apt-get install sqlite 
    sudo apt-get install libsqlite3-dev
    

    2、执行sqlite3 test.db,然后输入建表语句,注意版本,如果sqlite test.db则创建的是2.0的数据库,驱动不一致将无法打开。

    CREATE TABLE 'userinfo' (
        'uid' INTEGER PRIMARY KEY AUTOINCREMENT,
        'username' VARCHAR(64) NULL,
        'departname' VARCHAR(64) NULL,
        'created' DATE NULL
    );
    insert into userinfo values(null,'zs','a',null);
    
    select * from userinfo;
    

    3、执行结果

    Ctrl+D退出查询模式

     4、go代码

    package main
    
    import (
    	"database/sql"
    	"fmt"
    
    	_ "github.com/mattn/go-sqlite3"
    )
    
    func main() {
    	db, err := sql.Open("sqlite3", "./test.db")
    	checkErr(err)
    
    	//插入数据
    	stmt, err := db.Prepare("INSERT INTO userinfo(username, departname, created) values(?,?,?)")
    	checkErr(err)
    
    	res, err := stmt.Exec("astaxie", "研发部门", "2012-12-09")
    	checkErr(err)
    
    	id, err := res.LastInsertId()
    	checkErr(err)
    
    	fmt.Println(id)
    	//更新数据
    	stmt, err = db.Prepare("update userinfo set username=? where uid=?")
    	checkErr(err)
    
    	res, err = stmt.Exec("astaxieupdate", id)
    	checkErr(err)
    
    	affect, err := res.RowsAffected()
    	checkErr(err)
    
    	fmt.Println(affect)
    
    	//查询数据
    	rows, err := db.Query("SELECT * FROM userinfo")
    	checkErr(err)
    
    	for rows.Next() {
    		var uid int
    		var username string
    		var department string
    		var created string
    		err = rows.Scan(&uid, &username, &department, &created)
    		checkErr(err)
    		fmt.Println(uid)
    		fmt.Println(username)
    		fmt.Println(department)
    		fmt.Println(created)
    	}
    
    	//删除数据
    	stmt, err = db.Prepare("delete from userinfo where uid=?")
    	checkErr(err)
    
    	res, err = stmt.Exec(id)
    	checkErr(err)
    
    	affect, err = res.RowsAffected()
    	checkErr(err)
    
    	fmt.Println(affect)
    
    	db.Close()
    
    }
    
    func checkErr(err error) {
    	if err != nil {
    		panic(err)
    	}
    }
    

      

    包前带下划线作用

    当导入一个包时,该包下的文件里所有init()函数都会被执行,然而,有些时候我们并不需要把整个包都导入进来,仅仅是是希望它执行init()函数而已。这个时候就可以使用 import _ 引用该包。即使用【import _ 包路径】只是引用该包,仅仅是为了调用init()函数,所以无法通过包名来调用包中的其他函数,因为 Go 语言的数据库驱动都会在 init 函数中注册自己,所以我们只需要进行上述操作即可;否则的话,Go 语言的编译器会提示导入了包却没有使用的错误。
    5、输出结果

     代码参考:https://www.cnblogs.com/lvdongjie/p/9555851.html

      

      

      

      

    本博客是个人工作中记录,遇到问题可以互相探讨,没有遇到的问题可能没有时间去特意研究,勿扰。
    另外建了几个QQ技术群:
    2、全栈技术群:616945527,加群口令abc123
    2、硬件嵌入式开发: 75764412
    3、Go语言交流群:9924600

    闲置域名www.nsxz.com出售(等宽等高字符四字域名)。
  • 相关阅读:
    SSL/TLS原理详解
    HTTPS 为什么更安全,先看这些
    浏览器缓存策略
    HTTPS的中那些加密算法
    双飞翼圣杯布局
    Bootstrap中container与container-fluid的区别
    连接无线设备——与Wi-Fi直接连接
    Android网络通信之WiFi Direct
    【Android】 Android-wifi 直连 wifi direct wifi p2p
    django 过滤器 、日期格式化参数
  • 原文地址:https://www.cnblogs.com/zhaogaojian/p/15165771.html
Copyright © 2020-2023  润新知