You are viewing a plain text version of this content. The canonical link for it is here.
Posted to users@groovy.apache.org by Christian Paulsen <c-...@t-online.de> on 2018/02/06 13:31:28 UTC
Whats wrong with this Statement in groovy SQL usage?
Hi
I 'm using groovy and groovy sql in a framework. It works really very
well, but with the executePreparedQuery I get some problems with this
statement:
nresults = sql.executePreparedQuery(selprepstr, felder)
class GSelectPrep extends SelectBase {
private Log log = LogFactory.getLog(GSelectPrep.class);
DataSource ds = null;
GTableInfo ti = null;
def valmap = null;
String selprepstr = null;
Sql sql = null;
protected ResultSet nresults = null
public GSelectPrep(String dbsynonym, String table)
throws SQLException, LKVException {
try {
log.debug("new GSelectPrep")
DataSourceManager dsm = DataSourceManager.getInstance();
ds = dsm.getDataSource(dbsynonym).getDataSource()
sql = new Sql(ds)
ti = new GTableInfo(dbsynonym, table);
} catch (SQLException e) {
mStatus = false;
mSqlcode = e.getErrorCode();
mSQLMessage = e.getMessage();
log.error(getSqlMessage(), e);
}
}
def prepare(String fieldlist = null) {
def okmap = [true: 'Insert erfolgreich:', false: 'Insert
abgelehnt:']
def ok = false;
if (fieldlist == null) selprepstr =
ti.baueNamedPreparedSelectStr();
else selprepstr =
ti.baueNamedPreparedSelectStrFromFieldList(fieldlist)
log.debug("prepstr:" + selprepstr);
}
def setselprepstr(String prepstr) {
selprepstr = prepstr
log.debug("prepstr:" + selprepstr);
}
def select(GenJavaBean gjb) {
def ok = false;
def resultliste = []
log.info("gjb:" + gjb);
def valmap = ti.baueNamedMap("", gjb);
log.debug("valmap:" + valmap);
def anzrows = 0
try {
log.info("selprepstr:" + selprepstr);
// sql.execute(selprepstr,valmap);
def items = ti.getItemList()
sql.eachRow(selprepstr, valmap) {
row ->
anzrows++;
GenJavaBean getgjb = new GenJavaBean();
items.each() { item ->
def feldname = item.getFeldName();
getgjb.setProperty(item.getFeldName(),
row."${feldname}");
}
//getgjb.backup();
log.info(getgjb)
resultliste.add(getgjb);
}
} catch (SQLException e) {
log.error("SQLFEHLER", e);
}
return resultliste;
}
def selectNext(GenJavaBean gjb,String fields) {
def ok = false;
log.debug("gjb:" + gjb);
def valmap = ti.baueNamedMap("", gjb);
log.info("valmap:" + valmap);
def felder = []
fields.split(",").each {
felder << valmap[it];
}
log.debug("Das sind die Felder ${felder}");
def anzrows = 0
try {
log.debug("selectnext selprepstr:" + selprepstr);
nresults = sql.executePreparedQuery(selprepstr, felder)
log.debug("GetRow:"+nresults.getRow());
ok = true;
} catch (SQLException e){
log.error("SQLFEHLER", e);
}
return ok;
}
def getNextResult(){
def items = ti.getItemList()
GenJavaBean getgjb = null;
if (nresults.next()){
getgjb = new GenJavaBean();
items.each() { item ->
def feldname = item.getFeldName();
getgjb.setProperty(item.getFeldName(),
nresults."${feldname}");
}
}
return getgjb;
}
public void close() {
sql.close();
}
public void info(String info) {
//@hint Platzhalter fuer closelog
boolean verbose = false;
if (verbose) {
log.info(info);
}
}
}
I get this LOG:
180206 141950 DEBUG de.lkvnrw.sql.statements.GSelectPrep:selectMethod:
Das sind die Felder [276000513000002]
20180206 141950 DEBUG de.lkvnrw.sql.statements.GSelectPrep:selectMethod:
selectnext selprepstr:SELECT * FROM testtabkuh where lom >= ?
20180206 141950 ERROR de.lkvnrw.sql.statements.GSelectPrep:selectMethod:
SQLFEHLER
java.sql.SQLException: You can't operate on a closed ResultSet!!!
at com.mchange.v2.sql.SqlUtils.toSQLException(SqlUtils.java:118)
at com.mchange.v2.sql.SqlUtils.toSQLException(SqlUtils.java:77)
at
com.mchange.v2.c3p0.impl.NewProxyResultSet.getRow(NewProxyResultSet.java:3670)
at
org.codehaus.groovy.vmplugin.v7.IndyInterface.selectMethod(IndyInterface.java:232)
at
de.lkvnrw.sql.statements.GSelectPrep.selectNext(GSelectPrep.groovy:107)
Line 107:
log.debug("GetRow:"+nresults.getRow());
Caught: java.sql.SQLException: You can't operate on a closed ResultSet!!!
java.sql.SQLException: You can't operate on a closed ResultSet!!!
at com.mchange.v2.sql.SqlUtils.toSQLException(SqlUtils.java:118)
at com.mchange.v2.sql.SqlUtils.toSQLException(SqlUtils.java:77)
at
com.mchange.v2.c3p0.impl.NewProxyResultSet.next(NewProxyResultSet.java:2718)
at
de.lkvnrw.sql.statements.GSelectPrep.getNextResult(GSelectPrep.groovy:117)
Then I highlight the Statement sql.executePreparedQuery(selprepstr, felder)
I get in IdeaC the information that I exceed the acess rights.
With regards Christian
--
*Christian Paulsen *
mailto:c-w-p@t-online.de
WWW: http://leever-miteenanner.de
Festnetz: +49(0)46231898011
mobil: +49(0)1705810744
Twitter: https://twitter.com/flens111