簡體   English   中英

轉到h2數據庫

[英]Go to h2 database

是否可以從 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

運行腳本將產生以下輸出:

# ./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

請務必從“ github.com/lib/pq ”下載 Go postgres 驅動程序。

現在,從另一台主機(或相同的主機,如果您願意),您可以使用以下代碼來測試您的連接:

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_Client
λ go run PgDBClient.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驅動程序github.com/lib/pq可能與 h2 一起工作。

我為 Go 開發了一個“本機”Apache H2 數據庫驅動程序。

https://github.com/jmrobles/h2go

在那個時代,我嘗試使用 Postgres 接口,但在診斷 SQL 語法中的錯誤時遇到了問題。

我想提供一個可以直接訪問 H2 的 TCP 接口的純 go 替代方案。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM