gpt4 book ai didi

grails - Groovy DAO可变范围问题

转载 作者:行者123 更新时间:2023-12-02 15:26:29 25 4
gpt4 key购买 nike

在我们的Grails项目中,我们使用通用的Groovy DAO通过PooledDataSource访问Amazon Oracle Database,并且一切都无法正常进行,我怀疑这是因为某些变量的范围不正确。我已经精简了代码,并将名称更改为我们在几个地方所做的工作的一小部分。有问题的代码是由另一位具有比我丰富的Java经验的开发人员编写的-我是Java / Groovy的相对新手-原谅这些基本问题。

class SomeDAO {
MyPooledDataSource ds = new MyPooledDataSource()
Connection conn
PreparedStatement stmt
String queryText

public String getUserCount() {
String jsonOne
PojoOne one = new PojoOne()

ds.setDataSource()
conn = ds.getPooled()
queryText = getQuery("SomeQuery")

try {
stmt = conn.prepareStatement(queryText)
stmt.setString(1, 'YTD')
stmt.setString(2, '2014')
ResultSet rs = stmt.executeQuery()

while (rs.next()) {
one.setUsers(rs.getString("USER_CT"))
one.setDropped(rs.getString("DROPPED_CT"))
}
} catch (SQLException e) {}

jsonOne = (one as JSON).toString()
return jsonOne
}

public String getUserMetrics() {
String jsonTwo
ArrayList objArray = new ArrayList()

ds.setDataSource()
conn = ds.getPooled()

try {
queryText = getQuery("SomeOtherQuery")
stmt = conn.prepareStatement(queryText)
stmt.setString(1, 'YTD')
stmt.setString(2, '2014')
ResultSet rsQuery = stmt.executeQuery()

while (rsQuery.next()) {
PojoTwo two = new PojoTwo()
two.setDisplay(rsQuery.getString("NAME"))
two.setDescription(rsQuery.getString("DESC"))
two.setValue(rsQuery.getString("AMT"))
objArray.add(two)
}
} catch (SQLException e) {}

jsonTwo = (objArray as JSON).toString()
return jsonTwo
}

public String getQuery(String operationName){
String query = "select QRY_TXT from T_SVC_QRY where OPERATION_NM = '" + operationName + "'"
ResultSet rs

ds.setDataSource()
conn = ds.getPooled()
stmt = conn.prepareStatement(query)
rs = stmt.executeQuery(query)
while (rs.next()) {
queryText = rs.getString("QRY_TXT")
}
return queryText
}
}

我对我们编写的代码有些担心...
  • 好像...
    Connection conn 
    PreparedStatement stmt
    String queryText
    ...不应在类级别上使用,而应在每种方法中声明,以避免变量被另一种方法(甚至同一方法通过不同的请求)突变而引起副作用。正确?请解释
  • 应该在类级别声明PooledDataSource以便重用。正确?请解释
  • 我们是否需要在每个方法中都执行ds.setDataSource(),还是应该为该类执行一次操作?为什么?
  • 似乎try / catch是否适用于getUserCount和getUserMetrics方法,因此它也应该在getQuery方法中使用。正确?请解释
  • 最佳答案

    那是时髦的代码。仅应共享数据源。使用您最喜欢的搜索引擎groovy.sql.Sql进行Google搜索-这是在Groovy或Grails项目中直接使用JDBC的最佳选择。它具有许多帮助程序方法,可让您编写直观的代码并使其繁重。

    您可能要先 checkout Javadoc page for the class

    关于grails - Groovy DAO可变范围问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26745948/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com