baliuka 2003/03/16 05:28:54
Modified: dbutils/src/java/org/apache/commons/dbutils DbUtils.java
ProcedureUtils.java VectorHandler.java
dbutils/src/test/org/apache/commons/dbutils Demo.java
ProcedureUtilsTest.java
Added: dbutils/src/java/org/apache/commons/dbutils MapHandler.java
dbutils/src/test/org/apache/commons/dbutils DemoBean.java
DemoBeanHandler.java
Log:
added utilty methods to handle beans and maps
Revision Changes Path
1.18 +52 -0
jakarta-commons-sandbox/dbutils/src/java/org/apache/commons/dbutils/DbUtils.java
Index: DbUtils.java
===================================================================
RCS file:
/home/cvs/jakarta-commons-sandbox/dbutils/src/java/org/apache/commons/dbutils/DbUtils.java,v
retrieving revision 1.17
retrieving revision 1.18
diff -u -r1.17 -r1.18
--- DbUtils.java 14 Mar 2003 17:27:32 -0000 1.17
+++ DbUtils.java 16 Mar 2003 13:28:53 -0000 1.18
@@ -287,7 +287,59 @@
return false;
}
}
+
+ /**
+ * Create an Map from a ResultSet.
+ * It is assumed that next() has already been called on the ResultSet.
+ */
+
+ public static java.util.Map resultSetToMap(ResultSet rs) throws SQLException {
+ java.util.Map result = new java.util.Hashtable();
+ ResultSetMetaData rsmd = rs.getMetaData();
+ int cnt = rsmd.getColumnCount();
+ for( int i = 1; i <= cnt; i++ ){
+ result.put(rsmd.getColumnName(i),rs.getObject(i));
+ }
+ return result;
+ }
+ /**
+ * Create an Bean from a ResultSet.
+ * It is assumed that next() has already been called on the ResultSet.
+ */
+
+ public static Object resultSetToBean(ResultSet rs, Object obj) throws
SQLException {
+
+ try{
+
+ java.beans.BeanInfo bInfo = java.beans.Introspector.getBeanInfo(
+ obj.getClass());
+ java.beans.PropertyDescriptor pd[] = bInfo.getPropertyDescriptors();
+
+ ResultSetMetaData rsmd = rs.getMetaData();
+ int cnt = rsmd.getColumnCount();
+ LOOP:
+ for( int i = 1; i <= cnt; i++ ){
+ String name = rsmd.getColumnName(i);
+ for( int j = 0; j < pd.length; j++ ){
+ if(name.equals(pd[j].getName())){
+ try{
+ pd[j].getWriteMethod().
+ invoke(obj, new Object[]{ rs.getObject(i) });
+ }catch(Exception e){
+ throw new DbException( "can not set " + name , e);
+ }
+ continue LOOP;
+ }
+ }
+ throw new SQLException(name + " not found in " + obj.getClass().getName()
);
+ }
+ }catch(java.beans.IntrospectionException ie){
+ throw new DbException(ie);
+ }
+
+ return obj;
+ }
/**
* Create an Object array from a ResultSet.
* It is assumed that next() has already been called on the ResultSet.
1.11 +13 -3
jakarta-commons-sandbox/dbutils/src/java/org/apache/commons/dbutils/ProcedureUtils.java
Index: ProcedureUtils.java
===================================================================
RCS file:
/home/cvs/jakarta-commons-sandbox/dbutils/src/java/org/apache/commons/dbutils/ProcedureUtils.java,v
retrieving revision 1.10
retrieving revision 1.11
diff -u -r1.10 -r1.11
--- ProcedureUtils.java 16 Mar 2003 09:29:32 -0000 1.10
+++ ProcedureUtils.java 16 Mar 2003 13:28:53 -0000 1.11
@@ -82,6 +82,8 @@
private static final ResultSetHandler SCALAR_HANDLER = new ScalarHandler();
private static final ResultSetHandler VECTOR_HANDLER = new VectorHandler();
private static final ResultSetHandler COLLECTION_HANDLER = new
CollectionHandler();
+ private static final ResultSetHandler MAP_HANDLER = new MapHandler();
+
private static final String UPDATE_TAG = "update";
private static final String QUERY_TAG = "query";
private static final String CACHE_TAG = "useCache";
@@ -205,9 +207,13 @@
private static boolean isCollection(Class cls){
- return cls.isAssignableFrom(List.class);
+ return cls.isAssignableFrom(Collection.class);
}
+ private static boolean isMap(Class cls){
+
+ return cls.isAssignableFrom(Map.class);
+ }
private static boolean isVector(Class cls){
@@ -290,7 +296,11 @@
return COLLECTION_HANDLER;
}
-
+ if( name == null && isMap( method.getReturnType() ) ){
+
+ return MAP_HANDLER;
+ }
+
1.2 +4 -1
jakarta-commons-sandbox/dbutils/src/java/org/apache/commons/dbutils/VectorHandler.java
Index: VectorHandler.java
===================================================================
RCS file:
/home/cvs/jakarta-commons-sandbox/dbutils/src/java/org/apache/commons/dbutils/VectorHandler.java,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -r1.1 -r1.2
--- VectorHandler.java 16 Mar 2003 09:29:32 -0000 1.1
+++ VectorHandler.java 16 Mar 2003 13:28:53 -0000 1.2
@@ -15,9 +15,12 @@
if (rs.next()) {
Object result = DbUtils.resultSetToArray(rs);
+ if(rs.next()){
+ throw new SQLException("too many results");
+ }
return result;
}
- throw new SQLException();
+ throw new SQLException("too many results");
}
1.1
jakarta-commons-sandbox/dbutils/src/java/org/apache/commons/dbutils/MapHandler.java
Index: MapHandler.java
===================================================================
package org.apache.commons.dbutils;
import java.util.*;
import java.sql.*;
/**
*
* @author baliuka
*/
public class MapHandler implements ResultSetHandler {
/** Creates a new instance of VectorHandler */
public MapHandler() {
}
public Object handle(java.sql.ResultSet rs, Object[] params, Object userObject)
throws java.sql.SQLException{
if (rs.next()) {
Map result = DbUtils.resultSetToMap(rs);
if(rs.next()){
throw new SQLException("too many results");
}
return result;
}
throw new SQLException("too many results");
}
}
1.9 +14 -2
jakarta-commons-sandbox/dbutils/src/test/org/apache/commons/dbutils/Demo.java
Index: Demo.java
===================================================================
RCS file:
/home/cvs/jakarta-commons-sandbox/dbutils/src/test/org/apache/commons/dbutils/Demo.java,v
retrieving revision 1.8
retrieving revision 1.9
diff -u -r1.8 -r1.9
--- Demo.java 16 Mar 2003 09:29:32 -0000 1.8
+++ Demo.java 16 Mar 2003 13:28:53 -0000 1.9
@@ -1,6 +1,6 @@
package org.apache.commons.dbutils;
-
+import java.util.Map;
/**
* this file is used for metadata and must be in classpath at runtime
* @author baliuka
@@ -48,10 +48,22 @@
public java.util.Date now();
/**
- [EMAIL PROTECTED] SELECT * FROM TBL
+ [EMAIL PROTECTED] SELECT * FROM TBL WHERE ID=$0
*/
public Object[] getRow( int id );
+ /**
+ [EMAIL PROTECTED] SELECT * FROM TBL WHERE ID=$0
+ */
+ public Map getRowAsMap( int id );
+
+
+ /**
+ [EMAIL PROTECTED] SELECT id, name FROM TBL WHERE ID=$1
+ [EMAIL PROTECTED] DemoBeanHandler
+ */
+ public DemoBean getRowAsBean( DemoBean bean, int id );
+
/**
[EMAIL PROTECTED] SELECT * FROM {0}
*/
1.8 +5 -0
jakarta-commons-sandbox/dbutils/src/test/org/apache/commons/dbutils/ProcedureUtilsTest.java
Index: ProcedureUtilsTest.java
===================================================================
RCS file:
/home/cvs/jakarta-commons-sandbox/dbutils/src/test/org/apache/commons/dbutils/ProcedureUtilsTest.java,v
retrieving revision 1.7
retrieving revision 1.8
diff -u -r1.7 -r1.8
--- ProcedureUtilsTest.java 16 Mar 2003 09:29:32 -0000 1.7
+++ ProcedureUtilsTest.java 16 Mar 2003 13:28:53 -0000 1.8
@@ -123,7 +123,12 @@
assertTrue( demo.now() != null );
assertEquals(demo.concat("A","B"), "AB" );
assertTrue(demo.getRow(max.intValue()).length == 2 );
+ assertTrue(demo.getRowAsMap(max.intValue()).size() == 2 );
assertTrue(demo.getAll("TBL").size() > 2 );
+ DemoBean bean = new DemoBean();
+ demo.getRowAsBean(bean, max.intValue());
+ assertTrue( bean.getId() == max.intValue() );
+ assertTrue( bean.getName() != null );
demo.clear();
1.1
jakarta-commons-sandbox/dbutils/src/test/org/apache/commons/dbutils/DemoBean.java
Index: DemoBean.java
===================================================================
package org.apache.commons.dbutils;
/**
*
* @author baliuka
*/
public class DemoBean {
/** Holds value of property id. */
private int id;
/** Holds value of property name. */
private String name;
/** Creates a new instance of DemoBean */
public DemoBean() {
}
/** Getter for property id.
* @return Value of property id.
*
*/
public int getId() {
return this.id;
}
/** Setter for property id.
* @param id New value of property id.
*
*/
public void setId(int id) {
this.id = id;
}
/** Getter for property name.
* @return Value of property name.
*
*/
public String getName() {
return this.name;
}
/** Setter for property name.
* @param name New value of property name.
*
*/
public void setName(String name) {
this.name = name;
}
}
1.1
jakarta-commons-sandbox/dbutils/src/test/org/apache/commons/dbutils/DemoBeanHandler.java
Index: DemoBeanHandler.java
===================================================================
package org.apache.commons.dbutils;
/**
*
* @author baliuka
*/
public class DemoBeanHandler implements ResultSetHandler{
/** Creates a new instance of DemoBeanHandler */
public DemoBeanHandler() {
}
public Object handle(java.sql.ResultSet rs, Object[] params, Object userObject)
throws java.sql.SQLException {
if(rs.next()){
Object bean = ((Object [])userObject)[0];
DbUtils.resultSetToBean(rs, bean);
if(rs.next()){
throw new java.sql.SQLException();
}
return bean;
}
throw new java.sql.SQLException();
}
}
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]