java resultset 赋值_ResultSet数据自动绑定到JavaBean中 | 学步园

 2023-09-07 阅读 28 评论 0

摘要:由于需要用jdbc写点程序,不使用Hibernate , mybatis等框架,在设置结果集到bean时相当麻烦,所以写了一个专门完成此功能的类package com.ehl.dc.authorization.util;import java.lang.reflect.Field;import java.lang.reflect.Method;import java.sql.ResultSet;

由于需要用jdbc写点程序,不使用Hibernate , mybatis等框架,在设置结果集到bean时相当麻烦,所以写了一个专门完成此功能的类

package com.ehl.dc.authorization.util;

import java.lang.reflect.Field;

import java.lang.reflect.Method;

import java.sql.ResultSet;

import java.sql.ResultSetMetaData;

java 迭代器。import java.util.ArrayList;

import java.util.List;

/**

* @说明:利用反射机制从ResultSet自动绑定到JavaBean;根据记录集自动调用javaBean里边的对应方法。

*

* @param

*/

java结果集,public class SetBean {

/**

* @param clazz

* 所要封装的javaBean

* @param rs

* 记录集

* @return ArrayList 数组里边装有 多个javaBean

java 赋值、* @throws Exception

*/

public List getList(Class clazz, ResultSet rs) {

Field field = null;

List lists = new ArrayList();

try {

// 取得ResultSet列名

java二维数组赋值,ResultSetMetaData rsmd = rs.getMetaData();

// 获取记录集中的列数

int counts = rsmd.getColumnCount();

// 定义counts个String 变量

String[] columnNames = new String[counts];

// 给每个变量赋值(字段名称全部转换成小写)

for (int i = 0; i < counts; i++) {

java类直接赋值、columnNames[i] = rsmd.getColumnLabel(i + 1).toLowerCase();

}

// 变量ResultSet

while (rs.next()) {

T t = clazz.newInstance();

// 反射, 从ResultSet绑定到JavaBean

for (int i = 0; i < counts; i++) {

java default package,// 设置参数类型,此类型应该跟javaBean 里边的类型一样,而不是取数据库里边的类型

field = clazz.getDeclaredField(columnNames[i]);

// 这里是获取bean属性的类型

Class> beanType = field.getType();

// 根据 rs 列名 ,组装javaBean里边的其中一个set方法,object 就是数据库第一行第一列的数据了

Object value = rs.getObject(columnNames[i]);

if (value != null) {

java implements?// 这里是获取数据库字段的类型

Class> dbType = value.getClass();

// 处理日期类型不匹配问题

if (dbType == java.sql.Timestamp.class

&& beanType == java.util.Date.class) {

// value = new

// java.util.Date(rs.getTimestamp(columnNames[i]).getTime());

java怎么赋值?value = new java.util.Date(

((java.sql.Timestamp) value).getTime());

}

// 处理double类型不匹配问题

if (dbType == java.math.BigDecimal.class

&& beanType == double.class) {

// value = rs.getDouble(columnNames[i]);

java resultset,value = new Double(value.toString());

}

// 处理int类型不匹配问题

if (dbType == java.math.BigDecimal.class

&& beanType == int.class) {

// value = rs.getInt(columnNames[i]);

value = new Integer(value.toString());

java runnable?}

}

String setMethodName = "set"

+ firstUpperCase(columnNames[i]);

// 第一个参数是传进去的方法名称,第二个参数是 传进去的类型;

Method m = t.getClass().getMethod(setMethodName, beanType);

// 第二个参数是传给set方法数据;如果是get方法可以不写

java对象赋值给另一个对象,m.invoke(t, value);

}

lists.add(t);

}

} catch (Exception e) {

e.printStackTrace();

return null;

java监听binlog日志。}

return lists;

}

/**

* @param clazz

* bean类

* @param rs

java获取properties的值。* 结果集 (只有封装第一条结果)

* @return 封装了查询结果的bean对象

*/

public T getObj(Class clazz, ResultSet rs) {

Field field = null;

T obj = null;

try {

beanpropertybindingresult。// 取得ResultSet列名

ResultSetMetaData rsmd = rs.getMetaData();

// 获取记录集中的列数

int counts = rsmd.getColumnCount();

// 定义counts个String 变量

String[] columnNames = new String[counts];

// 给每个变量赋值(字段名称全部转换成小写)

java字符串赋值、for (int i = 0; i < counts; i++) {

columnNames[i] = rsmd.getColumnLabel(i + 1).toLowerCase();

}

// 变量ResultSet

if (rs.next()) {

T t = clazz.newInstance();

// 反射, 从ResultSet绑定到JavaBean

jdbc resultset用法。for (int i = 0; i < counts; i++) {

try{

// 设置参数类型,此类型应该跟javaBean 里边的类型一样,而不是取数据库里边的类型

field = clazz.getDeclaredField(columnNames[i]);

}catch(Exception ex){

ex.printStackTrace();

continue;

java listener。}

// 这里是获取bean属性的类型

Class> beanType = field.getType();

// 根据 rs 列名 ,组装javaBean里边的其中一个set方法,object 就是数据库第一行第一列的数据了

Object value = rs.getObject(columnNames[i]);

if (value != null) {

// 这里是获取数据库字段的类型

Class> dbType = value.getClass();

// 处理日期类型不匹配问题

if (dbType == java.sql.Timestamp.class

&& beanType == java.util.Date.class) {

// value = new

// java.util.Date(rs.getTimestamp(columnNames[i]).getTime());

value = new java.util.Date(

((java.sql.Timestamp) value).getTime());

}

// 处理double类型不匹配问题

if (dbType == java.math.BigDecimal.class

&& beanType == double.class) {

// value = rs.getDouble(columnNames[i]);

value = new Double(value.toString());

}

// 处理int类型不匹配问题

if (dbType == java.math.BigDecimal.class

&& beanType == int.class) {

// value = rs.getInt(columnNames[i]);

value = new Integer(value.toString());

}

}

String setMethodName = "set"

+ firstUpperCase(columnNames[i]);

// 第一个参数是传进去的方法名称,第二个参数是 传进去的类型;

Method m = t.getClass().getMethod(setMethodName, beanType);

// 第二个参数是传给set方法数据;如果是get方法可以不写

m.invoke(t, value);

}

obj = t;

}

} catch (Exception e) {

e.printStackTrace();

return null;

}

return obj;

}

// 首写字母变大写

public static String firstUpperCase(String old) {

return old.substring(0, 1).toUpperCase() + old.substring(1);

}

}

版权声明:本站所有资料均为网友推荐收集整理而来,仅供学习和研究交流使用。

原文链接:https://hbdhgg.com/3/15547.html

发表评论:

本站为非赢利网站,部分文章来源或改编自互联网及其他公众平台,主要目的在于分享信息,版权归原作者所有,内容仅供读者参考,如有侵权请联系我们删除!

Copyright © 2022 匯編語言學習筆記 Inc. 保留所有权利。

底部版权信息