JDK+JDBC+MySQL实例及注意事项
MySQL | JDK |
tinyint(1) | boolean |
int unsigined | long |
datetime | java.sql.Timestamp |
varchar | String |
/** * Using reflection to storage the result from database into Bean class. * */ public static List<Object> resultSetToList(ResultSet rs, Class<?> cls) { Method[] methods = cls.getDeclaredMethods(); int methodLength = methods.length; int index; Map<String, Integer> map = new HashMap<String, Integer>(); // record all methods name in a HashMap, for quickly locate. for (index = 0; index < methodLength; index++) { map.put(methods[index].getName().toLowerCase(), index); } ResultSetMetaData meta = null; Object obj = null; List<Object> list = new ArrayList<Object>(); try { meta = rs.getMetaData(); int colCount = meta.getColumnCount(); while (rs.next()) { obj = cls.newInstance(); for (int i = 1; i <= colCount; i++) { String colName = meta.getColumnName(i); String setMethodName = "set" + colName; // System.out.println(setMethodName); int j = map.get(setMethodName.toLowerCase()); //get index of method array setMethodName = methods[j].getName(); Object value = rs.getObject(colName); if(value == null){ continue; } try { Method setMethod = obj.getClass().getMethod(setMethodName, value.getClass()); setMethod.invoke(obj, value); } catch (Exception e) { System.out.println(setMethodName + " exception"); e.printStackTrace(); } } list.add(obj); } } catch (InstantiationException | IllegalAccessException | SQLException e) { e.printStackTrace(); } return list; }
mysql> describe cake; +--------------+---------------------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +--------------+---------------------+------+-----+---------+-------+ | name | varchar(20) | NO | PRI | NULL | | | serialNumber | int(10) unsigned | YES | | NULL | | | buildDate | datetime | YES | | NULL | | | isSweet | tinyint(1) unsigned | YES | | NULL | | +--------------+---------------------+------+-----+---------+-------+
mysql> select * from cake; +--------+--------------+---------------------+---------+ | name | serialNumber | buildDate | isSweet | +--------+--------------+---------------------+---------+ | Danisa | 2021344 | 2013-11-19 10:20:00 | 1 | | Orion | 2004720 | 2014-06-29 22:00:00 | 0 | +--------+--------------+---------------------+---------+
private String name; private long serialNumber; private Timestamp buildDate; private boolean isSweet;
2)Bean中特殊值类型变量的Setter的设计细节:
public void setSerialNumber(Long /*long*/ serialNumber) { //Type was java.lang.Long but not 'long'. this. serialNumber = serialNumber; }
public void /*setSweet*/setIsSweet( /*boolean*/Boolean isSweet) { // Type was java.lang.Boolean but not boolean this. isSweet = isSweet; }
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。