0

我是 Groovy 的新手,我有一个带有“public static void main”的简单类,它使用 groovy.sql.sql 作为导入通过 sql.execute 和 sql.call 语句执行 SQL。我还导入了一项服务,用于检查 Oracle 数据库中现有应用程序中的安全设置。它还执行 SQL 语句。我的问题是,人们通常如何完成 SQL 连接?您是否为每个类打开一个连接,即每个类中都有一个单独的 SQL 连接?或者您可以将您的 SQL 连接信息传递给该类并以某种方式使用相同的连接吗?现在我让它与两个单独的连接一起工作,但我不确定这是否是实现这一目标的好方法。

如果以上内容不完全有意义(因为我是新手),这里是我的代码示例。在我的主课中,我像这样打开并调用 SQL:

//DB connection
def conn = new DbConnectService()           
def sql = Sql.newInstance(conn.url, conn.username, conn.password, conn.driver)

然后我想通过调用安全检查类来检查安全设置,如下所示:

// Security check
def sec = new CheckSecurityService()
sec.SecurityCheck(ProgramName)

安全检查,在打开与上面完全相同的数据库连接后,会执行一些 SQL 调用,如下所示:

try 
{
        sql.call '{call G$_SECURITY.G$_VERIFY_PASSWORD1_PRD(?, ?, ?, ?)}', [$p_object, p_version, sql.VARCHAR, Sql.VARCHAR], { p_pass, p_rol ->
            p_password = p_pass
            p_role = p_rol
        } 

然后,如果成功,我将返回我的主类并执行更多 sql 语句,例如:

sql.execute("insert into test (key1, text) values (${foo}, ${text1})")

任何有关人们通常如何做到这一点的信息都值得赞赏!谢谢!

4

1 回答 1

0

正如您所说,您是在main线程中完成的,我假设它是一个单线程应用程序。那么重用连接应该没问题。理想情况下,在多线程应用程序中,您应该使用 DataSource 和一些底层连接池,而不是直接在代码中打开和关闭 Connection。

在这里,您可以传递相同的Sql对象或传递Connection给您的安全检查器类,而无需实际创建两个连接。即使你创建了两个连接,也没什么大不了的(除非你在某个循环中这样做,或者面临一些性能问题)

一个建议:对于插入使用准备好的语句,如语法而不是字符串插值

sql.execute("insert into test (key1, text) values (${foo}, ${text1})")

sql.execute("insert into test (key1, text) values (?, ?)", [foo, text1])

于 2013-08-02T18:17:43.093 回答