是否可以从 Go 代码连接到 h2 数据库http://www.h2database.com
首先,您需要运行数据库服务器,允许通过 TCP,PotgreSQL 或 Web 从任何主机进行连接(我已经使用名为runH2Server.sh的 linux shell 脚本完成了此操作):
#!/bin/bash
export PATH=$PATH:/tmp/H2DB/jre1.8/bin
export CLASSPATH=/tmp/H2DB/DBServer:/tmp/H2DB/DBServer/h2.jar
java -classpath $CLASSPATH org.h2.tools.Server -webAllowOthers -tcpAllowOthers -pgAllowOthers -baseDir /tmp/H2DB/DBServer
运行脚本将产生以下 otuput:
# ./runH2Server.sh
Web Console server running at http://127.0.1.1:8082 (others can connect)
TCP server running at tcp://127.0.1.1:9092 (others can connect)
PG server running at pg://127.0.1.1:5435 (others can connect)
现在您的服务器已准备好进行客户端连接,您可以测试它将 Web 浏览器连接到指定的 IP 和端口,例如:http://192.168.1.130:8082/login.do
请务必下载 Go postgres 驱动程序表单“github.com / lib / pq”。
现在,从另一个主机(如果需要,也可以使用相同的主机),您可以使用以下代码来测试您的连接:
package main
import (
"database/sql"
"fmt"
_ "github.com/lib/pq"
)
const (
host = "192.168.1.130"
port = 5435
user = "sa"
password = ""
dbname = "/tmp/H2DB/DBServer/test"
)
func main() {
psqlInfo := fmt.Sprintf("host=%s port=%d user=%s "+
"dbname=%s sslmode=disable", host, port, user, dbname)
db, err := sql.Open("postgres", psqlInfo)
if err != nil {
panic(err)
}
defer db.Close()
err = db.Ping()
if err != nil {
panic(err)
}
fmt.Println("Successfully connected!")
rows, err := db.Query("SHOW TABLES")
if err != nil {
panic(err)
}
fmt.Println("\n\n=== Tables in DB ===")
fmt.Printf("%10v | %15v\n", "tablename", "tableschema")
for rows.Next() {
var tablename string
var tableschema string
err = rows.Scan(&tablename, &tableschema)
if err != nil {
panic(err)
}
fmt.Printf("%10v | %15v\n", tablename, tableschema)
}
fmt.Println("\n\n=== Records in DB ===")
rows, err = db.Query("SELECT * FROM TEST ORDER BY ID")
if err != nil {
panic(err)
}
fmt.Printf("%10v | %15v\n", "ID", "NAME")
for rows.Next() {
var id int
var name string
err = rows.Scan(&id, &name)
if err != nil {
panic(err)
}
fmt.Printf("%10v | %15v\n", id, name)
}
}
运行它,你将有以下输出:
C:\Go\PG_
λ go run PgDB.go
Successfully connected!
=== Tables in DB ===
tablename | tableschema
TEST | PUBLIC
=== Records in DB ===
ID | NAME
1 | Hello
2 | World
根据http://www.h2database.com/html/advanced.html:
...它支持 PostgreSQL 网络协议...对 PostgreSQL 网络协议的支持是相当新的,应该被视为实验性的,它不应该用于生产应用程序。
因此,github.com/lib/pq
驱动程序很有可能使用 h2。
我为 Go 开发了一个“原生”Apache H2 数据库驱动程序。
https://github.com/jmrobles/h2go在它的日子里,我试图使用 Postgres 接口,但我遇到了诊断 SQL 语法中的错误的问题。
我想提供一个纯粹的替代方案,将直接访问 H2 的 TCP 接口。
本站系公益性非盈利分享网址,本文来自用户投稿,不代表码文网立场,如若转载,请注明出处
评论列表(42条)