我正在尝试编写一个简单的数据库应用程序,该应用程序可以访问多个数据服务器,一些MySQL,MSSQL和SqlLite3。我正在使用“数据库/
SQL”包来访问它们。
db, err := sql.Open(driver, dataSourceName)
result, err := db.Exec(
"INSERT INTO users (name, age) VALUES (?, ?)",
"gopher",
27,
)
我需要将SQL查询记录到各个服务器上,以进行调试和审核。我该如何实现?
假设您不想使用服务器日志记录功能,显而易见的解决方案是在进行所有查询时简单地记录它们。
db, err := sql.Open(driver, dataSourceName)
log.Println(dataSourceName, "INSERT INTO users (name, age) VALUES (?, ?)", "gopher", 27)
result, err := db.Exec(
"INSERT INTO users (name, age) VALUES (?, ?)",
"gopher",
27,
)
这是您问题的基本解决方案。您可以通过多种方式对其进行优化:
log.Logger
为查询创建一个独占,因此您可以将其定向到特定的输出目标log.Logger
和sql.DB
对象包装在特殊的结构中,该结构将在完成查询后记录查询这是上述结构的粗略示例:
type DB struct {
db *sql.DB
dsn string
log *log.Logger
}
func NewDB(driver, dsn string, log *log.Logger) (*DB, error) {
db, err := sql.Open(driver, dsn)
if err != nil {
return nil, err
}
return &DB {
db: db,
dsn: dsn,
log: log,
}
}
func (d DB) Exec(query string, args ...interface{}) (sql.Result, err) {
d.log.Println(dsn, query, args)
return d.db.Exec(query, args...)
}
以及如何使用它:
l := log.New(os.Stdout, "[sql]", log.LstdFlags)
db, _ := NewDB(driver, dataSourceName, l)
result, _ := db.Exec(
"INSERT INTO users (name, age) VALUES (?, ?)",
"gopher",
27,
)
显然,您可以通过添加错误报告,查询持续时间等来再次完善此设计。
我知道,当连接到SQL server时,可以通过在属性文件行中添加以下内容(如本文所述)来查看发送到DB的实际查询: 在使用CouchBase的时候应该有什么方法呢?
我想看看mongo java驱动程序产生了什么查询,但我不能这样做。 使用官方文档中的信息,我只能在日志中看到更新操作执行的情况,但没有看到该操作的查询。
问题内容: 我想将一些SQL查询轨道执行的操作保存到日志文件中(即CREATE,UPDATE和DELETE),因此我需要拦截所有查询,然后使用一些正则表达式过滤它们并根据需要记录它们。 我会在Rails代码中的哪儿放这样的东西? 问题答案: 这里是c0r0ner链接的简化版本,以更好地显示它:
我想安慰一下。log()记录mongodb数据库查询的结果,无需进入mongo shell。下面是我的代码。相关部分以粗体显示。 我尝试过: console.dir(),但返回 [object, object]。我尝试过 print() 和 printjson(),但这些都是 mongo shell 独有的命令。 最终结果应该是,当用户通过put请求更改名称时,首先它将存储在数据库中的旧名称记录到
问题内容: 这个问题是一个跟进这个问题,我应该把这个代码? 我曾尝试将其放置在模型中,但发生的情况是,当我多次执行某些sql查询时,一旦返回“ 堆栈级别已达到深度 ”错误,就会发生这种情况。 问题答案: 将其放在config / initializers中。这很可能是因为每次在dev env中都重新加载类。该代码只需要执行一次。
在我的项目中,我希望获得上周记录、插入记录、基于createdtimestamp和product Type的记录。我在下面添加了sql和hibernate查询,在这里,sql查询运行良好,但hibernate查询给出错误。请帮助我如何将sql查询转换为hibernate查询。