當前位置:首頁 » 編程語言 » go語言sql
擴展閱讀
webinf下怎麼引入js 2023-08-31 21:54:13
堡壘機怎麼打開web 2023-08-31 21:54:11

go語言sql

發布時間: 2022-03-08 10:17:44

A. golang mysql Scan操作按順序取值問題

rows, err := db.Query("SELECT * FROM user")
checkErr(err)

for rows.Next() {
var userId int
var userName string
var userAge int
var userSex int
rows.Columns()
err = rows.Scan(&userId, &userName, &userAge, &userSex)
checkErr(err)
fmt.Println(userId)
fmt.Println(userName)
fmt.Println(userAge)
fmt.Println(userSex)
}

B. go語言postgresql資料庫驅動怎麼用

PostgreSQL和MySQL比較,它更加龐大一點,因為它是用來替代Oracle而設計的。所以在企業應用中採用PostgreSQL是一個明智的選擇。

現在MySQL被Oracle收購之後,有傳聞Oracle正在逐步的封閉MySQL,,鑒於此,將來我們也許會選擇PostgreSQL而不是MySQL作為項目的後端資料庫。

1、驅動
Go實現的支持PostgreSQL的驅動也很多,因為國外很多人在開發中使用了這個資料庫。

https://github.com/bmizerany/pq 支持database/sql驅動,純Go寫的
https://github.com/jbarham/gopgsqldriver 支持database/sql驅動,純Go寫的
https://github.com/lxn/go-pgsql 支持database/sql驅動,純Go寫的
在下面的示例中我採用了第一個驅動,因為它目前使用的人最多,在github上也比較活躍。

2、實例代碼
資料庫建表語句:

復制代碼
CREATE TABLE userinfo
(
uid serial NOT NULL,
username character varying(100) NOT NULL,
departname character varying(500) NOT NULL,
Created date,
CONSTRAINT userinfo_pkey PRIMARY KEY (uid)
)
WITH (OIDS=FALSE);

CREATE TABLE userdeatail
(
uid integer,
intro character varying(100),
profile character varying(100)
)
WITH(OIDS=FALSE);
復制代碼

看下面這個Go如何操作資料庫表數據:增刪改查

復制代碼
package main

import (
"database/sql"
"fmt"
_ "github.com/bmizerany/pq"
)

func main() {
db, err := sql.Open("postgres", "user=astaxie password=astaxie dbname=test sslmode=disable")
checkErr(err)

//插入數據
stmt, err := db.Prepare("INSERT INTO userinfo(username,departname,created) VALUES($1,$2,$3) RETURNING uid")
checkErr(err)

res, err := stmt.Exec("astaxie", "研發部門", "2012-12-09")
checkErr(err)

//pg不支持這個函數,因為他沒有類似MySQL的自增ID
id, err := res.LastInsertId()
checkErr(err)

fmt.Println(id)

//更新數據
stmt, err = db.Prepare("update userinfo set username=$1 where uid=$2")
checkErr(err)

res, err = stmt.Exec("astaxieupdate", 1)
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 string
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=$1")
checkErr(err)

res, err = stmt.Exec(1)
checkErr(err)

affect, err = res.RowsAffected()
checkErr(err)

fmt.Println(affect)

db.Close()

}

func checkErr(err error) {
if err != nil {
panic(err)
}
}
復制代碼

從上面的代碼我們可以看到,PostgreSQL是通過$1,$2這種方式來指定要傳遞的參數,而不是MySQL中的?,另外在sql.Open中的dsn信息的格式也與MySQL的驅動中的dsn格式不一樣,所以在使用時請注意它們的差異。

還有pg不支持LastInsertId函數,因為PostgreSQL內部沒有實現類似MySQL的自增ID返回,其他的代碼幾乎是一模一樣

C. go語言oracle需要獲取多行數據信息用什麼命令mysql的為db.Select(),oracle的為什麼

查看錶結構的:desc (表名);創建表的create語句就是在plsql上按住Ctrl鍵點擊該表名然後在點擊這個頁面右下角的「查看sql「按鈕就可以看到了 ;不使用工具的話,先把表導出來然後在導進去,導進去的時候使用show=y、log這兩個選項,就可以查看了!

D. golang 怎麼把sql.open 寫成全局的

Query1.Close;begin Query1.sql.Add('select count(*) as temp from pzk'); Query1.Open; d:=query1.fieldbyname('temp').asinteger; showmessage(inttostr(d)); {這里的D應是萌芽的結不雅} Query1.SQL.Clear

E. go語言中間怎樣執行sql語句

Transact-SQL 參考

GO
用信號通知 Microsoft® SQL Server™ 實用工具一批 Transact-SQL 語句的結束。

語法
GO

注釋
GO 不是 Transact-SQL 語句;而是可為 osql 和 isql 實用工具及 SQL Server 查詢分析器識別的命令。

SQL Server 實用工具將 GO 解釋為應將當前的 Transact-SQL 批處理語句發送給 SQL Server 的信號。當前批處理語句是自上一 GO 命令後輸入的所有語句,若是第一條 GO 命令,則是從特殊會話或腳本的開始處到這條 GO 命令之間的所有語句。SQL 查詢分析器和 osql 及 isql 命令提示實用工具執行 GO 命令的方式不同。有關更多信息,請參見 osql 實用工具、isql 實用工具和 SQL 查詢分析器。

GO 命令和Transact-SQL 語句不可在同一行上。但在 GO 命令行中可包含注釋。

用戶必須遵照使用批處理的規則。例如,在批處理中的第一條語句後執行任何存儲過程必須包含 EXECUTE 關鍵字。局部(用戶定義)變數的作用域限制在一個批處理中,不可在 GO 命令後引用。

USE pubs
GO
DECLARE @MyMsg VARCHAR(50)
SELECT @MyMsg = 'Hello, World.'
GO -- @MyMsg is not valid after this GO ends the batch.

-- Yields an error because @MyMsg not declared in this batch.
PRINT @MyMsg
GO

SELECT @@VERSION;
-- Yields an error: Must be EXEC sp_who if not first statement in
-- batch.
sp_who
GO

SQL Server 應用程序可將多條 Transact-SQL 語句作為一個批處理發給 SQL Server 去執行。在此批處理中的語句編譯成一個執行計劃。程序員在 SQL Server 實用工具中執行特定語句,或生成 Transact-SQL 語句腳本在 SQL Server 實用工具中運行,用 GO 來標識批處理的結束。

如果基於 DB-Library、ODBC 或 OLE DB APIs 的應用程序試圖執行 GO 命令時會收到語法錯誤。SQL Server 實用工具永遠不會向伺服器發送 GO 命令。

許可權
GO 是一個不需許可權的實用工具命令。可以由任何用戶執行。

示例
下面的示例創建兩個批處理。第一個批處理只包含一條 USE pubs 語句,用於設置資料庫上下文。剩下的語句使用了一個局部變數,因此所有的局部變數聲明必須在一個批處理中。這一點可通過在最後一條引用此變數的語句之後才使用 GO 命令來做到。

USE pubs
GO
DECLARE @NmbrAuthors int
SELECT @NmbrAuthors = COUNT(*)
FROM authors
PRINT 'The number of authors as of ' +
CAST(GETDATE() AS char(20)) + ' is ' +
CAST(@NmbrAuthors AS char (10))
GO

F. go語言裡面實現對資料庫的操作,用什麼包好

盡量不要使用ORM,簡單的資料庫交互是會省很多事。
但是一旦查詢語句越來越復雜,關聯表越來越多,當你發現正在使用的ORM框架做不到時再換其他框架代價會很大。為什麼有那麼多框架?就是沒有一個框架能解決所有哪怕是大多數問題。
建議只使用資料庫驅動庫,database/sql庫,可以完成所有go語言與資料庫的交互。

G. go語言中database下sql中的func Open 是長鏈接還是短鏈接

sql.Open 不會創建連接
,只會創建一個DB實例,同時會創建一個go程來管理該DB實例的一個連接池(是長連接,但不是在Open的時候創建)。
在調用Begin()取一個連接,回滾或者提交得時候歸還。如果你直接使用時Exec()執行,則每次會從連接池裡面取出一個連接,到Exec執行完畢的
時候歸還。可以通過參數來調節連接池的大小。
golang sql包已經做了並發處理,自己通過channel的方式維護了一個連接池,所以沒有必要在go程中加鎖共享。
關於每次sql.Open,我覺得應該是一個不恰當的做法,這會導致連接得不到重用,並產生過多的短時間關閉的連接,給資料庫造成沒必要的壓力。

H. SQL語言中 GO,default的作用

Go就是說一段代碼的結束,default是設置默認值

I. go語言如何連接sql server資料庫

高級!能用上go語言了嗎?不會是Android Studio吧?!
如果是Apk是連不上SQL的,訪問WebService,手機做SQL服務一般用WEB,不用WAP,手機可以直接訪問WEB,無論什麼編寫的,如果是特殊需要,那就用WebService去返回查詢結果

J. go語言中使用mysql sql語句

Go語言操作資料庫非常的簡單,
他也有一個類似JDBC的東西"database/sql"
實現類是"github.com/go-sql-driver/mysql"
使用過JDBC的人應該一看就懂
對日期的處理比較晦澀,沒有JAVA流暢:

復制代碼代碼如下:

package main

import (
"database/sql"
_ "github.com/go-sql-driver/mysql"
"log"
"time"
)
/*
create table t(
id int primary key auto_increment,
name varchar(20) not null,
ts timestamp
);
*/
func insert(db *sql.DB) {
stmt, err := db.Prepare("insert into t(name,ts) values(?,?)")
defer stmt.Close()
if err != nil {
log.Println(err)
return
}
ts, _ := time.Parse("2006-01-02 15:04:05", "2014-08-28 15:04:00")
stmt.Exec("edmond", ts)
}
func main() {
db, err := sql.Open("mysql", "xx:xx@tcp(127.0.0.1:3306)/mvbox?charset=utf8")
if err != nil {
log.Fatalf("Open database error: %s\n", err)
}
defer db.Close()
err = db.Ping()
if err != nil {
log.Fatal(err)
}