📄 createcompiere.java
字号:
} // for all columns
sourceColumns.close();
// Primary Key
ResultSet sourcePK = md.getPrimaryKeys(catalog, schema, table);
// TABLE_CAT=null, TABLE_SCHEM=REFERENCE, TABLE_NAME=A_ASSET, COLUMN_NAME=A_ASSET_ID, KEY_SEQ=1, PK_NAME=A_ASSET_KEY
first = true;
boolean hasPK = false;
while (sourcePK.next())
{
hasPK = true;
if (first)
sb.append(", CONSTRAINT ").append(sourcePK.getString("PK_NAME")).append(" PRIMARY KEY (");
else
sb.append(",");
first = false;
String columnName = sourcePK.getString("COLUMN_NAME");
sb.append(checkColumnName(columnName));
}
if (hasPK) // close constraint
sb.append(")"); // USING INDEX TABLESPACE INDX
sourcePK.close();
//
sb.append(")"); // close create table
}
catch (Exception ex)
{
log.log(Level.SEVERE, "createTable", ex);
return false;
}
// Execute Create Table
if (!executeCommands(new String[]{sb.toString()}, m_conn, false, true))
return true; // continue
// Create Inexes
createTableIndexes(mTable, md);
return createTableData(mTable);
} // createTable
/**
* Check Column Name
* @param columnName column name
* @return column name with correct case
*/
private String checkColumnName (String columnName)
{
return M_Element.getColumnName (columnName);
} // checkColumnName
/**
* Create Table Indexes
* @param mTable table
*/
private void createTableIndexes(M_Table mTable, DatabaseMetaData md)
{
String tableName = mTable.getTableName();
log.info(tableName);
String catalog = m_dbSource.getCatalog();
String schema = m_dbSource.getSchema();
String table = tableName.toUpperCase();
try
{
ResultSet sourceIndex = md.getIndexInfo(catalog, schema, table, false, false);
}
catch (Exception e)
{
}
} // createTableIndexes
/**
* Create/Copy Table Data
* @param mTable model table
* @return true if data created/copied
*/
private boolean createTableData (M_Table mTable)
{
boolean success = true;
int count = 0;
int errors = 0;
long start = System.currentTimeMillis();
// Get Table Data
String sql = "SELECT * FROM " + mTable.getTableName();
PreparedStatement pstmt = null;
try
{
pstmt = DB.prepareStatement (sql, mTable.get_TrxName());
ResultSet rs = pstmt.executeQuery ();
while (rs.next ())
{
if (createTableDataRow(rs, mTable))
count++;
else
errors++;
}
rs.close ();
pstmt.close ();
pstmt = null;
}
catch (Exception e)
{
log.log (Level.SEVERE, sql, e);
success = false;
}
try
{
if (pstmt != null)
pstmt.close ();
pstmt = null;
}
catch (Exception e)
{
pstmt = null;
}
long elapsed = System.currentTimeMillis() - start;
log.config("Inserted=" + count + " - Errors=" + errors
+ " - " + elapsed + " ms");
return success;
} // createTableData
/**
* Create Table Data Row
* @param rs result set
* @param mTable table
* @return true if created
*/
private boolean createTableDataRow (ResultSet rs, M_Table mTable)
{
StringBuffer insert = new StringBuffer ("INSERT INTO ")
.append(mTable.getTableName()).append(" (");
StringBuffer values = new StringBuffer ();
//
M_Column[] columns = mTable.getColumns(false);
for (int i = 0; i < columns.length; i++)
{
if (i != 0)
{
insert.append(",");
values.append(",");
}
M_Column column = columns[i];
String columnName = column.getColumnName();
insert.append(columnName);
//
int dt = column.getAD_Reference_ID();
try
{
Object value = rs.getObject(columnName);
if (rs.wasNull())
{
values.append("NULL");
}
else if (columnName.endsWith("_ID") // Record_ID, C_ProjectType defined as Button
|| DisplayType.isNumeric(dt)
|| (DisplayType.isID(dt) && !columnName.equals("AD_Language")))
{
BigDecimal bd = rs.getBigDecimal(columnName);
String s = m_dbTarget.TO_NUMBER(bd, dt);
values.append(s);
}
else if (DisplayType.isDate(dt))
{
Timestamp ts = rs.getTimestamp(columnName);
String tsString = m_dbTarget.TO_DATE(ts, dt == DisplayType.Date);
values.append(tsString);
}
else if (DisplayType.isLOB(dt))
{
// ignored
values.append("NULL");
}
else if (DisplayType.isText(dt) || dt == DisplayType.YesNo
|| dt == DisplayType.List || dt == DisplayType.Button
|| columnName.equals("AD_Language"))
{
String s = rs.getString(columnName);
values.append(DB.TO_STRING(s));
}
else
{
log.warning("Unknown DisplayType=" + dt
+ " - " + value + " [" + value.getClass().getName() + "]");
values.append("NuLl");
}
}
catch (Exception e)
{
log.log(Level.SEVERE, columnName, e);
}
} // for all columns
//
insert.append(") VALUES (").append(values).append(")");
return executeCommands(new String[]{insert.toString()},
m_conn, false, false); // do not convert as text is converted
} // createTableDataRow
/**
* Enable Constraints
* @param list list
* @return true if constraints enabled/created
*/
private boolean enableConstraints (ArrayList list)
{
log.info("");
return false;
} // enableConstraints
private void databaseBuild()
{
// Build Script
String fileName = "C:\\Compiere\\compiere-all2\\db\\database\\DatabaseBuild.sql";
File file = new File (fileName);
if (!file.exists())
log.severe("No file: " + fileName);
// FileReader reader = new FileReader (file);
} // databaseBuild
/**
* Get Connection
* @param asSystem if true execute as db system administrator
* @return connection or null
*/
private Connection getConnection (boolean asSystem, boolean createNew)
{
if (!createNew && m_conn != null)
return m_conn;
//
String dbUrl = m_dbTarget.getConnectionURL(m_databaseHost, m_databasePort,
(asSystem ? m_dbTarget.getSystemDatabase(m_databaseName) : m_databaseName),
(asSystem ? m_dbTarget.getSystemUser() : m_compiereUser));
try
{
if (asSystem)
m_conn = m_dbTarget.getDriverConnection(dbUrl, m_dbTarget.getSystemUser(), m_systemPassword);
else
m_conn = m_dbTarget.getDriverConnection(dbUrl, m_compiereUser, m_compierePassword);
}
catch (Exception e)
{
log.log(Level.SEVERE, dbUrl, e);
}
return m_conn;
} // getConnection
/**************************************************************************
* Execute Commands
* @param cmds array of SQL commands
* @param conn connection
* @param batch tf true commit as batch
* @param doConvert convert to DB specific notation
* @return true if success
*/
private boolean executeCommands (String[] cmds, Connection conn,
boolean batch, boolean doConvert)
{
if (cmds == null || cmds.length == 0)
{
log.warning("No Commands");
return false;
}
Statement stmt = null;
String cmd = null;
String cmdOriginal = null;
try
{
if (conn == null)
{
conn = getConnection(false, false);
if (conn == null)
return false;
}
if (conn.getAutoCommit() == batch)
conn.setAutoCommit(!batch);
stmt = conn.createStatement();
// Commands
for (int i = 0; i < cmds.length; i++)
{
cmd = cmds[i];
cmdOriginal = cmds[i];
if (cmd == null || cmd.length() == 0)
continue;
//
if (cmd.indexOf('@') != -1)
{
cmd = Util.replace(cmd, "@SystemPassword@", m_systemPassword);
cmd = Util.replace(cmd, "@CompiereUser@", m_compiereUser);
cmd = Util.replace(cmd, "@CompierePassword@", m_compierePassword);
cmd = Util.replace(cmd, "@SystemPassword@", m_systemPassword);
cmd = Util.replace(cmd, "@DatabaseName@", m_databaseName);
if (m_databaseDevice != null)
cmd = Util.replace(cmd, "@DatabaseDevice@", m_databaseDevice);
}
if (doConvert)
cmd = m_dbTarget.convertStatement(cmd);
writeLog(cmd);
log.finer(cmd);
int no = stmt.executeUpdate(cmd);
log.finest("# " + no);
}
//
stmt.close();
stmt = null;
//
if (batch)
conn.commit();
//
return true;
}
catch (Exception e)
{
String msg = e.getMessage();
if (msg == null || msg.length() == 0)
msg = e.toString();
msg += " (";
if (e instanceof SQLException)
{
msg += "State=" + ((SQLException)e).getSQLState()
+ ",ErrorCode=" + ((SQLException)e).getErrorCode();
}
msg += ")";
if (cmdOriginal != null && !cmdOriginal.equals(cmd))
msg += " - " + cmdOriginal;
msg += "\n=>" + cmd;
log.log(Level.SEVERE, msg);
}
// Error clean up
try
{
if (stmt != null)
stmt.close();
}
catch (SQLException e1)
{
log.log(Level.SEVERE, "close statement", e1);
}
stmt = null;
return false;
} // execureCommands
/**
* Write to File Log
* @param cmd cmd
*/
private void writeLog (String cmd)
{
try
{
if (m_writer == null)
{
File file = File.createTempFile("create", ".log");
m_writer = new PrintWriter(new FileWriter(file));
log.info(file.toString());
}
m_writer.println(cmd);
m_writer.flush();
}
catch (Exception e)
{
log.severe(e.toString());
}
} // writeLog
private PrintWriter m_writer = null;
/**************************************************************************
* Create DB
* @param args
*/
public static void main (String[] args)
{
Compiere.startup(true);
CLogMgt.setLevel(Level.FINE);
CLogMgt.setLoggerLevel(Level.FINE,null);
// C_UOM_Conversion
// I_BankStatement
//
// Sybase
CreateCompiere cc = new CreateCompiere (Database.DB_SYBASE, "dev2", 0, "");
cc.setCompiereUser("compiere", "compiere");
cc.setDatabaseName("compiere", "compiere");
if (!cc.testConnection())
return;
cc.cleanStart();
//
// cc.copy(null, false);
cc.copy("TableName > 'C_RfQResponseLineQty'", false);
} // main
} // CreateCompiere
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -