该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
package com.shichao.mvcapp.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.BeanListHandler;
import com.shichao.mvcapp.db.JDBCUtils;
public class DAO {
private Class clazz;
private QueryRunner queryRunner = new QueryRunner();
@SuppressWarnings("unchecked")
public DAO() {
Type superClass = getClass().getGenericSuperclass();
if(superClass instanceof ParameterizedType) {
ParameterizedType parameterizedType = (ParameterizedType) superClass;
Type[] typeArrs = parameterizedType.getActualTypeArguments();
if(typeArrs != null && typeArrs.length>0) {
if(typeArrs[0] instanceof Class) {
clazz = (Class) typeArrs[0];
}
}
}
}
@SuppressWarnings("unchecked")
public List getList(String sql,Object...args) {
Connection conn = null;
try {
conn = JDBCUtils.getConnection();
return (List) queryRunner.query(conn, sql, new BeanListHandler(clazz), args);
} catch (SQLException e) {
e.printStackTrace();
} finally {
JDBCUtils.close(conn);
}
return null;
}
public void update(String sql,Object...args) {
Connection conn = null;
try {
conn = JDBCUtils.getConnection();
System.out.println(sql);
System.out.println(args);
queryRunner.update(conn, sql, args);
} catch (SQLException e) {
e.printStackTrace();
} finally {
JDBCUtils.close(conn);
}
}
}
---------------------------------------------------------------
package com.shichao.mvcapp.dao;
import java.util.List;
import com.shichao.mvcapp.domain.Customer;
public interface CustomerDAO {
public List getALL();
public void save(Customer customer);
public void delete();
}
---------------------------------------------------------------------
package com.shichao.mvcapp.dao;
import java.util.List;
import com.shichao.mvcapp.domain.Customer;
public class CustomerDAOImpl extends DAO implements CustomerDAO {
@Override
public List getALL() {
String sql = "SELECT * FROM CUSTOMER";
return getList(sql);
}
@Override
public void save(Customer customer) {
String sql = "INSERT INTO CUSTOMER (ADDRESS,NAME,PHONE) VALUES(?,?,?)";
System.out.println(customer.getAddress());
System.out.println(customer.getName());
System.out.println(customer.getPhone());
update(sql,customer.getAddress(),customer.getName(),customer.getPhone());
}
@Override
public void delete() {
// TODO Auto-generated method stub
}
}
---------------------------------------------------------------
测试类运行出错
package com.shichao.mvcapp.dao;
import static org.junit.Assert.*;
import org.junit.Test;
import com.shichao.mvcapp.domain.Customer;
public class CustomerDAOImplTest {
private CustomerDAO customerDAO = new CustomerDAOImpl();
@Test
public void testGetALL() {
fail("Not yet implemented");
}
@Test
public void testSave() {
Customer customer = new Customer();
customer.setAddress("shenyang");
customer.setName("shichap");
customer.setPhone(12345678);
customerDAO.save(customer);
}
}
----------------------------
运行测试出错!!
-------------------------------
shenyang
shichap
12345678
2015-5-7 0:37:42 com.mchange.v2.log.MLog
信息: MLog clients using java 1.4+ standard logging.
2015-5-7 0:37:42 com.mchange.v2.c3p0.C3P0Registry banner
信息: Initializing c3p0-0.9.2.1 [built 20-March-2013 11:16:28 +0000; debug? true; trace: 10]
已连接oracle!
2015-5-7 0:37:42 com.mchange.v2.c3p0.impl.AbstractPoolBackedDataSource getPoolManager
信息: Initializing c3p0 pool... com.mchange.v2.c3p0.ComboPooledDataSource [ acquireIncrement -> 3, acquireRetryAttempts -> 30, acquireRetryDelay -> 1000, autoCommitOnClose -> false, automaticTestTable -> null, breakAfterAcquireFailure -> false, checkoutTimeout -> 0, connectionCustomizerClassName -> null, connectionTesterClassName -> com.mchange.v2.c3p0.impl.DefaultConnectionTester, dataSourceName -> oracle, debugUnreturnedConnectionStackTraces -> false, description -> null, driverClass -> oracle.jdbc.driver.OracleDriver, factoryClassLocation -> null, forceIgnoreUnresolvedTransactions -> false, identityToken -> 1hge16n99bofb4r1b8paaq|193722c, idleConnectionTestPeriod -> 0, initialPoolSize -> 10, jdbcUrl -> jdbc:oracle:thin:@localhost:1521:orcl, maxAdministrativeTaskTime -> 0, maxConnectionAge -> 0, maxIdleTime -> 30, maxIdleTimeExcessConnections -> 0, maxPoolSize -> 100, maxStatements -> 200, maxStatementsPerConnection -> 0, minPoolSize -> 10, numHelperThreads -> 3, preferredTestQuery -> null, properties -> {user=******, password=******}, propertyCycle -> 0, statementCacheNumDeferredCloseThreads -> 0, testConnectionOnCheckin -> false, testConnectionOnCheckout -> false, unreturnedConnectionTimeout -> 0, userOverrides -> {}, usesTraditionalReflectiveProxies -> false ]
INSERT INTO CUSTOMER (ADDRESS,NAME,PHONE) VALUES(?,?,?)
[Ljava.lang.Object;@16614e7
已关闭!
Exception in thread "main" java.lang.AbstractMethodError: oracle.jdbc.driver.T4CPreparedStatement.getParameterMetaData()Ljava/sql/ParameterMetaData;
at com.mchange.v2.c3p0.impl.NewProxyPreparedStatement.getParameterMetaData(NewProxyPreparedStatement.java:303)
at org.apache.commons.dbutils.QueryRunner.fillStatement(QueryRunner.java:174)
at org.apache.commons.dbutils.QueryRunner.update(QueryRunner.java:593)
at com.shichao.mvcapp.dao.DAO.update(DAO.java:55)
at com.shichao.mvcapp.dao.CustomerDAOImpl.save(CustomerDAOImpl.java:21)
at test.CustomerTest.main(CustomerTest.java:15)