RDS For SQLServer
Microsoft SQL Server是老牌商用级数据库,成熟的企业级架构,轻松应对各种复杂环境。一站式部署、保障关键运维服务,大量降低人力成本。根据华为国际化安全标准,打造安全稳定的数据库运行环境。被广泛应用于政府、金融、医疗、教育和游戏等领域。
云数据库 RDS for SQL Server具有稳定可靠、安全运行、弹性伸缩、轻松管理和经济实用等特点。拥有高可用架构、数据安全保障和故障秒级恢复功能,提供了灵活的备份方案。
环境准备
本节内容将为您演示如何使用以 Go 语言编写的代码连接到 RDS for SQL Server。 同时还介绍了在数据库中查询、插入、更新和删除数据。
项目地址:RDS for SQLServer samples
代码连接
-
购买RDS for PostgreSQL实例后,可通过三种连接方式连接实例,你可根据需要选择。Go代码连接方式如下
// 定义一个初始化数据库的函数 func InitDB() (err error) { // DSN:Data Source Name dsn, err := getDSN() if err != nil { return } Db, err = sql.Open("sqlserver", dsn) if err != nil { return errors.Wrap(err, "ERR: fail to open sqlserver") } // 尝试与数据库建立连接(校验dsn是否正确) err = Db.Ping() if err != nil { return errors.Wrap(err, "ERR: fail to connect db") } Db.SetMaxOpenConns(10) Db.SetMaxIdleConns(2) return } -
云数据库参数保存在yaml文件中,关键代码如下:
func getDSN() (dsn string, err error) { config, err := GetConfig() if err != nil { return } user := config.User password := config.Password host := config.Host port := config.Port dbname := config.Dbname dsn = fmt.Sprintf("server=%s;user id=%s;password=%s;port=%s;database=%s", host, user, password, port, dbname) return }字段说明,如下:
server:数据库IP或者域名(推荐使用内网)
port:数据库实例映射端口
database:数据库名
user:数据库用户名
password:数据库密码
基础操作
-
插入数据
//插入数据 func insert(db *sql.DB) error { var ID int64 ID = 9 smt, err := db.Prepare("INSERT INTO animals (name,age) VALUES (@name,@age) ;select isNull(SCOPE_IDENTITY(), -1);") if err != nil { return errors.Wrap(err, "ERR: fail to prepare") } defer smt.Close() err = smt.QueryRow(sql.Named("name", "狮子"), sql.Named("age", 12)).Scan(&ID) if err != nil { return errors.Wrap(err, "ERR: fail to insert") } fmt.Println("插入数据的id是", ID) return nil } -
更新数据
//更新数据 func update(db *sql.DB) error { _, err := db.Exec("update animals set name=@name,age=@age where id=@id", sql.Named("name", "兔子"), sql.Named("age", 7), sql.Named("id", 1)) if err != nil { return errors.Wrap(err, "ERR: fail to update") } return nil } -
删除数据
//删除数据 func delete(db *sql.DB) error { _, err := db.Exec("delete from animals where id=@id", sql.Named("id", 1)) if err != nil { return errors.Wrap(err, "ERR: fail to delete") } return nil } -
查询数据
//查询多条数据 func queryall(db *sql.DB) (int, error) { tsq := fmt.Sprintf("select id,name,age from animals;") rows, err := db.Query(tsq) if err != nil { return -1, errors.Wrap(err, "ERR: fail to query") } defer rows.Close() var count int for rows.Next() { an := animal{} err := rows.Scan(&an.id, &an.name, &an.age) if err != nil { return -1, errors.Wrap(err, "ERR: fail to query") } fmt.Println(an.id, an.name, an.age) count++ } return count, nil }