项目场景:

在QueryRunner封装bean时出现

java.sql.SQLException: Cannot create backstage.bean.Estate: Class org.apache.commons.dbutils.BeanProcessor can not access a member of class backstage.bean.Estate with modifiers "" Query: select eid,`name`,introduction intro,pic,about from estate Parameters: []at org.apache.commons.dbutils.AbstractQueryRunner.rethrow(AbstractQueryRunner.java:392)at org.apache.commons.dbutils.QueryRunner.query(QueryRunner.java:351)at org.apache.commons.dbutils.QueryRunner.query(QueryRunner.java:212)at backstage.dao.BaseDao.getBeanList(BaseDao.java:103)at backstage.dao.impl.IEstateDaoImpl.getIndexEstate(IEstateDaoImpl.java:23)at test.EstateTest.testEstateDao(EstateTest.java:17)at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)at java.lang.reflect.Method.invoke(Method.java:498)at org.junit.platform.commons.util.ReflectionUtils.invokeMethod(ReflectionUtils.java:436)at org.junit.jupiter.engine.execution.ExecutableInvoker.invoke(ExecutableInvoker.java:115)at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$invokeTestMethod$6(TestMethodTestDescriptor.java:170)at org.junit.jupiter.engine.execution.ThrowableCollector.execute(ThrowableCollector.java:40)at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.invokeTestMethod(TestMethodTestDescriptor.java:166)at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.execute(TestMethodTestDescriptor.java:113)at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.execute(TestMethodTestDescriptor.java:58)at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor$NodeExecutor.lambda$executeRecursively$3(HierarchicalTestExecutor.java:112)at org.junit.platform.engine.support.hierarchical.SingleTestExecutor.executeSafely(SingleTestExecutor.java:66)at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor$NodeExecutor.executeRecursively(HierarchicalTestExecutor.java:108)at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor$NodeExecutor.execute(HierarchicalTestExecutor.java:79)at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor$NodeExecutor.lambda$executeRecursively$2(HierarchicalTestExecutor.java:120)at java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:184)at java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:175)at java.util.Iterator.forEachRemaining(Iterator.java:116)at java.util.Spliterators$IteratorSpliterator.forEachRemaining(Spliterators.java:1801)at java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:481)at java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:471)at java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:151)at java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:174)at java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234)at java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:418)at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor$NodeExecutor.lambda$executeRecursively$3(HierarchicalTestExecutor.java:120)at org.junit.platform.engine.support.hierarchical.SingleTestExecutor.executeSafely(SingleTestExecutor.java:66)at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor$NodeExecutor.executeRecursively(HierarchicalTestExecutor.java:108)at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor$NodeExecutor.execute(HierarchicalTestExecutor.java:79)at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor$NodeExecutor.lambda$executeRecursively$2(HierarchicalTestExecutor.java:120)at java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:184)at java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:175)at java.util.Iterator.forEachRemaining(Iterator.java:116)at java.util.Spliterators$IteratorSpliterator.forEachRemaining(Spliterators.java:1801)at java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:481)at java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:471)at java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:151)at java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:174)at java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234)at java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:418)at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor$NodeExecutor.lambda$executeRecursively$3(HierarchicalTestExecutor.java:120)at org.junit.platform.engine.support.hierarchical.SingleTestExecutor.executeSafely(SingleTestExecutor.java:66)at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor$NodeExecutor.executeRecursively(HierarchicalTestExecutor.java:108)at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor$NodeExecutor.execute(HierarchicalTestExecutor.java:79)at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:55)at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:43)at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:170)at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:154)at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:90)at org.eclipse.jdt.internal.junit5.runner.JUnit5TestReference.run(JUnit5TestReference.java:86)at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38)at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:538)at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:760)at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:460)at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:206)

问题描述:

困扰很久的问题
根据错误意思,问题是访问权限
项目结构

/WebTest/src/backstage/bean/Estate.java

package backstage.bean;public class Estate {private Integer eid;private String name;private String intro;private String pic;private String about;Estate() {name = null;pic = "/WebTest/WebContent/img/index/hasiProject/kittens.jpg";}public Estate(Integer eid, String name, String intro, String pic, String about) {super();this.eid = eid;this.name = name;this.intro = intro;this.pic = pic;this.about = about;}public Integer getEid() {return eid;}public void setEid(Integer eid) {this.eid = eid;}public String getName() {return name;}public void setName(String name) {this.name = name;}public String getIntro() {return intro;}public void setIntro(String intro) {this.intro = intro;}public String getPic() {return pic;}public void setPic(String pic) {this.pic = pic;}public String getAbout() {return about;}public void setAbout(String about) {this.about = about;}@Overridepublic String toString() {return "Estate [eid=" + eid + ", name=" + name + ", intro=" + intro + ", pic=" + pic + ", about=" + about + "]";}}

/WebTest/src/backstage/dao/BaseDao.java

package backstage.dao;import java.lang.reflect.ParameterizedType;
import java.lang.reflect.Type;
import java.sql.Connection;
import java.sql.SQLException;
import java.util.List;import org.apache.commons.dbutils.QueryRunner;
import org.apache.commons.dbutils.handlers.BeanHandler;
import org.apache.commons.dbutils.handlers.BeanListHandler;import backstage.util.DBConnectUtil;/*** 定义一个用来被继承的对数据库进行基本操作的Dao* * @author YL** @param <T>*/
public class BaseDao<T> {private QueryRunner queryRunner = new QueryRunner();//定义一个变量来接收泛型的类型private Class<T> type;// 获取T的Class对象,获取泛型的类型,泛型是在被子类继承时才确定@SuppressWarnings("unchecked")public BaseDao() {//获取子类的类型@SuppressWarnings("rawtypes")Class clazz = this.getClass();//获取父类的类型//getGenericSuperclass()用来获取当前类的父类的类型//ParameterizedType表示的是带泛型的类型ParameterizedType parameterizedType = (ParameterizedType) clazz.getGenericSuperclass();//获取具体的泛型类型 getActualTypeArguments获取具体的泛型的类型//这个方法会返回一个Type的数组Type[] types = parameterizedType.getActualTypeArguments();//获取具体的泛型的类型·this.type = (Class<T>) types[0];}/*** 通用的增删改操作* * @param sql*         insert *        delete*         update* @param params* @return*/public int update(String sql, Object... params) {// 获取连接
//      backstage.util.DBConnectUtilConnection connection = DBConnectUtil.getConn();int count = 0;try {count = queryRunner.update(connection, sql, params);} catch (SQLException e) {e.printStackTrace();} finally {DBConnectUtil.free(connection);}return count;}/*** 获取一个对象* * @param sql* @param params* @return*/public T getBean(String sql, Object... params) {// 获取连接Connection connection = DBConnectUtil.getConn();T t = null;try {t = queryRunner.query(connection, sql, new BeanHandler<T>(type),params);} catch (SQLException e) {e.printStackTrace();} finally {DBConnectUtil.free(connection);}return t;}/*** 获取所有对象* @param sql* @param params* @return*/public List<T> getBeanList(String sql, Object... params) {// 获取连接Connection connection = DBConnectUtil.getConn();List<T> list = null;try {list = queryRunner.query(connection, sql, new BeanListHandler<T>(type), params);} catch (SQLException e) {e.printStackTrace();} finally {DBConnectUtil.free(connection);}return list;}}

/WebTest/src/backstage/dao/impl/IEstateDaoImpl.java

package backstage.dao.impl;import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;import backstage.bean.Estate;
import backstage.dao.BaseDao;
import backstage.dao.IEstateDao;
import backstage.util.DBConnectUtil;public class IEstateDaoImpl extends BaseDao<Estate> implements IEstateDao {//  private Connection conn = DBConnectUtil.getConn();@Overridepublic List<Estate> getIndexEstate() {List<Estate> list = null;String sql = "select eid,`name`,introduction intro,pic,about from estate";
//      使用BaseDao解耦合list = this.getBeanList(sql);
//      PreparedStatement pstmt = null;
//      try {//          pstmt = conn.prepareStatement(sql);
//          ResultSet rs = pstmt.executeQuery();
//          list = new ArrayList<Estate>();
//          while(rs.next()) {//              int eid = rs.getInt(1);
//              String name = rs.getNString(2);
//              String intro = rs.getNString(3);
//              String pic = rs.getNString(4);
//              String about = rs.getNString(5);
//              Estate estate = new Estate(eid,name,intro,pic,about);
//              list.add(estate);
//          }
//          pstmt.close();
//      } catch (SQLException e) {//          // TODO Auto-generated catch block
//          e.printStackTrace();
//      }return list;}
}

/WebTest/src/test/EstateTest.java 测试类

package test;import java.util.List;import org.junit.jupiter.api.Test;import backstage.bean.Estate;
import backstage.dao.IEstateDao;
import backstage.dao.impl.IEstateDaoImpl;class EstateTest {@Testvoid testEstateDao() {//      fail("Not yet implemented");IEstateDao iEstateDao = new IEstateDaoImpl(); List<Estate> list = iEstateDao.getIndexEstate();for (Estate estate : list) {System.out.println(estate);}}}

原因分析:

bean的构造函数没有设置为public
导致QueryRunner无法创建

结论:

在使用QueryRunner封装bean时注意
使用QueryRunner数据库字段与bean字段不一致时sql要使用别名
注意bean的构造函数和类本身都要为public

解决can not access a member of class xxx with modifiers ““问题相关推荐

  1. can not access a member of class xxx with modifiers “private“

    代码如下 Class deviceInfoClazz = DeviceInfo.class; Field[] fields = deviceInfoClazz.getDeclaredFields(); ...

  2. 解决Class “xxx“ can not access a member of class “xxx“ with modifiers “private“

    原因可能为:         - 通过反射获取到的类的属性值(field.get(className))之前没有将属性设置为setAccessible(true); - 通过反射会调用类的构造器,检查 ...

  3. Class Test can not access a member of class User with modifiers “private“

    报错内容: Exception in thread "main" java.lang.IllegalAccessException: Class Test can not acce ...

  4. 使用Quartz报错“Class SimpleJobFactory can not access a member of class HelloJob with modifiers “““

    异常 [2021-11-08 17:03:57] [ERROR] ErrorLogger: An error occured instantiating job to be executed. job ...

  5. 【Exception】Class com.XXX1 can not access a member of class com.XXX2 with modifiers “public“

    问题描述 在com.XXX1类中利用反射创建com.XXX2的实例对象,报错:"Class com.XXX1 can not access a member of class com.XXX ...

  6. struts2--java.lang.IllegalAccessException: Class ognl.OgnlRuntime can not access a member of

    这个问题是我碰到的一个比较纠结的问题,如果第一次碰到肯定能让你也很纠结,哈哈 [c-sharp] view plaincopyprint? 01.2010-10-19 18:27:22 com.ope ...

  7. org.apache.struts2.json.JSONWriter can not access a member of class

    偶遇一个问题:org.apache.struts2.json.JSONWriter can not access a member of class  org.apache.tomcat.dbcp.d ...

  8. 【异常处理】解决Windows下access denied for user ‘root‘@‘localhost‘(using password:YES)的mysql启动问题

    [异常处理]解决Windows下access denied for user 'root'@'localhost'(using password:YES)的mysql启动问题 **原因:**可能是密码 ...

  9. 解决前端跨域的问题.Access to XMLHttpRequest at http://xxx.xxx from origin 'http://localhost:8000' has been bl

    1.前端浏览器报错如下: Access to XMLHttpRequest at http://xxx.xxx from origin 'http://localhost:8000' has been ...

最新文章

  1. AI与区块链的融合会给人类带来什么?
  2. Linux的10个游戏
  3. mongodb 开启身份认证_Yum安装mongodb及开启用户认证远程登录
  4. Kubernetes容器云的互联网企业实践
  5. 前端学习(1555):ng-app指令
  6. 【POJ - 2486】Apple Tree (树形背包,dp)
  7. 怎么查看电脑是不是禁ping_怎么查看电脑内存的大小,找回丢失的内存,电脑小技巧...
  8. Eclipse的vim插件viPlugin的安装
  9. PHP如何释放内存之unset销毁变量并释放内存详解
  10. c语言调整图片分辨率,如何不改变图片分辨率,并且缩小图片质量-电脑自学网...
  11. java td背景色_jQuery:无法更改表格单元格的背景颜色
  12. MVC操作SQL数据库增删改查
  13. 谷歌招聘新职员的五大标准
  14. 【图像提取】基于matlab PCA-CSIFT feature图像特征提取【含Matlab源码 1174期】
  15. Python函数不定长参数之*args与**kwargs
  16. STM32F4 DMA
  17. PG据库备份与恢复实验 (PITR)
  18. ubuntu和Windows双系统开机直接进入Windows,双系统添加Ubuntu引导
  19. javascript判断浏览器当前运行环境
  20. Xilinx AXI USB2.0 Device IP 手册阅读笔记

热门文章

  1. 应届大学毕业生面试应答
  2. 数据嗨客 | 第4期:逻辑回归
  3. 广西大学oj1037(小西的c语言作业)
  4. 实现笑脸漏洞vsftpd2.3.4
  5. Kafka之四:Kafka与Streaming集成
  6. devsigh,程序员的一声叹息
  7. android eventlog监听,Android EventLog总结
  8. 9.6 矩阵的条件数
  9. Python Tkinter颜色参考程序
  10. 在你所有的项目中都加入 TailwindCSS 吧!