JDBC返回结果集转Map集合

package com.tiantian.mybatis.test;

import java.math.BigDecimal;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;

public class JDBC_Test
{
    private static String url = "jdbc:oracle:thin:@localhost:1521:yangzz";
    private static String user = "yangzz";
    private static String password = "yangzz";
    public static Connection conn;
    public static PreparedStatement ps;
    public static ResultSet rs;
    public static Statement st;

    // 连接数据库的方法
    public void getConnection()
    {
        try
        {
            // 初始化驱动包
            Class.forName("oracle.jdbc.driver.OracleDriver");
            // 根据数据库连接字符,名称,密码给conn赋值
            conn = DriverManager.getConnection(url, user, password);

        }
        catch (Exception e)
        {
            // TODO: handle exception
            e.printStackTrace();
        }
    }

    /**
     * 将ResultSet结果集中的记录映射到Map对象中.
     * 
     * @param fieldClassName 是JDBC API中的类型名称,
     * @param fieldName 是字段名,
     * @param rs 是一个ResultSet查询结果集,
     * @param fieldValue Map对象,用于存贮一条记录.
     * @throws SQLException
     */
    private void _recordMappingToMap(String fieldClassName, String fieldName, ResultSet rs, Map fieldValue)
            throws SQLException
    {
        fieldName = fieldName.toLowerCase();
        // 优先规则:常用类型靠前
        if (fieldClassName.equals("java.lang.String"))
        {
            String s = rs.getString(fieldName);
            if (rs.wasNull())
            {
                fieldValue.put(fieldName, null);
            }
            else
            {
                fieldValue.put(fieldName, s);
            }
        }
        else if (fieldClassName.equals("java.lang.Integer"))
        {
            int s = rs.getInt(fieldName);
            if (rs.wasNull())
            {
                fieldValue.put(fieldName, null);
            }
            else
            {
                fieldValue.put(fieldName, s);// 早期jdk需要包装,jdk1.5后不需要包装
            }
        }
        else if (fieldClassName.equals("java.lang.Long"))
        {
            long s = rs.getLong(fieldName);
            if (rs.wasNull())
            {
                fieldValue.put(fieldName, null);
            }
            else
            {
                fieldValue.put(fieldName, s);
            }
        }
        else if (fieldClassName.equals("java.lang.Boolean"))
        {
            boolean s = rs.getBoolean(fieldName);
            if (rs.wasNull())
            {
                fieldValue.put(fieldName, null);
            }
            else
            {
                fieldValue.put(fieldName, s);
            }
        }
        else if (fieldClassName.equals("java.lang.Short"))
        {
            short s = rs.getShort(fieldName);
            if (rs.wasNull())
            {
                fieldValue.put(fieldName, null);
            }
            else
            {
                fieldValue.put(fieldName, s);
            }
        }
        else if (fieldClassName.equals("java.lang.Float"))
        {
            float s = rs.getFloat(fieldName);
            if (rs.wasNull())
            {
                fieldValue.put(fieldName, null);
            }
            else
            {
                fieldValue.put(fieldName, s);
            }
        }
        else if (fieldClassName.equals("java.lang.Double"))
        {
            double s = rs.getDouble(fieldName);
            if (rs.wasNull())
            {
                fieldValue.put(fieldName, null);
            }
            else
            {
                fieldValue.put(fieldName, s);
            }
        }
        else if (fieldClassName.equals("java.sql.Timestamp"))
        {
            java.sql.Timestamp s = rs.getTimestamp(fieldName);
            if (rs.wasNull())
            {
                fieldValue.put(fieldName, null);
            }
            else
            {
                fieldValue.put(fieldName, s);
            }
        }
        else if (fieldClassName.equals("java.sql.Date") || fieldClassName.equals("java.util.Date"))
        {
            java.util.Date s = rs.getDate(fieldName);
            if (rs.wasNull())
            {
                fieldValue.put(fieldName, null);
            }
            else
            {
                fieldValue.put(fieldName, s);
            }
        }
        else if (fieldClassName.equals("java.sql.Time"))
        {
            java.sql.Time s = rs.getTime(fieldName);
            if (rs.wasNull())
            {
                fieldValue.put(fieldName, null);
            }
            else
            {
                fieldValue.put(fieldName, s);
            }
        }
        else if (fieldClassName.equals("java.lang.Byte"))
        {
            byte s = rs.getByte(fieldName);
            if (rs.wasNull())
            {
                fieldValue.put(fieldName, null);
            }
            else
            {
                fieldValue.put(fieldName, new Byte(s));
            }
        }
        else if (fieldClassName.equals("[B") || fieldClassName.equals("byte[]"))
        {
            // byte[]出现在SQL Server中
            byte[] s = rs.getBytes(fieldName);
            if (rs.wasNull())
            {
                fieldValue.put(fieldName, null);
            }
            else
            {
                fieldValue.put(fieldName, s);
            }
        }
        else if (fieldClassName.equals("java.math.BigDecimal"))
        {
            BigDecimal s = rs.getBigDecimal(fieldName);
            if (rs.wasNull())
            {
                fieldValue.put(fieldName, null);
            }
            else
            {
                fieldValue.put(fieldName, s);
            }
        }
        else if (fieldClassName.equals("java.lang.Object") || fieldClassName.equals("oracle.sql.STRUCT"))
        {
            Object s = rs.getObject(fieldName);
            if (rs.wasNull())
            {
                fieldValue.put(fieldName, null);
            }
            else
            {
                fieldValue.put(fieldName, s);
            }
        }
        else if (fieldClassName.equals("java.sql.Array") || fieldClassName.equals("oracle.sql.ARRAY"))
        {
            java.sql.Array s = rs.getArray(fieldName);
            if (rs.wasNull())
            {
                fieldValue.put(fieldName, null);
            }
            else
            {
                fieldValue.put(fieldName, s);
            }
        }
        else if (fieldClassName.equals("java.sql.Clob"))
        {
            java.sql.Clob s = rs.getClob(fieldName);
            if (rs.wasNull())
            {
                fieldValue.put(fieldName, null);
            }
            else
            {
                fieldValue.put(fieldName, s);
            }
        }
        else if (fieldClassName.equals("java.sql.Blob"))
        {
            java.sql.Blob s = rs.getBlob(fieldName);
            if (rs.wasNull())
            {
                fieldValue.put(fieldName, null);
            }
            else
            {
                fieldValue.put(fieldName, s);
            }
        }
        else
        {// 对于其它任何未知类型的处理
            Object s = rs.getObject(fieldName);
            if (rs.wasNull())
            {
                fieldValue.put(fieldName, null);
            }
            else
            {
                fieldValue.put(fieldName, s);
            }
        }
    }

    // 测试能否与oracle数据库连接成功
    public static void main(String[] args)
    {
        JDBC_Test basedao = new JDBC_Test();
        basedao.getConnection();
        if (conn == null)
        {
            System.out.println("与oracle数据库连接失败!");
        }
        else
        {
            System.out.println("与oracle数据库连接成功!");
        }

        try
        {
            String sql = "select * from t_user"; // 查询数据的sql语句
            st = (Statement) conn.createStatement(); // 创建用于执行静态sql语句的Statement对象,st属局部变量

            ResultSet rs = st.executeQuery(sql); // 执行sql查询语句,返回查询数据的结果集
            ResultSetMetaData rsmd = rs.getMetaData();
            int fieldCount = rsmd.getColumnCount();
            List records = new ArrayList();
            while (rs.next())
            {
                Map<String, String> valueMap = new LinkedHashMap<String, String>();
                for (int i = 1; i <= fieldCount; i++)
                {
                    String fieldClassName = rsmd.getColumnClassName(i);
                    String fieldName = rsmd.getColumnName(i);
                    basedao._recordMappingToMap(fieldClassName, fieldName, rs, valueMap);
                }
                records.add(valueMap);
            }
            System.out.println(records.size());
            conn.close(); // 关闭数据库连接

        }
        catch (SQLException e)
        {
            e.printStackTrace();
            System.out.println("查询数据失败");
        }
    }
}

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值