무엇을 얻었습니까?
DateType을 확장하려고하지는 않았지만 사용자 정의 영구 보존자가 정상적으로 작동했습니다. 아래는 내가 필요로하는 JSONArrayPersister입니다. 혼란스러운 부분은 메서드의 이름을 지정하는 것이지만 일단 제대로 설정되면 괜찮습니다. 당신의 기업에 대한 다음
package com.example.acme.persister;
import com.j256.ormlite.field.FieldType;
import com.j256.ormlite.field.SqlType;
import com.j256.ormlite.field.types.BaseDataType;
import com.j256.ormlite.support.DatabaseResults;
import org.json.JSONArray;
import org.json.JSONException;
import java.sql.SQLException;
public class JSONArrayPersister extends BaseDataType {
public static int DEFAULT_WIDTH = 1024;
private static final JSONArrayPersister singleTon = new JSONArrayPersister();
public static JSONArrayPersister getSingleton() {
return singleTon;
}
private JSONArrayPersister() {
super(SqlType.STRING, new Class<?>[] { String.class });
}
protected JSONArrayPersister(SqlType sqlType, Class<?>[] classes) {
super(sqlType, classes);
}
@Override
public Object parseDefaultString(FieldType fieldType, String defaultStr) {
try {
return new JSONArray(defaultStr);
} catch (JSONException ex)
{
return new JSONArray();
}
}
@Override
public Object resultToSqlArg(FieldType fieldType, DatabaseResults results, int columnPos) throws SQLException {
try {
return new JSONArray(results.getString(columnPos));
} catch (JSONException ex)
{
return new JSONArray();
}
}
@Override
public Object resultStringToJava(FieldType fieldType, String stringValue, int columnPos) throws SQLException {
return parseDefaultString(fieldType, stringValue);
}
@Override
public int getDefaultWidth() {
return DEFAULT_WIDTH;
}
}
:
@DatabaseField(persisterClass = JSONArrayPersister.class)
private JSONArray something;