87 lines
2.9 KiB
Go
87 lines
2.9 KiB
Go
package main
|
|
|
|
import (
|
|
"database/sql"
|
|
"fmt"
|
|
"log"
|
|
"time"
|
|
|
|
_ "github.com/taosdata/driver-go/v3/taosSql"
|
|
)
|
|
|
|
func main() {
|
|
var taosDSN = "root:taosdata@tcp(localhost:6030)/"
|
|
db, err := sql.Open("taosSql", taosDSN)
|
|
if err != nil {
|
|
log.Fatalln("Failed to connect to " + taosDSN + ", ErrMessage: " + err.Error())
|
|
}
|
|
defer db.Close()
|
|
// ANCHOR: create_db_and_table
|
|
// create database
|
|
res, err := db.Exec("CREATE DATABASE IF NOT EXISTS power")
|
|
if err != nil {
|
|
log.Fatalln("Failed to create database power, ErrMessage: " + err.Error())
|
|
}
|
|
rowsAffected, err := res.RowsAffected()
|
|
if err != nil {
|
|
log.Fatalln("Failed to get create database rowsAffected, ErrMessage: " + err.Error())
|
|
}
|
|
// you can check rowsAffected here
|
|
fmt.Println("Create database power successfully, rowsAffected: ", rowsAffected)
|
|
// create table
|
|
res, err = db.Exec("CREATE STABLE IF NOT EXISTS power.meters (ts TIMESTAMP, current FLOAT, voltage INT, phase FLOAT) TAGS (groupId INT, location BINARY(24))")
|
|
if err != nil {
|
|
log.Fatalln("Failed to create stable meters, ErrMessage: " + err.Error())
|
|
}
|
|
rowsAffected, err = res.RowsAffected()
|
|
if err != nil {
|
|
log.Fatalln("Failed to get create stable rowsAffected, ErrMessage: " + err.Error())
|
|
}
|
|
// you can check rowsAffected here
|
|
fmt.Println("Create stable power.meters successfully, rowsAffected:", rowsAffected)
|
|
// ANCHOR_END: create_db_and_table
|
|
// ANCHOR: insert_data
|
|
// insert data, please make sure the database and table are created before
|
|
insertQuery := "INSERT INTO " +
|
|
"power.d1001 USING power.meters TAGS(2,'California.SanFrancisco') " +
|
|
"VALUES " +
|
|
"(NOW + 1a, 10.30000, 219, 0.31000) " +
|
|
"(NOW + 2a, 12.60000, 218, 0.33000) " +
|
|
"(NOW + 3a, 12.30000, 221, 0.31000) " +
|
|
"power.d1002 USING power.meters TAGS(3, 'California.SanFrancisco') " +
|
|
"VALUES " +
|
|
"(NOW + 1a, 10.30000, 218, 0.25000) "
|
|
res, err = db.Exec(insertQuery)
|
|
if err != nil {
|
|
log.Fatalf("Failed to insert data to power.meters, sql: %s, ErrMessage: %s\n", insertQuery, err.Error())
|
|
}
|
|
rowsAffected, err = res.RowsAffected()
|
|
if err != nil {
|
|
log.Fatalf("Failed to get insert rowsAffected, sql: %s, ErrMessage: %s\n", insertQuery, err.Error())
|
|
}
|
|
// you can check affectedRows here
|
|
fmt.Printf("Successfully inserted %d rows to power.meters.\n", rowsAffected)
|
|
// ANCHOR_END: insert_data
|
|
// ANCHOR: select_data
|
|
// query data, make sure the database and table are created before
|
|
sql := "SELECT ts, current, location FROM power.meters limit 100"
|
|
rows, err := db.Query(sql)
|
|
if err != nil {
|
|
log.Fatalf("Failed to query data from power.meters, sql: %s, ErrMessage: %s\n", sql, err.Error())
|
|
}
|
|
for rows.Next() {
|
|
// Add your data processing logic here
|
|
var (
|
|
ts time.Time
|
|
current float32
|
|
location string
|
|
)
|
|
err = rows.Scan(&ts, ¤t, &location)
|
|
if err != nil {
|
|
log.Fatalf("Failed to scan data, sql: %s, ErrMessage: %s\n", sql, err)
|
|
}
|
|
fmt.Printf("ts: %s, current: %f, location: %s\n", ts, current, location)
|
|
}
|
|
// ANCHOR_END: select_data
|
|
}
|