From f67d00d6b86f3a22ccc3b270e0b7f03e55aee264 Mon Sep 17 00:00:00 2001 From: w1ndyb0y Date: Mon, 21 Dec 2020 17:58:55 +0800 Subject: [PATCH] add insert new telegram --- utils/sqlite.go | 77 ++++++++++++++++++++++++++++++++++++------------- 1 file changed, 57 insertions(+), 20 deletions(-) diff --git a/utils/sqlite.go b/utils/sqlite.go index fd68096..90753d1 100644 --- a/utils/sqlite.go +++ b/utils/sqlite.go @@ -5,11 +5,12 @@ import ( _ "github.com/mattn/go-sqlite3" "log" "os" + "time" ) const ( DbDriver = "sqlite3" - TableCreate =` + TableCreate = ` create table IF NOT EXISTS telegram ( [tele_id] INTEGER PRIMARY KEY AUTOINCREMENT, [tele_recv_time] TIMESTAMP NOT NULL DEFAULT (datetime('now', 'localtime')), @@ -17,32 +18,68 @@ const ( [tele_text] TEXT NOT NULL ) ` -) -var ( - db *sql.DB + TableInsert = "insert into telegram (tele_text) values (?)" ) -func getDb(file string, init bool) (*sql.DB, error) { - log.Println("init database ", init) - if init { - log.Println("remove database file", file) - os.Remove(file) +var ( + dbFile string + initTable bool + initialized bool + isWriting bool +) + +func getDb() *sql.DB { + log.Println("init database ", initTable) + if initTable && !initialized { + log.Println("remove database file", dbFile) + os.Remove(dbFile) } - db, err := sql.Open(DbDriver, file) - defer db.Close() + db, err := sql.Open(DbDriver, dbFile) if err != nil { log.Fatal("error in open database ", err) } - _, err = db.Exec(TableCreate) - if err != nil { - log.Fatal("error in create telegram table", err) - } - log.Println("database ", db, " opened") - return db, nil + return db } func InitDb(file string, init bool) error { + dbFile = file + initTable = init var dbErr error - db, dbErr = getDb(file, init) - return dbErr -} \ No newline at end of file + db := getDb() + defer db.Close() + _, dbErr = db.Exec(TableCreate) + if dbErr != nil { + log.Fatal("error in create telegram table", dbErr) + } + log.Println("database ", db, " initialized") + initialized = true + return nil +} + +func InsertTelegram(teleString string) { + count := 0 + for isWriting && count < 5 { + log.Println("waiting for write ") + time.Sleep(3 * time.Second) + count++ + } + if count >= 5 { + log.Fatalln("database locked") + } + isWriting = true + db := getDb() + defer db.Close() + stmt, err := db.Prepare(TableInsert) + if err != nil { + log.Fatal(err) + } + defer stmt.Close() + result, err := stmt.Exec(teleString) + id, _ := result.LastInsertId() + if err != nil { + isWriting = false + log.Fatalln("error in write telegram") + } + log.Println("telegram insert ", id) + isWriting = false +}