为了账号安全,请及时绑定邮箱和手机立即绑定

转到h2数据库

转到h2数据库

Go
HUWWW 2021-12-06 18:37:03
是否可以从 Go 代码连接到 h2 数据库http://www.h2database.com
查看完整描述

3 回答

?
慕丝7291255

TA贡献1859条经验 获得超6个赞

根据http://www.h2database.com/html/advanced.html

... 它支持 PostgreSQL 网络协议 ... 对 PostgreSQL 网络协议的支持是相当新的,应该被视为实验性的。它不应用于生产应用程序。

因此,github.com/lib/pq驱动程序很有可能与 h2 一起工作。


查看完整回答
反对 回复 2021-12-06
?
慕田峪7331174

TA贡献1828条经验 获得超13个赞

我为 Go 开发了一个“本机”Apache H2 数据库驱动程序。

https://github.com/jmrobles/h2go

在那个时代,我尝试使用 Postgres 界面,但在诊断 SQL 语法中的错误时遇到了问题。

我想提供一个可以直接访问 H2 的 TCP 接口的纯 go 替代方案。


查看完整回答
反对 回复 2021-12-06
?
大话西游666

TA贡献1817条经验 获得超14个赞

首先,您需要运行您的数据库服务器,允许通过 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


查看完整回答
反对 回复 2021-12-06
  • 3 回答
  • 0 关注
  • 271 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信