在数据库设计的时候,公司负责人将整型和浮点型的2位小数的金额都是用NUMBER这样的类型来存的,现在我的一个通用的DAOImpl类是这样写的:try {
Session session = SessionFactory.getSession();
tran = session.beginTransaction();
conn = session.connection();
pstmt = conn.prepareStatement(sql);
rs = pstmt.executeQuery();
ResultSetMetaData rsmd = rs.getMetaData();
int columnCount = rsmd.getColumnCount();
List<FieldVO> fields = new ArrayList<FieldVO>(columnCount);
FieldVO field = null;
for (int i = 1; i <= columnCount; i++) {
field = new FieldVO();
field.setName(rsmd.getColumnLabel(i).toLowerCase());
field.setInt(rsmd.getColumnTypeName(i).contains("NUMBER"));
field.setClob(rsmd.getColumnTypeName(i).contains("CLOB"));
field.setDate(rsmd.getColumnTypeName(i).contains("DATE"));
fields.add(field);
}
rsmd = null;
Map<String, Object> row = null;
while (rs.next()) {
row = new HashMap<String, Object>(columnCount);
for (FieldVO obj : fields) {
if (obj.isInt()) {
row.put(obj.getName(), rs.getInt(obj.getName()));
} else if(obj.isClob()){
row.put(obj.getName(),Common.clobToString(rs.getClob(obj.getName())));
} else if(obj.isDate()){
row.put(obj.getName(),Common.sqlTimestampToInt(rs.getTimestamp(obj.getName())));
}else {
row.put(obj.getName(),rs.getString(obj.getName()));
}
}
rows.add(row);
}我是根据(rsmd.getColumnTypeName(i).contains("NUMBER")这样来判断是什么类型,然后再决定用getInt还是getString之类的,但是Oracle的Number如果有小数的话,这样取后就还是按照getInt来取了,到底应该怎么做啊,怎么判断Nubmer是否有小数,Oracle这个Number真是让人头疼!!!
Session session = SessionFactory.getSession();
tran = session.beginTransaction();
conn = session.connection();
pstmt = conn.prepareStatement(sql);
rs = pstmt.executeQuery();
ResultSetMetaData rsmd = rs.getMetaData();
int columnCount = rsmd.getColumnCount();
List<FieldVO> fields = new ArrayList<FieldVO>(columnCount);
FieldVO field = null;
for (int i = 1; i <= columnCount; i++) {
field = new FieldVO();
field.setName(rsmd.getColumnLabel(i).toLowerCase());
field.setInt(rsmd.getColumnTypeName(i).contains("NUMBER"));
field.setClob(rsmd.getColumnTypeName(i).contains("CLOB"));
field.setDate(rsmd.getColumnTypeName(i).contains("DATE"));
fields.add(field);
}
rsmd = null;
Map<String, Object> row = null;
while (rs.next()) {
row = new HashMap<String, Object>(columnCount);
for (FieldVO obj : fields) {
if (obj.isInt()) {
row.put(obj.getName(), rs.getInt(obj.getName()));
} else if(obj.isClob()){
row.put(obj.getName(),Common.clobToString(rs.getClob(obj.getName())));
} else if(obj.isDate()){
row.put(obj.getName(),Common.sqlTimestampToInt(rs.getTimestamp(obj.getName())));
}else {
row.put(obj.getName(),rs.getString(obj.getName()));
}
}
rows.add(row);
}我是根据(rsmd.getColumnTypeName(i).contains("NUMBER")这样来判断是什么类型,然后再决定用getInt还是getString之类的,但是Oracle的Number如果有小数的话,这样取后就还是按照getInt来取了,到底应该怎么做啊,怎么判断Nubmer是否有小数,Oracle这个Number真是让人头疼!!!
解决方案 »
- java与mysql数据通信错误:com.mysql.jdbc.MysqlDataTruncation
- 求将mysql数据导出成excel文件的方法
- java Web Service 如何实现手机短信群发呢
- 求java 的Servlet.destroy()异常,寻求解决办法
- 有没有开源的web服务测试工具
- 求救,特急!JDBC连接Postgres数据库出错。
- java那个类可以访问局域网的域帐号
- 如何根据WSDL生成SOAP?
- 哪位能提供点websphere+oracle方面的文档资料?
- Jbuilder 的问题。
- jsp中文乱码问题,头疼死了!!!
- 急!!运行jsp程序的index.jsp只出现空白页。
你可以按String取出来,然后判断小数点后有没有非零数字,然后通过Integer.parseInt或者Float.parseFloat来转换