Skip to content

Instantly share code, notes, and snippets.

@dkirrane
Last active June 25, 2025 18:29
Show Gist options
  • Save dkirrane/a5f827fd36288c19ae6dfbfc00079c59 to your computer and use it in GitHub Desktop.
Save dkirrane/a5f827fd36288c19ae6dfbfc00079c59 to your computer and use it in GitHub Desktop.
Oracle Faker
import java.sql.*;
import java.time.LocalDateTime;
import java.util.*;
import com.github.javafaker.Faker;
public class OracleTableFaker {
public static void main(String[] args) throws Exception {
Faker faker = new Faker();
// --- SET THESE ---
String url = "jdbc:oracle:thin:@//HOST:PORT/SERVICE"; // e.g., @//localhost:1521/XEPDB1
String user = "your_username";
String password = "your_password";
String tableName = "USERS";
// --- Connect ---
Class.forName("oracle.jdbc.driver.OracleDriver");
try (Connection conn = DriverManager.getConnection(url, user, password)) {
DatabaseMetaData meta = conn.getMetaData();
// --- Get column metadata ---
ResultSet rs = meta.getColumns(null, user.toUpperCase(), tableName.toUpperCase(), null);
List<ColumnInfo> columns = new ArrayList<>();
while (rs.next()) {
String columnName = rs.getString("COLUMN_NAME");
String typeName = rs.getString("TYPE_NAME");
int dataType = rs.getInt("DATA_TYPE");
columns.add(new ColumnInfo(columnName, typeName, dataType));
}
if (columns.isEmpty()) {
System.out.println("No columns found or table doesn't exist.");
return;
}
// --- Generate and print INSERT statements ---
for (int i = 0; i < 5; i++) { // insert 5 fake rows
StringBuilder insert = new StringBuilder("INSERT INTO " + tableName + " (");
StringBuilder values = new StringBuilder("VALUES (");
for (int j = 0; j < columns.size(); j++) {
ColumnInfo col = columns.get(j);
insert.append(col.name);
values.append(fakeValueFor(col, faker));
if (j < columns.size() - 1) {
insert.append(", ");
values.append(", ");
}
}
insert.append(") ");
values.append(");");
String fullInsert = insert.toString() + values.toString();
System.out.println(fullInsert);
}
}
}
// --- ColumnInfo class to hold metadata ---
static class ColumnInfo {
String name;
String typeName;
int sqlType;
ColumnInfo(String name, String typeName, int sqlType) {
this.name = name;
this.typeName = typeName;
this.sqlType = sqlType;
}
}
// --- Generate fake value based on SQL type ---
static String fakeValueFor(ColumnInfo col, Faker faker) {
switch (col.sqlType) {
case Types.VARCHAR:
case Types.CHAR:
return "'" + faker.lorem().characters(8) + "'";
case Types.INTEGER:
case Types.NUMERIC:
case Types.DECIMAL:
case Types.BIGINT:
case Types.SMALLINT:
return String.valueOf(faker.number().numberBetween(1, 9999));
case Types.TIMESTAMP:
case Types.DATE:
return "TO_DATE('" + java.sql.Date.valueOf(LocalDateTime.now().toLocalDate()) + "', 'YYYY-MM-DD')";
case Types.FLOAT:
case Types.DOUBLE:
return String.valueOf(faker.number().randomDouble(2, 1, 100));
default:
return "NULL"; // fallback for unsupported types
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment