SQLite 的介绍与安装
SQLite 简介
SQLite 是一个开放源代码的数据库引擎,具有独立,无服务器依赖,零配置,支持事务等特点,SQLite 一直以轻量级为特点,在移动和嵌入式设备上使用广泛,官方称其是世界上部署最广泛的数据库引擎。
SQLite 是一个进程内的库,实现了自给自足的、无服务器的、零配置的、事务性的 SQL 数据库引擎。
SQLite 的安装
sudo apt update
sudo apt-cache search sqlite
sudo apt install sqlite3 -y
SQLite version 3.27.2 2020-02-20 14:08:51
Enter ".help" for usage hints.
Connected to a transient in-memory database.
Use ".open FILENAME" to reopen on a persistent database.
sqlite>
curl https://www.sqlite.org/2022/sqlite-tools-linux-x86-3400100.zip
或
wget https://www.sqlite.org/2022/sqlite-autoconf-3400100.tar.gz
tar -zxvf https://www.sqlite.org/2022/sqlite-autoconf-3400100.tar.gz
mv sqlite-autoconf-3400100 sqlite
mv sqlite /usr/local/
./configure
make
- 安装 SQLite ,输入如下命令:
make install
SQLite version 3.27.2 2020-02-20 14:08:51
Enter ".help" for usage hints.
Connected to a transient in-memory database.
Use ".open FILENAME" to reopen on a persistent database.
sqlite>
图形化管理界面 DB Browser for SQLite 安装与使用
sudo apt-get install sqlitebrowser -y
sqlitebrowser &
- 软件的使用
参考 如何在 Linux 上使用 DB Browser for SQLite|应用程序|sql|sqlite_网易订阅
SQLite 基础入门
SQLite 基本命令说明
命令 | 含义 |
---|---|
.schema |
查看表的结构 |
.quit |
退出数据库 |
.exit |
退出数据库 |
.help |
查看帮助信息 |
.databases |
查看数据库 |
.tables |
显示数据库中所有的表的表名 |
.open |
创建数据库 |
数据库管理命令
sqlite3 test.db -- 创建数据库
.open test.db -- 创建数据库
.databases -- 查看数据库
.quit -- 退出
sqlite3 testDB.db .dump > testDB.sql -- 导出数据库到txt文件
sqlite3 testDB.db < testDB.sql -- txt文件导入数据库
ATTACH DATABASE 'test.db' as 'TEST'; -- 附加数据库
DETACH DATABASE 'TEST'; -- 分离数据库
数据表操作
- 创建数据表
CREATE TABLE database_name.table_name(
column1 datatype PRIMARY KEY(one or more columns),
column2 datatype,
column3 datatype,
.....
columnN datatype,
);
- 查看数据表
.tables
.schema COMPANY
- 删除数据表
DROP TABLE database_name.table_name;
DROP TABLE COMPANY;
数据表操作示例
CREATE TABLE COMPANY(
ID INT PRIMARY KEY NOT NULL,
NAME TEXT NOT NULL,
AGE INT NOT NULL,
ADDRESS CHAR(50),
SALARY REAL
);
数据库语句
- 新增数据
INSERT INTO TABLE_NAME [(column1, column2, column3,...columnN)]
VALUES (value1, value2, value3,...valueN);
INSERT INTO TABLE_NAME VALUES (value1,value2,value3,...valueN);
- 查询数据
SELECT column1, column2, columnN FROM table_name;
.header on
.mode column
- 修改数据
UPDATE table_name SET column1 = value1, column2 = value2...., columnN = valueN WHERE [condition];
- 删除数据
DELETE FROM table_name WHERE [condition];
数据库语句示例
INSERT INTO COMPANY (ID,NAME,AGE,ADDRESS,SALARY)
VALUES (6, 'Kim', 22, 'South-Hall', 45000.00 );
INSERT INTO COMPANY VALUES (7, 'James', 24, 'Houston', 10000.00 );
SELECT * FROM COMPANY;
SELECT ID, NAME, SALARY FROM COMPANY;
UPDATE COMPANY SET ADDRESS = 'Texas' WHERE ID = 6;
UPDATE COMPANY SET ADDRESS = 'Texas', SALARY = 20000.00;
DELETE FROM COMPANY WHERE ID = 7;
DELETE FROM COMPANY;
Go 访问 SQLite
获取访问接口
- 安装驱动,输入如下命令:
go get -u github.com/mattn/go-sqlite3
import (
_ "github.com/mattn/go-sqlite3"
)
Go 操作 SQLite
启动 SQLite ,创建数据库和数据表 user
,输入如下命令:
CREATE TABLE `user` (
`uid` INT PRIMARY KEY NOT NULL,
`name` TEXT NOT NULL,
`phone` CHAR(50)
);
INSERT INTO `user` (`uid`, `name`, `phone`) VALUES (15, 'yx', '138888888');
INSERT INTO `user` (`uid`, `name`, `phone`) VALUES (111, 'yx', '138888888');
package main
import (
"database/sql"
_ "github.com/mattn/go-sqlite3"
"log"
)
func main() {
db, err := sql.Open("sqlite3", "/home/Tao/test.db")
if err != nil {
log.Fatal(err)
}
defer db.Close()
}
- 导出数据库数据,输入如下命令:
sqlite3 test.db > test.sql
package main
import (
"database/sql"
"fmt"
_ "github.com/mattn/go-sqlite3"
)
var db *sql.DB
// 定义一个初始化数据库的函数
func initDB() (err error) {
//连接数据库
db, err = sql.Open("sqlite3", "/home/Tao/test.db")
if err != nil {
return err
}
// 尝试与数据库建立连接(校验dsn是否正确)
err = db.Ping()
if err != nil {
return err
}
return nil
}
func main() {
if err := initDB(); err != nil {
fmt.Printf("Initing the db is failed, err: %vn", err)
} else {
fmt.Plintln("Connecting the db is ok!")
}
}
func (db *DB) SetMaxOpenConns(n int)
func (db *DB) SetMaxOpenConns(n int)
示例
CREATE TABLE `userinfo` (
`uid` INTEGER PRIMARY KEY AUTOINCREMENT,
`username` VARCHAR(64) NULL,
`departname` VARCHAR(64) NULL,
`created` DATE NULL
);
CREATE TABLE `userdetail` (
`uid` INT(10) NULL,
`intro` TEXT NULL,
`profile` TEXT NULL,
PRIMARY KEY (`uid`)
);
编写一个 Go 程序实现对该数据库表中数据的增删改查操作,该程序的具体代码如下:
package main
import (
"database/sql"
"fmt"
"time"
_ "github.com/mattn/go-sqlite3"
)
func main() {
db, err := sql.Open("sqlite3", "./foo.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 time.Time
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)
}
}
可以看到上面的程序·代码和 MySQL 操作的代码几乎是一模一样的,唯一改变的就是导入的驱动改变了,然后调用sql.Open()
方法是采用了 SQLite 的方式打开。
SQL查询
func (db *DB) QueryRow(query string, args ...interface{}) *Row
package main
import (
"database/sql"
"fmt"
_ "github.com/mattn/go-sqlite3"
)
var db *sql.DB
// 定义一个初始化数据库的函数
func initDB() (err error) {
//连接数据库
db, err = sql.Open("sqlite3", "/home/Tao/test.db")
if err != nil {
return err
}
// 尝试与数据库建立连接(校验dsn是否正确)
err = db.Ping()
if err != nil {
return err
}
return nil
}
type User struct {
Uid int
Name string
Phone string
}
func queryRow() {
var u User;
if err := db.QueryRow("select uid, name, phone from user where uid=?;", 111).Scan(&u.Uid, &u.Name, &u.Phone); err != nil {
fmt.Printf("scan failed, err:%vn", err)
return
}
fmt.Printf("uid:%d name:%s phone:%sn", u.Uid, u.Name, u.Phone)
}
func main() {
if err := initDB(); err != nil {
fmt.Printf("init db failed, err: %vn", err)
}
queryRow()
}
func (db *DB) Query(query string, args ...interface{}) (*Rows, error)
package main
import (
"database/sql"
"fmt"
_ "github.com/mattn/go-sqlite3"
)
var db *sql.DB
// 定义一个初始化数据库的函数
func initDB() (err error) {
//连接数据库
db, err = sql.Open("sqlite3", "/home/Tao/test.db")
if err != nil {
return err
}
// 尝试与数据库建立连接(校验dsn是否正确)
err = db.Ping()
if err != nil {
return err
}
return nil
}
type User struct {
Uid int
Name string
Phone string
}
func queryMultiRow() {
var u User;
rows, err := db.Query("select uid, name, phone from user where uid>?;", 0)
if err != nil {
fmt.Printf("query failed, err:%vn", err)
return
}
defer rows.Close()
for rows.Next() {
err := rows.Scan(&u.Uid, &u.Name, &u.Phone)
if err != nil {
fmt.Printf("scan failed, err:%vn", err)
return
}
fmt.Printf("uid:%d name:%s phone:%sn", u.Uid, u.Name, u.Phone)
}
}
func main() {
if err := initDB(); err != nil {
fmt.Printf("init db failed, err: %vn", err)
}
queryMultiRow()
}
func (db *DB) Exec(query string, args ...interface{}) (Result, error)
func (db *DB) Exec(query string, args ...interface{}) (Result, error)
package main
import (
"database/sql"
"fmt"
_ "github.com/mattn/go-sqlite3"
)
var db *sql.DB
// 定义一个初始化数据库的函数
func initDB() (err error) {
//连接数据库
db, err = sql.Open("sqlite3", "/home/Tao/test.db")
if err != nil {
return err
}
// 尝试与数据库建立连接(校验dsn是否正确)
err = db.Ping()
if err != nil {
return err
}
return nil
}
//插入数据
func insertRow() {
ret, err := db.Exec("insert into user(uid, name, phone) values(?, ?, ?);", 12, "ml", "15906693677")
if err != nil {
fmt.Printf("insert failed, err:%vn", err)
return
}
uid, err := ret.LastInsertId()
if err != nil {
fmt.Printf("get lastinsert ID failed, err:%vn", err)
return
}
fmt.Printf("insert success, the id is %d.n", uid)
}
//更新数据
func updateRow() {
ret, err := db.Exec("update user set name=? where uid=?;", "tt", 12)
if err != nil {
fmt.Printf("update failed, err:%vn", err)
return
}
n, err := ret.RowsAffected()
if err != nil {
fmt.Printf("get lastinsert ID failed, err:%vn", err)
return
}
fmt.Printf("update success, affected rows:%dn", n)
}
//删除数据
func deleteRow() {
ret, err := db.Exec("delete from user where uid=?;", 12)
if err != nil {
fmt.Printf("delete failed, err:%vn", err)
return
}
n, err := ret.RowsAffected()
if err != nil {
fmt.Printf("get lastinsert ID failed, err:%vn", err)
return
}
fmt.Printf("delete success, affected rows:%dn", n)
}
func main() {
if err := initDB(); err != nil {
fmt.Printf("init db failed, err: %vn", err)
}
insertRow()
updateRow()
deleteRow()
}
原文地址:https://blog.csdn.net/qq_46457076/article/details/128819632
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.7code.cn/show_35712.html
如若内容造成侵权/违法违规/事实不符,请联系代码007邮箱:suwngjj01@126.com进行投诉反馈,一经查实,立即删除!
声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。