zoukankan      html  css  js  c++  java
  • 如何从结果集中遍历得到一条条的数据?

    平常我们遍历结果集的时候,都必须创建一个实体bean,然后将结果集遍历的时候通过set方法放到这个实体bean对象中.

     1 String sql="select * from book"; 
     2 try{
     3 Connection con = MyConnection.getConnection();
     4 Statement statement = con.createStatement();
     5 ResultSet resultSet = statement.executeQuery(sql);
     6 // ResultSetMetaData rsmd = resultSet.getMetaData();
     7 // int count = rsmd.getColumnCount();
     8  while(resultSet.next())
     9 {
    10 Book book = new Book();
    11 book.setBookName(resultSet.getString("bookName"));
    12  book.setPrice(resultSet.getString("price")); 
    13 book.setPicUrl(resultSet.getString("picUrl"));
    14  list.add(book);
    15  }catch(SQLException e)
    16 { e.printStackTrace();
    17  } catch (ClassNotFoundException e) { 
    18 e.printStackTrace();
    19  }

    但是这种遍历结果集局限性很多,如果我们想通过第三方去查询别的数据库呢?难道我们还要把他们实体类通通拷贝过来么?  或者说我们每次查询都要提前知道查询的字段,有没有方法不用实体bean,我们只要数据,要实体bean做什么?

    下面的方法,可以借鉴.

     1   /**
     2      * 把ResultSet中取出的数据转换为相应的数据值字符串
     3      * 输出:如果成功执行,返回True,否则返回False,并且在Error中设置错误的详细信息
     4      * @param rsmd ResultSetMetaData
     5      * @param rs ResultSet
     6      * @param i int
     7      * @return String
     8      */
     9     public String getDataValue(ResultSetMetaData rsmd, ResultSet rs, int i)
    10     {
    11         String strValue = "";
    12 
    13         try
    14         {
    15             int dataType = rsmd.getColumnType(i);
    16             String name = rsmd.getColumnTypeName(i);
    17             System.out.println("sql类型名称为:"+name);
    18             int dataScale = rsmd.getScale(i);
    19             int dataPrecision = rsmd.getPrecision(i);
    20             //数据类型为字符
    21             if ((dataType == Types.CHAR) || (dataType == Types.VARCHAR))
    22             {
    23                 //由于存入数据库的数据是GBK模式,因此没有必要做一次unicodeToGBK
    24 //                strValue = StrTool.unicodeToGBK(rs.getString(i));
    25                 strValue = rs.getString(i);
    26             }
    27             //数据类型为日期、时间
    28             else if ((dataType == Types.TIMESTAMP) || (dataType == Types.DATE))
    29             {
    30                 strValue = PubFun.getString(rs.getDate(i));
    31             }
    32             //数据类型为浮点
    33             else if ((dataType == Types.DECIMAL) || (dataType == Types.FLOAT))
    34             {
    35                 //strValue = String.valueOf(rs.getFloat(i));
    36                 //采用下面的方法使得数据输出的时候不会产生科学计数法样式
    37                 strValue = String.valueOf(rs.getBigDecimal(i));
    38                 //去零处理
    39                 strValue = PubFun.getInt(strValue);
    40             }
    41             //数据类型为整型
    42             else if ((dataType == Types.INTEGER) || (dataType == Types.SMALLINT))
    43             {
    44                 strValue = String.valueOf(rs.getInt(i));
    45                 strValue = PubFun.getInt(strValue);
    46             }
    47             //数据类型为浮点
    48             else if (dataType == Types.NUMERIC || dataType == Types.BIGINT)
    49             {
    50                 if (dataScale == 0)
    51                 {
    52                     if (dataPrecision == 0)
    53                     {
    54                         //strValue = String.valueOf(rs.getDouble(i));
    55                         //采用下面的方法使得数据输出的时候不会产生科学计数法样式
    56                         strValue = String.valueOf(rs.getBigDecimal(i));
    57                     }
    58                     else
    59                     {
    60                         strValue = String.valueOf(rs.getLong(i));
    61                     }
    62                 }
    63                 else
    64                 {
    65                     //strValue = String.valueOf(rs.getDouble(i));
    66                     //采用下面的方法使得数据输出的时候不会产生科学计数法样式
    67                     strValue = String.valueOf(rs.getBigDecimal(i));
    68                 }
    69                 strValue = PubFun.getInt(strValue);
    70             }
    71 
    72         }
    73         catch (SQLException ex)
    74         {
    75             ex.printStackTrace();
    76         }
    77 
    78         return PubFun.cTrim(strValue);
    79     }

    若有别的更好的方法请告诉我,互相学习,谢谢!

  • 相关阅读:
    常用的16个Java实用工具类,Java开发人员请收藏!
    JVM内存区域与垃圾回收
    听说你还不知道Java代码是怎么运行的?
    Java 到底是值传递还是引用传递?
    Java线程池实现原理及其在美团业务中的实践
    别再说Java对象都是在堆内存上分配空间的了!
    面试常问的Java虚拟机内存模型,看这篇就够了!
    好用的Java工具类库,GitHub星标10k+你在用吗?
    MySQL 全文索引实现一个简单版搜索引擎
    laravel 数据库里的图片重命名
  • 原文地址:https://www.cnblogs.com/daweige/p/7886135.html
Copyright © 2011-2022 走看看