Sqlite GO查询不定量条数据

要在GO中使用Sqlite,下面两个包是必须的。

import {
	"database/sql"
    _"github.com/mattn/go-sqlite3"
}

db,err:=sql.Open(“sqlite3”, dbname)
即可打开数据库,dbname是数据库文件的地址.

//打开数据库
db, err := sql.Open("sqlite3", dbname)
//
//创建表
sqlTable := `
	CREATE TABLE IF NOT EXISTS TABLENAME (
   	"ID" INTEGER PRIMARY KEY AUTOINCREMENT,
   	"HASHVALUE" BLOB NOT NULL
	);`
//执行创建命令
_, err := db.Exec(sqlTable)
//插入数据
func (mydb *MYDB) addToDataBase(hashValue [][]byte){
	stmt, err := mydb.db.Prepare("INSERT INTO MYTABLE(HASHVALUE)  values(?)")
	checkErr(err)
	// 显示开启事务,提高插入效率
	mydb.db.Exec("BEGIN ")
	for _,item:=range hashValue{
		//执行插入
		_, err := stmt.Exec(item)
		checkErr(err)
	}
	// 提交事务
	mmr.db.Exec("COMMIT ")
}


一次性查询不定量的数据。

//查询数据
//一般的查询语句db.Query("SELECT id FROM TABLE WHERE id in (?,?,?)",v1,v2,v3)
//写死了只能查询固定条数据;如果需要查询十几条,几百条,上千条,难不成写一堆查询语句再去选.
//下面的查询语句能够一次性从数据库查询n条数据;
//关键点有两个;
//①构造查询语句的(?,?,?,...,?)至任意长度
//②观察上面的待查询值v1,v2,v3是“散装的”,所以你不能传递一个数组进去;
//slice...    这三个点可以将数组打散,把里面的每一元素提出来
func(mydb *MYDB) MutiQuery(ids[] uint64) map[uint64][]byte {
	//ids必须是升序的;因为数据库查询的返回是按序返回的,否则无法对应id和值
	var hash []byte
	result := make(map[uint64][]byte)
	var icount uint64 =0
	
	//构造查询命令
	s:="SELECT HASHVALUE FROM TABLE WHERE id in "
	s+="("
	//这个函数效率高,比单纯+="?,"要快
	s+=strings.Repeat("?,", len(ids)-1)
	s+="?)"
	//ids... 把切片ids拆开;重点
	rows,err:=mmr.db.Query(s,ids...)
	
	
	checkErr(err)
	for rows.Next() {
		err = rows.Scan(&hash)
		checkErr(err)
		t := ids[icount]
		result[t] = hash
	}
	return result
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值