📄 cpreparedstatement.java
字号:
if (p_stmt != null)
((PreparedStatement)p_stmt).setTimestamp (parameterIndex, x, cal);
else
throw new java.lang.UnsupportedOperationException ("Method setTimestamp() not yet implemented.");
}
/**
* Method setURL
* @param parameterIndex int
* @param x URL
* @throws SQLException
* @see java.sql.PreparedStatement#setURL(int, URL)
*/
public void setURL (int parameterIndex, URL x) throws SQLException
{
if (p_stmt != null)
((PreparedStatement)p_stmt).setObject (parameterIndex, x);
else
p_vo.setParameter(parameterIndex, x);
}
/**
* String representation
* @return info
*/
public String toString()
{
if (p_stmt != null)
return "CPreparedStatement[Local=" + p_stmt + "]";
return "CPreparedStatement[" + p_vo + "]";
} // toString
/**************************************************************************
* Get Prepared Statement to create RowSet and set parameters.
* Method called on Remote to execute locally.
* @param dedicatedConnection if true gets new connection - if false gets anormal RO/RW connection
* @return Prepared Statement
*/
private PreparedStatement local_getPreparedStatement (boolean dedicatedConnection, String trxName)
{
log.finest(p_vo.getSql());
Connection conn = null;
Trx trx = trxName == null ? null : Trx.get(trxName, true);
if (trx != null)
conn = trx.getConnection();
else
{
if (dedicatedConnection)
conn = DB.createConnection (false, Connection.TRANSACTION_READ_COMMITTED);
else
conn = local_getConnection (trxName);
}
if (conn == null)
throw new IllegalStateException("Local - No Connection");
PreparedStatement pstmt = null;
try
{
pstmt = conn.prepareStatement(p_vo.getSql(), p_vo.getResultSetType(), p_vo.getResultSetConcurrency());
// Set Parameters
ArrayList parameters = p_vo.getParameters();
for (int i = 0; i < parameters.size(); i++)
{
Object o = parameters.get(i);
if (o == null)
throw new IllegalArgumentException ("Local - Null Parameter #" + i);
else if (o instanceof NullParameter)
{
int type = ((NullParameter)o).getType();
pstmt.setNull(i+1, type);
log.finest("#" + (i+1) + " - Null");
}
else if (o instanceof Integer)
{
pstmt.setInt(i+1, ((Integer)o).intValue());
log.finest("#" + (i+1) + " - int=" + o);
}
else if (o instanceof String)
{
pstmt.setString(i+1, (String)o);
log.finest("#" + (i+1) + " - String=" + o);
}
else if (o instanceof Timestamp)
{
pstmt.setTimestamp(i+1, (Timestamp)o);
log.finest("#" + (i+1) + " - Timestamp=" + o);
}
else if (o instanceof BigDecimal)
{
pstmt.setBigDecimal(i+1, (BigDecimal)o);
log.finest("#" + (i+1) + " - BigDecimal=" + o);
}
else
throw new java.lang.UnsupportedOperationException ("Unknown Parameter Class=" + o.getClass());
}
}
catch (SQLException ex)
{
log.log(Level.SEVERE, "local", ex);
try
{
if (pstmt != null)
pstmt.close();
pstmt = null;
}
catch (SQLException ex1)
{
}
}
return pstmt;
} // local_getPreparedStatement
/**
* Get Result as RowSet for local system.
* Get explicit connection as connection is closed when closing RowSet
* @return result as RowSet
*/
public RowSet local_getRowSet()
{
log.finest("local");
/**
try
{
CompiereDatabase db = CConnection.get().getDatabase();
if (db == null)
throw new IllegalStateException("No Database");
//
PreparedStatement pstmt = local_getPreparedStatement(true, null); // decicated connection
ResultSet rs = pstmt.executeQuery();
RowSet rowSet = db.getRowSet (rs);
rs.close();
pstmt.close();
//
if (rowSet == null)
throw new NullPointerException("No RowSet");
// return rowSet;
}
catch (Exception ex)
{
log.log(Level.SEVERE, p_vo.toString(), ex);
throw new RuntimeException(ex);
}
**/
// dedicated connection
Connection conn = DB.createConnection (false, Connection.TRANSACTION_READ_COMMITTED);
PreparedStatement pstmt = null;
RowSet rowSet = null;
try
{
pstmt = conn.prepareStatement(p_vo.getSql(),
ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_READ_ONLY);
// Set Parameters
ArrayList parameters = p_vo.getParameters();
for (int i = 0; i < parameters.size(); i++)
{
Object o = parameters.get(i);
if (o == null)
throw new IllegalArgumentException ("Null Parameter #" + i);
else if (o instanceof NullParameter)
{
int type = ((NullParameter)o).getType();
pstmt.setNull(i+1, type);
log.finest("#" + (i+1) + " - Null");
}
else if (o instanceof Integer)
{
pstmt.setInt(i+1, ((Integer)o).intValue());
log.finest("#" + (i+1) + " - int=" + o);
}
else if (o instanceof String)
{
pstmt.setString(i+1, (String)o);
log.finest("#" + (i+1) + " - String=" + o);
}
else if (o instanceof Timestamp)
{
pstmt.setTimestamp(i+1, (Timestamp)o);
log.finest("#" + (i+1) + " - Timestamp=" + o);
}
else if (o instanceof BigDecimal)
{
pstmt.setBigDecimal(i+1, (BigDecimal)o);
log.finest("#" + (i+1) + " - BigDecimal=" + o);
}
else
throw new java.lang.UnsupportedOperationException ("Unknown Parameter Class=" + o.getClass());
}
//
ResultSet rs = pstmt.executeQuery();
rowSet = CCachedRowSet.getRowSet(rs);
pstmt.close();
pstmt = null;
conn.close();
conn = null;
}
catch (Exception ex)
{
log.log(Level.SEVERE, p_vo.toString(), ex);
throw new RuntimeException (ex);
}
// Close Cursor
try
{
if (pstmt != null)
pstmt.close();
pstmt = null;
if (conn != null)
conn.close();
conn = null;
}
catch (Exception e)
{
log.log(Level.SEVERE, "close", e);
}
return rowSet;
} // local_getRowSet
/*************************************************************************
* Get Result as RowSet for Remote.
* Get shared connection for RMI!
* If RowSet is transfred via RMI, closing the RowSet does not close the connection
* @return result as RowSet
*/
public RowSet remote_getRowSet()
{
log.finest("remote");
/**
try
{
CompiereDatabase db = CConnection.get().getDatabase();
if (db == null)
{
log.log(Level.SEVERE, "No Database");
throw new NullPointerException("No Database");
}
//
PreparedStatement pstmt = local_getPreparedStatement(false, null); // shared connection
ResultSet rs = pstmt.executeQuery();
RowSet rowSet = db.getRowSet (rs);
rs.close();
pstmt.close();
//
if (rowSet != null)
return rowSet;
else
log.log(Level.SEVERE, "No RowSet");
throw new NullPointerException("Remote - No RowSet");
}
catch (Exception ex)
{
log.log(Level.SEVERE, p_vo.toString(), ex);
throw new RuntimeException (ex);
}
// return null;
**/
// shared connection
Connection conn = local_getConnection (null);
PreparedStatement pstmt = null;
RowSet rowSet = null;
try
{
pstmt = conn.prepareStatement(p_vo.getSql(),
ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_READ_ONLY);
// Set Parameters
ArrayList parameters = p_vo.getParameters();
for (int i = 0; i < parameters.size(); i++)
{
Object o = parameters.get(i);
if (o == null)
throw new IllegalArgumentException ("Null Parameter #" + i);
else if (o instanceof NullParameter)
{
int type = ((NullParameter)o).getType();
pstmt.setNull(i+1, type);
log.finest("#" + (i+1) + " - Null");
}
else if (o instanceof Integer)
{
pstmt.setInt(i+1, ((Integer)o).intValue());
log.finest("#" + (i+1) + " - int=" + o);
}
else if (o instanceof String)
{
pstmt.setString(i+1, (String)o);
log.finest("#" + (i+1) + " - String=" + o);
}
else if (o instanceof Timestamp)
{
pstmt.setTimestamp(i+1, (Timestamp)o);
log.finest("#" + (i+1) + " - Timestamp=" + o);
}
else if (o instanceof BigDecimal)
{
pstmt.setBigDecimal(i+1, (BigDecimal)o);
log.finest("#" + (i+1) + " - BigDecimal=" + o);
}
else
throw new java.lang.UnsupportedOperationException ("Unknown Parameter Class=" + o.getClass());
}
//
//
ResultSet rs = pstmt.executeQuery();
rowSet = CCachedRowSet.getRowSet(rs);
pstmt.close();
pstmt = null;
}
catch (Exception ex)
{
log.log(Level.SEVERE, p_vo.toString(), ex);
throw new RuntimeException (ex);
}
// Close Cursor
try
{
if (pstmt != null)
pstmt.close();
pstmt = null;
}
catch (Exception e)
{
log.log(Level.SEVERE, "close pstmt", e);
}
return rowSet;
} // remote_getRowSet
/*************************************************************************
* Execute Update.
* @return row count
*/
public int remote_executeUpdate()
{
log.finest("Update");
try
{
CompiereDatabase db = CConnection.get().getDatabase();
if (db == null)
throw new NullPointerException("Remote - No Database");
//
PreparedStatement pstmt = local_getPreparedStatement (false, null); // shared connection
int result = pstmt.executeUpdate();
pstmt.close();
//
return result;
}
catch (Exception ex)
{
log.log(Level.SEVERE, p_vo.toString(), ex);
throw new RuntimeException (ex);
}
} // remote_executeUpdate
} // CPreparedStatement
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -