User.java
Код: Выделить всё
public class User {
private int userId;
private String userName;
private String userEmail;
private String userPassword;
// getters and setters
}
Код: Выделить всё
public class Post {
private int postId;
private String postCategory;
private String postTitle;
private String post;
private int userId; // foreign key
// getters and setters
}
Код: Выделить всё
createTable()
Код: Выделить всё
public String createTable(Class users) throws IllegalAccessException {
String message = "";
String className = printClassName(User.class);
StringBuilder sql = new StringBuilder("CREATE TABLE IF NOT EXISTS " + className);
sql.append("(");
// getting fields
Field[] fields = users.getDeclaredFields();
for ( int i = 0; i < fields.length; i++ ) {
if ( fields[i].getType() == int.class && fields[i].getName().equals("userId")) {
sql.append(fields[i].getName()).append(" INT AUTO_INCREMENT NOT NULL");
} else if ( fields[i].getType() == int.class ) {
sql.append(fields[i].getName()).append(" INT NOT NULL");
} else if ( fields[i].getType() == String.class ) {
sql.append(fields[i].getName()).append(" VARCHAR(255) NOT NULL");
}
if ( i < fields.length - 1 ) {
sql.append(", ");
}
if ( i == fields.length - 1 ) {
sql.append("PRIMARY KEY (").append(fields[0].getName()).append(")");
}
}
sql.append(");");
System.out.println("Executing Sql Query: "+ sql.toString());
try {
int i = 0;
dataBaseConnection.pstmt = dataBaseConnection.conn.prepareStatement(sql.toString());
i = dataBaseConnection.pstmt.executeUpdate();
if ( i > 0 ) {
message = "table created with name: " + className + " successfully...";
} else {
message = "something went wrong...";
}
} catch (Exception e) {
e.printStackTrace();
}
return message;
}
Этот метод отлично подходит для создания таблиц без внешнего ключа. ключи, но я не понимаю логики для ключей с внешним ключом. Я хочу создать метод createTable(), который хорошо работает для обоих типов таблиц. Я могу выполнить эту задачу, создавая аннотации, но аннотации мне не нужны, потому что каждый раз аннотацию необходимо сначала обработать. Я ищу альтернативное решение.
Подробнее здесь: https://stackoverflow.com/questions/786 ... -key-field