📄 db.java
字号:
while (rs.next())
list.add(new KeyNamePair(rs.getInt(1), rs.getString(2)));
rs.close();
pstmt.close();
pstmt = null;
}
catch (Exception e)
{
log.log(Level.SEVERE, sql, e);
}
try
{
if (pstmt != null)
pstmt.close();
pstmt = null;
}
catch (Exception e)
{
pstmt = null;
}
KeyNamePair[] retValue = new KeyNamePair[list.size()];
list.toArray(retValue);
// s_log.fine("getKeyNamePairs #" + retValue.length);
return retValue;
} // getKeyNamePairs
/**
* Is Sales Order Trx.
* Assumes Sales Order. Queries IsSOTrx of table with where clause
* @param TableName table
* @param whereClause where clause
* @return true (default) or false if tested that not SO
*/
public static boolean isSOTrx (String TableName, String whereClause)
{
if (TableName == null || TableName.length() == 0)
{
log.severe("No TableName");
return true;
}
if (whereClause == null || whereClause.length() == 0)
{
log.severe("No Where Clause");
return true;
}
//
boolean isSOTrx = true;
String sql = "SELECT IsSOTrx FROM " + TableName
+ " WHERE " + whereClause;
PreparedStatement pstmt = null;
try
{
pstmt = DB.prepareStatement (sql, null);
ResultSet rs = pstmt.executeQuery ();
if (rs.next ())
isSOTrx = "Y".equals(rs.getString(1));
rs.close ();
pstmt.close ();
pstmt = null;
}
catch (Exception e)
{
if (TableName.endsWith("Line"))
{
String hdr = TableName.substring(0, TableName.indexOf("Line"));
sql = "SELECT IsSOTrx FROM " + hdr
+ " h WHERE EXISTS (SELECT * FROM " + TableName
+ " l WHERE h." + hdr + "_ID=l." + hdr + "_ID AND "
+ whereClause + ")";
PreparedStatement pstmt2 = null;
try
{
pstmt2 = DB.prepareStatement (sql, null);
ResultSet rs2 = pstmt2.executeQuery ();
if (rs2.next ())
isSOTrx = "Y".equals(rs2.getString(1));
rs2.close ();
pstmt2.close ();
pstmt2 = null;
}
catch (Exception ee)
{
log.finest(sql + " - " + e.getMessage());
}
try
{
if (pstmt2 != null)
pstmt2.close ();
pstmt2 = null;
}
catch (Exception ee)
{
pstmt2 = null;
}
}
else
log.finest(sql + " - " + e.getMessage());
}
try
{
if (pstmt != null)
pstmt.close ();
pstmt = null;
}
catch (Exception e)
{
pstmt = null;
}
return isSOTrx;
} // isSOTrx
/**************************************************************************
* Get next number for Key column = 0 is Error.
* * @param ctx client
@param TableName table name
* @param trxName optionl transaction name
* @return next no
*/
public static int getNextID (Properties ctx, String TableName, String trxName)
{
if (ctx == null)
throw new IllegalArgumentException("Context missing");
if (TableName == null || TableName.length() == 0)
throw new IllegalArgumentException("TableName missing");
return getNextID(Env.getAD_Client_ID(ctx), TableName, trxName);
} // getNextID
/**
* Get next number for Key column = 0 is Error.
* @param AD_Client_ID client
* @param TableName table name
* @param trxName optional Transaction Name
* @return next no
*/
public static int getNextID (int AD_Client_ID, String TableName, String trxName)
{
if ((trxName == null || trxName.length() == 0) && isRemoteObjects())
{
Server server = CConnection.get().getServer();
try
{
if (server != null)
{ // See ServerBean
int id = server.getNextID(AD_Client_ID, TableName, null);
log.finest("server => " + id);
if (id < 0)
throw new DBException("No NextID");
return id;
}
log.log(Level.SEVERE, "AppsServer not found - " + TableName);
}
catch (RemoteException ex)
{
log.log(Level.SEVERE, "AppsServer error", ex);
}
// Try locally
}
int id = MSequence.getNextID (AD_Client_ID, TableName, trxName); // tries 3 times
// if (id <= 0)
// throw new DBException("No NextID (" + id + ")");
return id;
} // getNextID
/**
* Get Document No based on Document Type
* @param C_DocType_ID document type
* @param trxName optional Transaction Name
* @return document no or null
*/
public static String getDocumentNo(int C_DocType_ID, String trxName)
{
if ((trxName == null || trxName.length() == 0) && isRemoteObjects())
{
Server server = CConnection.get().getServer();
try
{
if (server != null)
{ // See ServerBean
String dn = server.getDocumentNo (C_DocType_ID, trxName);
log.finest("Server => " + dn);
if (dn != null)
return dn;
}
log.log(Level.SEVERE, "AppsServer not found - " + C_DocType_ID);
}
catch (RemoteException ex)
{
log.log(Level.SEVERE, "AppsServer error", ex);
}
}
// fallback
String dn = MSequence.getDocumentNo (C_DocType_ID, trxName);
if (dn == null) // try again
dn = MSequence.getDocumentNo (C_DocType_ID, trxName);
// if (dn == null)
// throw new DBException ("No DocumentNo");
return dn;
} // getDocumentNo
/**
* Get Document No from table
* @param AD_Client_ID client
* @param TableName table name
* @param trxName optional Transaction Name
* @return document no or null
*/
public static String getDocumentNo (int AD_Client_ID, String TableName, String trxName)
{
if ((trxName == null || trxName.length() == 0) && isRemoteObjects())
{
Server server = CConnection.get().getServer();
try
{
if (server != null)
{ // See ServerBean
String dn = server.getDocumentNo (AD_Client_ID, TableName, trxName);
log.finest("Server => " + dn);
if (dn != null)
return dn;
}
log.log(Level.SEVERE, "AppsServer not found - " + TableName);
}
catch (RemoteException ex)
{
log.log(Level.SEVERE, "AppsServer error", ex);
}
}
// fallback
String dn = MSequence.getDocumentNo (AD_Client_ID, TableName, trxName);
if (dn == null) // try again
dn = MSequence.getDocumentNo (AD_Client_ID, TableName, trxName);
if (dn == null)
throw new DBException ("No DocumentNo");
return dn;
} // getDocumentNo
/**
* Get Document Number for current document.
* <br>
* - first search for DocType based Document No
* - then Search for DocumentNo based on TableName
* @param ctx context
* @param WindowNo window
* @param TableName table
* @param onlyDocType Do not search for document no based on TableName
* @param trxName optional Transaction Name
* @return DocumentNo or null, if no doc number defined
*/
public static String getDocumentNo (Properties ctx, int WindowNo,
String TableName, boolean onlyDocType, String trxName)
{
if (ctx == null || TableName == null || TableName.length() == 0)
throw new IllegalArgumentException("Required parameter missing");
int AD_Client_ID = Env.getContextAsInt(ctx, WindowNo, "AD_Client_ID");
// Get C_DocType_ID from context - NO Defaults -
int C_DocType_ID = Env.getContextAsInt(ctx, WindowNo + "|C_DocTypeTarget_ID");
if (C_DocType_ID == 0)
C_DocType_ID = Env.getContextAsInt(ctx, WindowNo + "|C_DocType_ID");
if (C_DocType_ID == 0)
{
log.fine("Window=" + WindowNo
+ " - Target=" + Env.getContextAsInt(ctx, WindowNo + "|C_DocTypeTarget_ID") + "/" + Env.getContextAsInt(ctx, WindowNo, "C_DocTypeTarget_ID")
+ " - Actual=" + Env.getContextAsInt(ctx, WindowNo + "|C_DocType_ID") + "/" + Env.getContextAsInt(ctx, WindowNo, "C_DocType_ID"));
return getDocumentNo (AD_Client_ID, TableName, trxName);
}
String retValue = getDocumentNo (C_DocType_ID, trxName);
if (!onlyDocType && retValue == null)
return getDocumentNo (AD_Client_ID, TableName, trxName);
return retValue;
} // getDocumentNo
/**
* Is this a remote client connection
* @return true if client and RMI or Objects on Server
*/
public static boolean isRemoteObjects()
{
return CConnection.get().isServerObjects()
&& CConnection.get().isAppsServerOK(false);
} // isRemoteObjects
/**
* Is this a remote client connection
* @return true if client and RMI or Process on Server
*/
public static boolean isRemoteProcess()
{
return CConnection.get().isServerProcess()
&& CConnection.get().isAppsServerOK(false);
} // isRemoteProcess
/**************************************************************************
* Print SQL Warnings.
* <br>
* Usage: DB.printWarning("comment", rs.getWarnings());
* @param comment comment
* @param warning warning
*/
public static void printWarning (String comment, SQLWarning warning)
{
if (comment == null || warning == null || comment.length() == 0)
throw new IllegalArgumentException("Required parameter missing");
log.warning(comment);
if (warning == null)
return;
//
SQLWarning warn = warning;
while (warn != null)
{
StringBuffer buffer = new StringBuffer();
buffer.append(warn.getMessage())
.append("; State=").append(warn.getSQLState())
.append("; ErrorCode=").append(warn.getErrorCode());
log.warning(buffer.toString());
warn = warn.getNextWarning();
}
} // printWarning
/**
* Create SQL TO Date String from Timestamp
*
* @param time Date to be converted
* @param dayOnly true if time set to 00:00:00
*
* @return TO_DATE('2001-01-30 18:10:20',''YYYY-MM-DD HH24:MI:SS')
* or TO_DATE('2001-01-30',''YYYY-MM-DD')
*/
public static String TO_DATE (Timestamp time, boolean dayOnly)
{
return s_cc.getDatabase().TO_DATE(time, dayOnly);
} // TO_DATE
/**
* Create SQL TO Date String from Timestamp
* @param day day time
* @return TO_DATE String (day only)
*/
public static String TO_DATE (Timestamp day)
{
return TO_DATE(day, true);
} // TO_DATE
/**
* Create SQL for formatted Date, Number
*
* @param columnName the column name in the SQL
* @param displayType Display Type
* @param AD_Language 6 character language setting (from Env.LANG_*)
*
* @return TRIM(TO_CHAR(columnName,'9G999G990D00','NLS_NUMERIC_CHARACTERS='',.'''))
* or TRIM(TO_CHAR(columnName,'TM9')) depending on DisplayType and Language
* @see org.compiere.util.DisplayType
* @see org.compiere.util.Env
*
* */
public static String TO_CHAR (String columnName, int displayType, String AD_Language)
{
if (columnName == null || AD_Language == null || columnName.length() == 0)
throw new IllegalArgumentException("Required parameter missing");
return s_cc.getDatabase().TO_CHAR(columnName, displayType, AD_Language);
} // TO_CHAR
/**
* Return number as string for INSERT statements with correct precision
* @param number number
* @param displayType display Type
* @return number as string
*/
public String TO_NUMBER (BigDecimal number, int displayType)
{
return s_cc.getDatabase().TO_NUMBER(number, displayType);
} // TO_NUMBER
/**
* Package Strings for SQL command in quotes
* @param txt String with text
* @return escaped string for insert statement (NULL if null)
*/
public static String TO_STRING (String txt)
{
return TO_STRING (txt, 0);
} // TO_STRING
/**
* Package Strings for SQL command in quotes.
* <pre>
* - include in ' (single quotes)
* - replace ' with ''
* </pre>
* @param txt String with text
* @param maxLength Maximum Length of content or 0 to ignore
* @return escaped string for insert statement (NULL if null)
*/
public static String TO_STRING (String txt, int maxLength)
{
if (txt == null || txt.length() == 0)
return "NULL";
// Length
String text = txt;
if (maxLength != 0 && text.length() > maxLength)
text = txt.substring(0, maxLength);
// copy characters (we need to look through anyway)
StringBuffer out = new StringBuffer();
out.append(QUOTE); // '
for (int i = 0; i < text.length(); i++)
{
char c = text.charAt(i);
if (c == QUOTE)
out.append("''");
else
out.append(c);
}
out.append(QUOTE); // '
//
return out.toString();
} // TO_STRING
/** Quote */
private static final char QUOTE = '\'';
/**
* Run Post Migration manually
* @param args ignored
*/
public static void main (String[] args)
{
Compiere.startup(true);
MSystem system = MSystem.get(Env.getCtx());
system.setIsJustMigrated(true);
afterMigration(Env.getCtx());
} // main
} // DB
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -