文件最后提交记录最后更新时间
3 年前
3 年前
3 年前
3 年前
3 年前
3 年前
README.md

RDS For SQLServer

Microsoft SQL Server是老牌商用级数据库,成熟的企业级架构,轻松应对各种复杂环境。一站式部署、保障关键运维服务,大量降低人力成本。根据华为国际化安全标准,打造安全稳定的数据库运行环境。被广泛应用于政府、金融、医疗、教育和游戏等领域。

云数据库 RDS for SQL Server具有稳定可靠、安全运行、弹性伸缩、轻松管理和经济实用等特点。拥有高可用架构、数据安全保障和故障秒级恢复功能,提供了灵活的备份方案。

环境准备

本节内容将为您演示如何使用以 Go 语言编写的代码连接到 RDS for SQL Server。 同时还介绍了在数据库中查询、插入、更新和删除数据。

项目地址:RDS for SQLServer samples

环境软件

配置步骤

Go

Go环境配置

Goland

IDE安装

RDS for SQLServer

购买RDS for SQLServer实例

代码连接

  1. 购买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
    }
    
  2. 云数据库参数保存在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:数据库密码

基础操作

  1. 插入数据

    //插入数据
    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
    }
    
  2. 更新数据

    //更新数据
    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
    }
    
  3. 删除数据

    //删除数据
    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
    }
    
    
  4. 查询数据

    //查询多条数据
    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
    }