exoDatasource = datasource;
}
public <T extends DBObject> void createTable(Class<T> type, boolean dropIfExist) throws Exception
{
Table table = type.getAnnotation(Table.class);
if (table == null)
{
throw new Exception("Cannot find the annotation for class " + type.getClass().getName());
}
StringBuilder builder = new StringBuilder(1000);
builder.append("CREATE TABLE ").append(table.name()).append(" (");
appendId(builder);
TableField[] fields = table.field();
for (int i = 0; i < fields.length; i++)
{
TableField field = fields[i];
String fieldType = field.type();
if ("string".equals(fieldType))
{
appendStringField(field, builder);
}
else if ("int".equals(fieldType))
{
appendIntegerField(field, builder);
}
else if ("long".equals(fieldType))
{
appendLongField(field, builder);
}
else if ("float".equals(fieldType))
{
appendFloatField(field, builder);
}
else if ("double".equals(fieldType))
{
appendDoubleField(field, builder);
}
else if ("boolean".equals(fieldType))
{
appendBooleanField(field, builder);
}
else if ("date".equals(fieldType))
{
appendDateField(field, builder);
}
else if ("binary".equals(fieldType))
{
appendBinaryField(field, builder);
}
if (i != fields.length - 1)
builder.append(", ");
}
builder.append(")");
// print out the sql string
Connection conn = exoDatasource.getConnection();
conn.setAutoCommit(false);
Statement statement = conn.createStatement();
LOG.debug("QUERY: \n " + builder + "\n");
if (dropIfExist && hasTable(type))
statement.execute("DROP TABLE IF EXISTS " + table.name());
statement.execute(builder.toString());
statement.close();
conn.commit();
exoDatasource.closeConnection(conn);
}