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