是这样的,我在eclipse中导入了commons-beanutils,想要学习一般的查询方法,但是在查询date型的数据时总是报错,以下是代码
package TestDriver1;
import java.sql.Connection;
import java.sql.Date;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.sql.Statement;
import org.apache.commons.beanutils.PropertyUtils;
import org.junit.Test;
//查询方法的实现
public class TestJDBC6 {
@Test
public void testQuery() {
String sql = "select id,name,email,birth from customers where id = 10";
Customer cust = query(sql, Customer.class);
System.out.println(cust);
}
public <T> T query(String sql, Class<T> clazz) {
Connection conn = null;
Statement st = null;
ResultSet rs = null;
try {
conn = JDBCUtils.GetConnention();
st = conn.createStatement();
rs = st.executeQuery(sql);
// 获取结果集的元数据:ResulSetMetaData
ResultSetMetaData rsmd = rs.getMetaData();
// getColumnCount():通过结果集的元数据获取结果集的列数
int count = rsmd.getColumnCount();
if (rs.next()) {
T t = clazz.newInstance();
for (int i = 0; i < count; i++) {
// getObject():通过结果集获取列的值
Object columnVal = rs.getObject(i + 1);
// getColumnName():通过结果集的元数据获取表中列的名字
// String columnName = rsmd.getColumnName(i + 1);
// getColumnLabel():通过结果集的元数据获取表中列的别名
String columnLabel = rsmd.getColumnLabel(i + 1);
PropertyUtils.setProperty(t, columnLabel, columnVal);
}
return t;
}
} catch (Exception e) {
e.printStackTrace();
} finally {
JDBCUtils.close(rs, st, conn);
}
return null;
}
然后一执行就会报错,但是如果我把要查询的sql语句中的birth删掉,就会显示出查询结果,报错的代码如下
java.lang.NoSuchMethodException: Unknown property 'birth'
at org.apache.commons.beanutils.PropertyUtilsBean.setSimpleProperty(PropertyUtilsBean.java:1741)
at org.apache.commons.beanutils.PropertyUtilsBean.setNestedProperty(PropertyUtilsBean.java:1648)
at org.apache.commons.beanutils.PropertyUtilsBean.setProperty(PropertyUtilsBean.java:1677)
at org.apache.commons.beanutils.PropertyUtils.setProperty(PropertyUtils.java:559)
at TestDriver1.TestJDBC6.query(TestJDBC6.java:52)
at TestDriver1.TestJDBC6.testQuery(TestJDBC6.java:18)
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.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:50)
at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)
at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:47)
at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17)
at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:325)
at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:78)
at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:57)
at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290)
at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71)
at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288)
at org.junit.runners.ParentRunner.access$000(ParentRunner.java:58)
at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268)
at org.junit.runners.ParentRunner.run(ParentRunner.java:363)
at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.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:459)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:678)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:382)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:192)
恳请哪位大神能帮帮我,我在网上查了半天,不知道该怎么解决这个问题,谢谢了!