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("查询数据失败");
    }
}

}


原文:https://blog.csdn.net/ffggnfgf/article/details/45479359

猜你喜欢

转载自blog.csdn.net/weixin_42996008/article/details/85265536