Grails Groovy DAO变量范围问题
在我们的Grails项目中,我们使用一个普通的Groovy DAO访问带有PooledDataSource的AmazonOracle数据库,但事情不起作用,我怀疑这是因为某些变量的范围不正确。我已经删减了代码,并将名称更改为我们在几个地方所做工作的一小部分。其中一些代码是由另一个比我有更多Java经验的开发人员编写的——我是一个相对Java/Groovy的新手——请原谅这些基本问题Grails Groovy DAO变量范围问题,grails,groovy,dao,Grails,Groovy,Dao,在我们的Grails项目中,我们使用一个普通的Groovy DAO访问带有PooledDataSource的AmazonOracle数据库,但事情不起作用,我怀疑这是因为某些变量的范围不正确。我已经删减了代码,并将名称更改为我们在几个地方所做工作的一小部分。其中一些代码是由另一个比我有更多Java经验的开发人员编写的——我是一个相对Java/Groovy的新手——请原谅这些基本问题 class SomeDAO { MyPooledDataSource ds = new MyPooledD
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
}
}
我对我们编写的代码有一些担心
连接接头
准备好的报表
字符串查询文本
…不应在类级别上,而是在每个方法中声明,以避免变量被另一个方法(或甚至同一个方法被不同的请求)突变而导致副作用。对的请解释一下这是一个时髦的代码。应该只共享数据源。使用您最喜欢的groovy.sql.sql搜索引擎进行Google搜索—这是在groovy或Grails项目中直接使用JDBC的最佳选择。它有很多助手方法,可以让您编写直观的代码,并让它完成繁重的工作 您可能希望首先查看 Connection conn PreparedStatement stmt String queryText