· 8 years ago · Feb 10, 2018, 12:10 PM
1import java.lang.reflect.Field;
2import java.util.*;
3
4
5class Klasa1 {
6 public int int1;
7 public long long1;
8 public Integer int2;
9 public Long long2;
10
11 public float float1;
12 public double double1;
13 public Float float2;
14 public Double double2;
15
16 public String string;
17
18 public boolean boolean1;
19 public Boolean boolean2;
20}
21
22
23class Klasa2 {
24 public short shortZle;
25
26 public Byte byteZle;
27
28 private Integer intZle;
29
30 protected Boolean booleanZle;
31
32 Long longZle;
33
34 public Double doubleJedynyDobry;
35}
36
37class SQLiteHelper implements SQLiteHelperInterface {
38
39 private String getIntegerValue(Object obj, Field field, Class<?> fieldType) {
40 if (fieldType != null) {
41 try {
42 if (fieldType.isAssignableFrom(Integer.class)) {
43 Integer val = (Integer) field.get(obj);
44 return val != null ? String.valueOf(val) + "," : " NULL,";
45 } else if (fieldType.isAssignableFrom(int.class)) {
46 int val = field.getInt(obj);
47 return " " + String.valueOf(val) + ",";
48 } else if (fieldType.isAssignableFrom(Long.class)) {
49 Long val = (Long) field.get(obj);
50 return val != null ? " " +String.valueOf(val) + "," : " NULL,";
51 } else if (fieldType.isAssignableFrom(long.class)) {
52 long val = field.getLong(obj);
53 return " " + String.valueOf(val) + ",";
54 } else if (fieldType.isAssignableFrom(Boolean.class)) {
55 Boolean val = (Boolean) field.get(obj);
56 if (val == null) {
57 return " NULL,";
58 } else if (val) {
59 return " 1,";
60 } else
61 return " 0,";
62 } else if (fieldType.isAssignableFrom(boolean.class)) {
63 boolean val = field.getBoolean(obj);
64 return val ? " 1," : " 0,";
65 }
66
67 } catch (IllegalAccessException e) {
68 }
69 }
70
71 return null;
72 }
73
74 private String getRealValue(Object obj, Field field, Class<?> fieldType) {
75 if (fieldType != null) {
76 try {
77 if (fieldType.isAssignableFrom(Double.class)) {
78 Double val = (Double)field.get(obj);
79 if (val != null) {
80 return new StringBuffer().append(" ").append(val).toString() + ",";
81 } else {
82 return " NULL,";
83 }
84 } else if (fieldType.isAssignableFrom(double.class)) {
85 double val = field.getDouble(obj);
86 return " " + new StringBuffer().append(val).toString() + ",";
87 } else if (fieldType.isAssignableFrom(Float.class)) {
88 Float val = (Float) field.get(obj);
89 if (val != null) {
90 return new StringBuffer().append(" ").append(val).toString() + ",";
91 } else {
92 return " NULL,";
93 }
94 } else if (fieldType.isAssignableFrom(float.class)) {
95 float val = field.getFloat(obj);
96 return " " + new StringBuffer().append(val).toString() + ",";
97 }
98
99 } catch (IllegalAccessException e) {
100 }
101 }
102 return null;
103 }
104
105 private String getTextValue(Object obj, Field field, Class<?> fieldType) {
106 if (fieldType != null) {
107 try {
108 if (fieldType.isAssignableFrom(String.class)) {
109 String val = (String)field.get(obj);
110 if( val != null) {
111 return " \'" + val + "\',";
112 } else {
113 return " NULL,";
114 }
115 }
116 } catch (IllegalAccessException e) {}
117 }
118 return null;
119 }
120
121 @Override
122 public String createTable(Object o) {
123 String query = "CREATE TABLE IF NOT EXISTS ";
124 query += o.getClass().getName();
125 query += " (";
126 Field[] publicClassFields = o.getClass().getFields();
127
128 for (int i = 0; i < publicClassFields.length; i++) {
129 if (publicClassFields[i] != null) {
130 Class<?> fieldType = publicClassFields[i].getType();
131 String fieldName = publicClassFields[i].getName();
132 if (fieldType.isAssignableFrom(Integer.class) ||
133 fieldType.isAssignableFrom(int.class) ||
134 fieldType.isAssignableFrom(Long.class) ||
135 fieldType.isAssignableFrom(long.class) ||
136 fieldType.isAssignableFrom(Boolean.class) ||
137 fieldType.isAssignableFrom(boolean.class)) {
138 // do zrobienia
139 IndexAnnotation indexAnnotation = publicClassFields[i].getAnnotation(IndexAnnotation.class);
140 KeyAnnotation keyAnnotation = publicClassFields[i].getAnnotation(KeyAnnotation.class);
141 ForeignKeyAnnotation foreignKeyAnnotation = publicClassFields[i].getAnnotation(ForeignKeyAnnotation.class);
142 if ( indexAnnotation != null) {
143 Boolean indexNameUnique = indexAnnotation.isUnique();
144 if (indexNameUnique) {
145// TODO
146// query +=
147 }
148
149 } else if (keyAnnotation != null) {
150 if(keyAnnotation.autoIncrement()) {
151 query += fieldName + " INTEGER PRIMARY KEY AUTOINCREMENT, ";
152 } else {
153 query += fieldName + " INTEGER NOT NULL PRIMARY KEY, ";
154 }
155 } else if(foreignKeyAnnotation != null) {
156 query += fieldName + " INTEGER, FOREIGN KEY(" + fieldName + ") REFERENCES";
157 } else {
158 query += fieldName + " INTEGER, ";
159 }
160 } else if (fieldType.isAssignableFrom(Double.class) ||
161 fieldType.isAssignableFrom(double.class) ||
162 fieldType.isAssignableFrom(Float.class) ||
163 fieldType.isAssignableFrom(float.class)) {
164 query += fieldName + " REAL, ";
165 } else if (fieldType.isAssignableFrom(String.class)) {
166 query += fieldName + " TEXT, ";
167 }
168 }
169 }
170
171 query = query.substring(0, query.length() - 2);
172
173 query += " );";
174
175 return query;
176 }
177
178 @Override
179 public String insert(Object o) {
180 String query = "INSERT INTO ";
181 query += o.getClass().getName();
182 query += " (";
183 Field[] publicClassFields = o.getClass().getFields();
184
185 String columns = " ";
186 String values = "";
187
188 for (int i = 0; i < publicClassFields.length; i++) {
189 if (publicClassFields[i] != null) {
190 Class<?> fieldType = publicClassFields[i].getType();
191 String fieldName = publicClassFields[i].getName();
192 if (fieldType.isAssignableFrom(Integer.class) ||
193 fieldType.isAssignableFrom(int.class) ||
194 fieldType.isAssignableFrom(Long.class) ||
195 fieldType.isAssignableFrom(long.class) ||
196 fieldType.isAssignableFrom(Boolean.class) ||
197 fieldType.isAssignableFrom(boolean.class)) {
198 columns += fieldName + ", ";
199
200 values += getIntegerValue(o, publicClassFields[i], fieldType);
201
202 } else if (fieldType.isAssignableFrom(Double.class) ||
203 fieldType.isAssignableFrom(double.class) ||
204 fieldType.isAssignableFrom(Float.class) ||
205 fieldType.isAssignableFrom(float.class)) {
206
207 columns += fieldName + ", ";
208
209 values += getRealValue(o, publicClassFields[i], fieldType);
210
211
212 } else if (fieldType.isAssignableFrom(String.class)) {
213 columns += fieldName + ", ";
214
215 values += getTextValue(o, publicClassFields[i], fieldType);
216
217 }
218 }
219 }
220
221 columns = columns.substring(0, columns.length() - 2);
222 values = values.substring(0, values.length() - 1);
223
224 query += columns + " ) VALUES (" + values + ");";
225
226
227 return query;
228 }
229
230 public static void main(String [] args)
231 {
232 Klasa1 klasa1 = new Klasa1();
233 Klasa2 klasa2 = new Klasa2();
234 SQLiteHelper sqLiteHelper = new SQLiteHelper();
235 System.out.println(sqLiteHelper.createTable(klasa1));
236 System.out.println(sqLiteHelper.insert(klasa1));
237 System.out.println(sqLiteHelper.createTable(klasa2));
238 System.out.println(sqLiteHelper.insert(klasa2));
239 }
240
241}