-

   rss_rss_hh_new

 - e-mail

 

 -

 LiveInternet.ru:
: 17.03.2011
:
:
: 51

:


Java: SQL-

, 15 2017 . 04:25 +
SQL- Java. , , .

Java- Java Reflection API.

, .


, ,


1


, Person:
public static class Person {
    public String firstName;
    public String lastName;
    public int age;
}

SQL- :
System.out.println(MySQLQueryGenerator.generateCreateTableQuery(Person.class));

, :
CREATE TABLE  `Person_table` (
`firstName` VARCHAR(256),
`lastName` VARCHAR(256),
`age` INT);

2


, :
@IfNotExists //   CREATE- IF NOT EXISTS
@TableName("persons") //   
public static class Person {
    @AutoIncrement //   AUTO_INCREMENT
    @PrimaryKey //      PRIMARY KEY
    public int id;
    @NotNull //   NOT NULL
    public long createTime;
    @NotNull
    public String firstName;
    @NotNull
    public String lastName;
    @Default("21") //   
    public Integer age;
    @Default("")
    @MaxLength(1024) //  VARCHAR
    public String address;
    @ColumnName("letter") //   
    public Character someLetter;
}

SQL-:
CREATE TABLE IF NOT EXISTS `persons` (
`id` INT AUTO_INCREMENT,
`createTime` BIGINT NOT NULL,
`firstName` VARCHAR(256) NOT NULL,
`lastName` VARCHAR(256) NOT NULL,
`age` INT DEFAULT '21',
`address` VARCHAR(1024) DEFAULT '',
`letter` VARCHAR(1),
PRIMARY KEY (`id`));

3


MySQLClient, SQL-.
: createTable, alterTable, insert, update, select.
:
MySQLClient client = new MySQLClient("login", "password", "dbName");
client.connect(); //   

client.createTable(PersonV1.class); //  
client.alterTable(PersonV1.class, PersonV2.class); //  

PersonV2 person = new PersonV2();
person.createTime = new Date().getTime();
person.firstName = "Ivan";
person.lastName = "Ivanov";
client.insert(person); //    

person.age = 28;
person.createTime = new Date().getTime();
person.address = "Zimbabve";
client.insert(person);

person.createTime = new Date().getTime();
person.firstName = "John";
person.lastName = "Johnson";
person.someLetter = 'i';
client.insert(person);

List selected = client.select(PersonV2.class); //     
System.out.println("Rows: " + selected.size());
for (Object obj: selected) {
    System.out.println(obj);
}

client.disconnect(); //   



Reflection API public -static . ( , , String), Field Column, . Java MySQL . . Column SQL-:
public static String generateCreateTableQuery(Class clazz) throws MoreThanOnePrimaryKeyException {
        List columnList = new ArrayList<>();
        Field[] fields = clazz.getFields(); //    

        for (Field field: fields) {
            int modifiers = field.getModifiers();
            if (Modifier.isPublic(modifiers) && !Modifier.isStatic(modifiers)) { //  public   static
                Column column = Column.fromField(field); //  Field  Column
                if (column!=null) columnList.add(column);
            }
        }

        /*   Column   */
}

/***************************/

public static Column fromField(Field field) {
    Class fieldType = field.getType(); //    
    ColumnType columnType;
    if (fieldType == boolean.class || fieldType == Boolean.class) {
        columnType = ColumnType.BOOL;
    } /*     */ {
    } else if (fieldType==String.class) {
        columnType = ColumnType.VARCHAR;
    } else { //      
        return null;
    }

    Column column = new Column();
    column.columnType = columnType;
    column.name = field.getName();
    column.isAutoIncrement = field.isAnnotationPresent(AutoIncrement.class);
    /*    */
    if (field.isAnnotationPresent(ColumnName.class)) { //     
        ColumnName columnName = (ColumnName)field.getAnnotation(ColumnName.class);
        String name = columnName.value();
        if (!name.trim().isEmpty()) column.name = name;
    }

    return column;
}

ALTER TABLE, INSERT UPDATE. Column :
Column column = Column.fromField(field);
if (column!=null) {
    if (column.isAutoIncrement) continue;
    Object value = field.get(obj);
    if (value==null && column.hasDefaultValue) continue; //   :            
    if (column.isNotNull && value==null) {
        throw new NotNullColumnHasNullValueException();
    }
    String valueString = value!=null ? "'" + value.toString().replace("'","\'") + "'" : "NULL";
    String setValueString = "`"+column.name+"`="+valueString;
    valueStringList.add(setValueString);
}

ResultSetExtractor, extractResultSet(ResultSet resultSet, Class clazz) resultSet clazz. , .

github . .
Original source: habrahabr.ru (comments, light).

https://habrahabr.ru/post/330938/

:  

: [1] []
 

:
: 

: ( )

:

  URL