Last active
June 25, 2025 18:29
-
-
Save dkirrane/a5f827fd36288c19ae6dfbfc00079c59 to your computer and use it in GitHub Desktop.
Oracle Faker
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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