java.sql.SQLRecoverableException: Geschlossene Verbindung; State=08003; ErrorCode=17008
Bin ich immer die folgende Fehlermeldung beim einfügen von einigen Zeilen in der oracle-Datenbank-Tabelle durch die Verwendung von Schleifen java meine Schleife gehen fast 25000 mal:
java.sql.SQLRecoverableException: Closed Connection; State=08003; ErrorCode=1700
8
at oracle.jdbc.driver.PhysicalConnection.prepareStatement(PhysicalConnec
tion.java:3331)
at com.mchange.v2.c3p0.impl.NewProxyConnection.prepareStatement(NewProxy
Connection.java:275)
at org.compiere.db.PreparedStatementProxy.init(PreparedStatementProxy.ja
va:71)
at org.compiere.db.PreparedStatementProxy.<init>(PreparedStatementProxy.
java:44)
at org.compiere.db.ProxyFactory.newCPreparedStatement(ProxyFactory.java:
54)
at org.compiere.util.DB.executeUpdate(DB.java:1007)
at org.compiere.util.DB.executeUpdate(DB.java:877)
at org.compiere.util.DB.executeUpdate(DB.java:864)
at org.compiere.report.FinReport.insertLineSource(FinReport.java:1033)
at org.compiere.report.FinReport.insertLineDetail(FinReport.java:844)
at org.compiere.report.FinReport.doIt(FinReport.java:306)
at org.compiere.process.SvrProcess.process(SvrProcess.java:147)
at org.compiere.process.SvrProcess.startProcess(SvrProcess.java:105)
Unten ist mein code:
private void insertLineSource (int line)
{
log.info("Line=" + line + " - " + m_lines[line]);
// No source lines
if (m_lines[line] == null || m_lines[line].getSources().length == 0)
return;
String variable = m_lines[line].getSourceColumnName();
if (variable == null)
return;
log.fine("Variable=" + variable);
// Insert
StringBuffer insert = new StringBuffer("INSERT INTO T_Report "
+ "(AD_PInstance_ID, PA_ReportLine_ID, Record_ID,Fact_Acct_ID,LevelNo ");
for (int col = 0; col < m_columns.length; col++)
insert.append(",Col_").append(col);
// Select
insert.append(") SELECT ")
.append(getAD_PInstance_ID()).append(",")
.append(m_lines[line].getPA_ReportLine_ID()).append(",")
.append(variable).append(",0,");
if (p_DetailsSourceFirst)
insert.append("-1 ");
else
insert.append("1 ");
// for all columns create select statement
for (int col = 0; col < m_columns.length; col++)
{
insert.append(", ");
// No calculation
if (m_columns[col].isColumnTypeCalculation())
{
insert.append("NULL");
continue;
}
// SELECT SUM()
StringBuffer select = new StringBuffer ("SELECT ");
if (m_lines[line].getPAAmountType() != null) // line amount type overwrites column
select.append (m_lines[line].getSelectClause (true));
else if (m_columns[col].getPAAmountType() != null)
select.append (m_columns[col].getSelectClause (true));
else
{
insert.append("NULL");
continue;
}
if (p_PA_ReportCube_ID > 0) {
select.append(" FROM Fact_Acct_Summary fb WHERE DateAcct ");
} //report cube
else {
// Get Period info
select.append(" FROM Fact_Acct fb WHERE TRUNC(DateAcct, 'DD') ");
}
FinReportPeriod frp = getPeriod (m_columns[col].getRelativePeriod());
if (m_lines[line].getPAPeriodType() != null) // line amount type overwrites column
{
if (m_lines[line].isPeriod())
select.append(frp.getPeriodWhere());
else if (m_lines[line].isYear())
select.append(frp.getYearWhere());
else if (m_lines[line].isNatural())
select.append(frp.getNaturalWhere("fb"));
else
select.append(frp.getTotalWhere());
}
else if (m_columns[col].getPAPeriodType() != null)
{
if (m_columns[col].isPeriod())
select.append(frp.getPeriodWhere());
else if (m_columns[col].isYear())
select.append(frp.getYearWhere());
else if (m_columns[col].isNatural())
select.append(frp.getNaturalWhere("fb"));
else
select.append(frp.getTotalWhere());
}
// Link
select.append(" AND fb.").append(variable).append("=x.").append(variable);
// PostingType
if (!m_lines[line].isPostingType()) // only if not defined on line
{
String PostingType = m_columns[col].getPostingType();
if (PostingType != null && PostingType.length() > 0)
select.append(" AND fb.PostingType='").append(PostingType).append("'");
//globalqss - CarlosRuiz
if (PostingType.equals(MReportColumn.POSTINGTYPE_Budget)) {
if (m_columns[col].getGL_Budget_ID() > 0)
select.append(" AND GL_Budget_ID=" + m_columns[col].getGL_Budget_ID());
}
//end globalqss
}
// Report Where
String s = m_report.getWhereClause();
if (s != null && s.length() > 0)
select.append(" AND ").append(s);
// Limited Segment Values
if (m_columns[col].isColumnTypeSegmentValue())
select.append(m_columns[col].getWhereClause(p_PA_Hierarchy_ID));
// Parameter Where
select.append(m_parameterWhere);
// System.out.println(" c=" + col + ", l=" + line + ": " + select);
//
insert.append("(").append(select).append(")");
}
// WHERE (sources, posting type)
StringBuffer where = new StringBuffer(m_lines[line].getWhereClause(p_PA_Hierarchy_ID));
String s = m_report.getWhereClause();
if (s != null && s.length() > 0)
{
if (where.length() > 0)
where.append(" AND ");
where.append(s);
}
if (where.length() > 0)
where.append(" AND ");
where.append(variable).append(" IS NOT NULL");
if (p_PA_ReportCube_ID > 0)
insert.append(" FROM Fact_Acct_Summary x WHERE ").append(where);
else
// FROM .. WHERE
insert.append(" FROM Fact_Acct x WHERE ").append(where);
//
insert.append(m_parameterWhere)
.append(" GROUP BY ").append(variable);
int no = DB.executeUpdate(insert.toString(), get_TrxName());
if (CLogMgt.isLevelFinest())
log.fine("Source #=" + no + " - " + insert);
if (no == 0)
return;
// Set Name,Description
StringBuffer sql = new StringBuffer ("UPDATE T_Report SET (Name,Description)=(")
.append(m_lines[line].getSourceValueQuery()).append("T_Report.Record_ID) "
//
+ "WHERE Record_ID <> 0 AND AD_PInstance_ID=").append(getAD_PInstance_ID())
.append(" AND PA_ReportLine_ID=").append(m_lines[line].getPA_ReportLine_ID())
.append(" AND Fact_Acct_ID=0");
no = DB.executeUpdate(sql.toString(), get_TrxName());
if (CLogMgt.isLevelFinest())
log.fine("Name #=" + no + " - " + sql.toString());
if (m_report.isListTrx())
insertLineTrx (line, variable);
} // insertLineSource
Du musst angemeldet sein, um einen Kommentar abzugeben.
Anwendung code sollte nicht an eine zwischengespeicherte Verbindung-handle von einem Instanz eines data access client zu einem anderen client-Instanz. Die übertragung der Verbindung Griff zwischen client-Instanzen erstellt, die problematisch Kontingenz der eine Instanz mit einem Verbindungs-handle verwiesen wird, die von einem anderen.
Zum Beispiel, wenn die Anwendung code, der eine client-Instanz erhält, dass die übertragenen handle das handle geschlossen und der client-Instanz behält die ursprüngliche Verweis auf den Griff versucht zu reklamieren, ist es, die application-server stellt eine Ausnahme.
einige Ausnahmen in diesem Fall erwartet.
Ausnahme Beschreibung: Eine Ausnahme entdeckt wurde, war die Reinigung der ManagedConnection für einen Betrieb zerstören. Siehe die Fehlermeldung des Datenbank-software, um festzustellen, die Ursache des Fehlers.
Ausnahme
Lesen diese für mehr unertstanding
Vielleicht den code verbringt zu viel Zeit damit, Sachen zwischen dem öffnen der Datenbank-Verbindung und die Vorbereitung der
PreparedStatement
oder zwischen anderen Datenbank-Operationen und zur Vorbereitung der nächstenPreparedStatement
, so dass die Verbindung geschlossen wird, wegen Inaktivität.Die Verbindung kann entweder geschlossen, von Oracle oder von C3P0, so überprüfen Sie Ihre C3P0 Konfiguration für das timeout-Einstellungen. Auch erwägen Sie, die Verbindung später in der Ausführung.
Haben Sie vielleicht auf einen Fehler in C3P0 beziehen sich auf Oracle-verbindungen.
Vielleicht haben Sie einen vorübergehenden Fehler beim verbinden mit der Datenbank-Instanz (dies setzt Voraus, dass die Datenbank auf einem anderen computer befindet; ist dies nicht der Fall sein wird, wenn die Datenbank auf demselben computer).
Dieses problem zu vermeiden, stoppen die Ausführung, die Sie fangen sollte solche
RecoverableException
s, erhalten Sie eine neue Verbindung aus dem connection pool, und wiederholen Sie die Datenbank Betrieb.