| FazBrowse GitHub Viewer | Trending | | Home |
| Tools: [Download Repo ZIP] [Original HTTPS Page] |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
@@ -18,12 +18,11 @@ | |||
| 18 | 18 | import java.sql.DatabaseMetaData; | |
| 19 | 19 | import java.sql.DriverManager; | |
| 20 | 20 | import java.sql.ResultSet; | |
| 21 | + import java.sql.ResultSetMetaData; | ||
| 21 | 22 | import java.sql.SQLException; | |
| 22 | 23 | import java.sql.Statement; | |
| 23 | 24 | import java.sql.Timestamp; | |
| 24 | - import java.util.ArrayList; | ||
| 25 | 25 | import java.util.HashMap; | |
| 26 | - import java.util.List; | ||
| 27 | 26 | import java.util.Map; | |
| 28 | 27 | ||
| 29 | 28 | import com.alibaba.fastjson.JSON; | |
@@ -32,7 +31,6 @@ | |||
| 32 | 31 | import zuo.biao.apijson.JSONResponse; | |
| 33 | 32 | import zuo.biao.apijson.Log; | |
| 34 | 33 | import zuo.biao.apijson.StringUtil; | |
| 35 | - import zuo.biao.apijson.server.Pair; | ||
| 36 | 34 | import zuo.biao.apijson.server.Parser; | |
| 37 | 35 | ||
| 38 | 36 | /**executor for query(read) or update(write) MySQL database | |
@@ -215,69 +213,50 @@ public JSONObject execute(SQLConfig config) throws Exception { | |||
| 215 | 213 | return result; | |
| 216 | 214 | } | |
| 217 | 215 | ||
| 218 | - String[] columnArray = getColumnArray(config); | ||
| 219 | - if (columnArray == null || columnArray.length <= 0) { | ||
| 220 | - return null; | ||
| 221 | - } | ||
| 222 | - | ||
| 223 | 216 | rs = statement.executeQuery(sql); | |
| 224 | 217 | ||
| 225 | 218 | // final boolean cache = config.getCount() != 1; | |
| 226 | 219 | Map<Integer, JSONObject> resultMap = new HashMap<Integer, JSONObject>(); | |
| 227 | 220 | // Log.d(TAG, "select cache = " + cache + "; resultMap" + (resultMap == null ? "=" : "!=") + "null"); | |
| 228 | 221 | ||
| 229 | 222 | int index = -1; | |
| 223 | + | ||
| 224 | + ResultSetMetaData rsmd = rs.getMetaData(); | ||
| 225 | + final int length = rsmd.getColumnCount(); | ||
| 226 | + | ||
| 230 | 227 | while (rs.next()){ | |
| 231 | 228 | index ++; | |
| 232 | 229 | Log.d(TAG, "\n\n<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<\n select while (rs.next()){ index = " + index + "\n\n"); | |
| 233 | 230 | ||
| 234 | 231 | result = new JSONObject(true); | |
| 235 | 232 | Object value; | |
| 236 | - Object json; | ||
| 237 | - for (int i = 0; i < columnArray.length; i++) { | ||
| 238 | - if (columnArray[i] == null || columnArray[i].isEmpty() || columnArray[i].startsWith("_")) { | ||
| 233 | + | ||
| 234 | + for (int i = 1; i <= length; i++) { | ||
| 235 | + if (rsmd.getColumnName(i).startsWith("_")) { | ||
| 239 | 236 | Log.i(TAG, "select while (rs.next()){ ..." | |
| 240 | - + " >> columnArray[i] == " + columnArray[i] | ||
| 241 | - + " >> continue;"); | ||
| 237 | + + " >> rsmd.getColumnName(i).startsWith(_) >> continue;"); | ||
| 242 | 238 | continue; | |
| 243 | - }//允许 key:_alias, 但不允许_key, _key:alias | ||
| 244 | - columnArray[i] = Pair.parseEntry(columnArray[i]).getValue(); | ||
| 245 | - try { | ||
| 246 | - value = rs.getObject(rs.findColumn(columnArray[i])); | ||
| 247 | - } catch (Exception e) { | ||
| 248 | - value = null; | ||
| 249 | - Log.i(TAG, "select while (rs.next()){ ..." | ||
| 250 | - + " >> try { value = rs.getObject(rs.findColumn(columnArray[i])); ..." | ||
| 251 | - + " >> } catch (Exception e) {"); | ||
| 252 | - e.printStackTrace(); | ||
| 253 | 239 | } | |
| 254 | - // if (value == null) { | ||
| 255 | - // Log.i(TAG, "select while (rs.next()){ ..." + " >> value == null >> continue;"); | ||
| 256 | - // continue; | ||
| 257 | - // } | ||
| 240 | + | ||
| 241 | + value = rs.getObject(i); | ||
| 242 | + // Log.d(TAG, "name:" + rsmd.getColumnName(i)); | ||
| 243 | + // Log.d(TAG, "lable:" + rsmd.getColumnLabel(i)); | ||
| 244 | + // Log.d(TAG, "type:" + rsmd.getColumnType(i)); | ||
| 245 | + // Log.d(TAG, "typeName:" + rsmd.getColumnTypeName(i)); | ||
| 258 | 246 | ||
| 259 | - // Log.i(TAG, "select while (rs.next()) { >> for (int i = 0; i < columnArray.length; i++) {" | ||
| 260 | - // + "\n >>> columnArray[i]) = " + columnArray[i] + "; value = " + value); | ||
| 247 | + // Log.i(TAG, "select while (rs.next()) { >> for (int i = 0; i < length; i++) {" | ||
| 248 | + // + "\n >>> value = " + value); | ||
| 261 | 249 | ||
| 262 | 250 | if (value != null) { //数据库查出来的null和empty值都有意义,去掉会导致 Moment:{ @column:"content" } 部分无结果及中断数组查询! | |
| 263 | 251 | if (value instanceof Timestamp) { | |
| 264 | 252 | value = ((Timestamp) value).toString(); | |
| 265 | 253 | } | |
| 266 | - else if (value instanceof String) { | ||
| 267 | - try { | ||
| 268 | - json = JSON.parse((String) value); | ||
| 269 | - if (json != null && json instanceof JSON && StringUtil.isNotEmpty(json, true)) { | ||
| 270 | - value = json; | ||
| 271 | - } | ||
| 272 | - } catch (Exception e) { | ||
| 273 | - //太长 Log.i(TAG, "select while (rs.next()){ >> i = " | ||
| 274 | - // + i + " try { json = JSON.parse((String) value);" | ||
| 275 | - // + ">> } catch (Exception e) {\n" + e.getMessage()); | ||
| 276 | - } | ||
| 254 | + else if (value instanceof String && isJSONType(rsmd, i)) { //json String | ||
| 255 | + value = JSON.parse((String) value); | ||
| 277 | 256 | } | |
| 278 | 257 | } | |
| 279 | 258 | ||
| 280 | - result.put(columnArray[i], value); | ||
| 259 | + result.put(rsmd.getColumnLabel(i), value); | ||
| 281 | 260 | } | |
| 282 | 261 | ||
| 283 | 262 | resultMap.put(index, result); | |
@@ -296,31 +275,19 @@ else if (value instanceof String) { | |||
| 296 | 275 | return resultMap.get(position); | |
| 297 | 276 | } | |
| 298 | 277 | ||
| 299 | - | ||
| 300 | - /**获取要查询的字段名数组 | ||
| 301 | - * @param config | ||
| 278 | + /**判断是否为JSON类型 | ||
| 279 | + * @param rsmd | ||
| 280 | + * @param position | ||
| 302 | 281 | * @return | |
| 303 | - * @throws SQLException | ||
| 304 | 282 | */ | |
| 305 | - private String[] getColumnArray(SQLConfig config) throws SQLException { | ||
| 306 | - if (config == null) { | ||
| 307 | - return null; | ||
| 308 | - } | ||
| 309 | - String column = config.getColumn(); | ||
| 310 | - if (StringUtil.isNotEmpty(column, true)) { | ||
| 311 | - return StringUtil.split(column);//column.contains(",") ? column.split(",") : new String[]{column}; | ||
| 312 | - } | ||
| 313 | - | ||
| 314 | - List<String> list = new ArrayList<String>(); | ||
| 315 | - String table = config.getSQLTable(); | ||
| 316 | - ResultSet rs = metaData.getColumns(config.getSchema(), null, table, "%"); | ||
| 317 | - while (rs.next()) { | ||
| 318 | - Log.i(TAG, rs.getString(4)); | ||
| 319 | - list.add(rs.getString(4)); | ||
| 283 | + private boolean isJSONType(ResultSetMetaData rsmd, int position) { | ||
| 284 | + try { | ||
| 285 | + return rsmd.getColumnType(position) == 1 || rsmd.getColumnTypeName(position).toLowerCase().contains("json"); | ||
| 286 | + } catch (SQLException e) { | ||
| 287 | + e.printStackTrace(); | ||
| 320 | 288 | } | |
| 321 | - rs.close(); | ||
| 322 | - | ||
| 323 | - return list.toArray(new String[]{}); | ||
| 289 | + return false; | ||
| 324 | 290 | } | |
| 325 | 291 | ||
| 292 | + | ||
| 326 | 293 | } | |
| Back | FazBrowse Home | New Git URL |
0 commit comments