Dear Ingmar Lötzsch, Thank you for your reply.You send that code is working fine..Normal code it was worked . Problem for integration of spring mvc with iBatis.... I have put some related code as follows....
1)My jsp page <td align="left" width="200"> <label for="Othergroups">Other Accessible Groups :</label> </td> <td align="left" width="100"><select name="kmsgrpaccessiblegroups" class="hintanchor" onMouseover="showhint('Please choose other groups Should consist of drag and drop list.', this, event, '200px')" multiple="multiple" style="width: 140px" size="4"> <% for(int i=0; i<oGroupArraylist.size(); i++) { obKmsgroup = (KmsGroup)oGroupArraylist.get(i); %> <option name="<%=obKmsgroup.getKmsgrpgroupname()%>" value="<%=obKmsgroup.getKmsgrpgroupid()%>"><%=obKmsgroup.getKmsgrpgroupname()%></option> <% } %> </select></td> 2)domain class private int[] kmsgrpaccessiblegroups; private IntArray kmsgrpaccessiblegroup; public IntArray getKmsgrpaccessiblegroup() { return kmsgrpaccessiblegroup; } public void setKmsgrpaccessiblegroup(IntArray kmsgrpaccessiblegroup) { this.kmsgrpaccessiblegroup = kmsgrpaccessiblegroup; } public int[] getKmsgrpaccessiblegroups() { return kmsgrpaccessiblegroups; } public void setKmsgrpaccessiblegroups(int[] kmsgrpaccessiblegroups) { this.kmsgrpaccessiblegroups = kmsgrpaccessiblegroups; logger.info("setKmsgrpaccessiblegroups set to " +kmsgrpaccessiblegroups); } 3)FormController int[] arrayData=obkmsgroup.getKmsgrpaccessiblegroups(); for(int i=0;i<arrayData.length;i++) System.out.println("The data of the array=="+arrayData[i]); IntArray intArray = new IntArray(arrayData); logger.info("INT ARRAY DETAILS=="+intArray); obkmsgroup.setKmsgrpaccessiblegroup(intArray); 4)Dao Implementatiion public void insertGroups(KmsGroup kmsgroup)throws Exception{ logger.info("Start Executing query for insert kmsgroups"); template.insert("kmsgroups.insertgroups",kmsgroup); } 4)Mapping file <typeAlias alias="IntArrayTypeHandler" type="org.ada.kms.domain.IntArrayTypeHandler"/> <insert id="insertgroups" parameterClass="kmsgroup"> INSERT INTO kms.kms_group(kms_grp_groupid,kms_grp_groupname,kms_group_active,kms_grp_description,kms_grp_createdon,kms_grp_createdby,kms_grp_accessiblegroup) VALUES(#kmsgrpgroupid#,#kmsgrpgroupname#,#kmsgroupactive#,#kmsgrpdescription#,#kmsgrpcreatedon#,#kmsgrpcreatedby#, #kmsgrpaccessiblegroup,handler=IntArrayTypeHandler#) </insert> 5)Alraedy implemented java beans like IntArray,SqlArrayAdapter, and IntArrayTypeHandler The same message get the eclipse console as follows.. > INFO [org.springframework.beans.factory.xml.XmlBeanDefinitionReader] - > <Loading XML bean definitions from class path resource > [org/springframework/jdbc/support/sql-error-codes.xml]> > INFO [org.springframework.jdbc.support.SQLErrorCodesFactory] - > <SQLErrorCodes loaded: [DB2, Derby, H2, HSQL, Informix, MS-SQL, MySQL, > Oracle, PostgreSQL, Sybase]> Any idea u get please reply immediately.... Ingmar Lötzsch wrote: > > Can you post the exceptions? > > Can you do the following: > > On SQL-client (Console/pgAdmin) > > CREATE TABLE arraytest > ( > id int NOT NULL PRIMARY KEY, > intarray int[] NOT NULL > ) > WITHOUT OIDS; > > INSERT INTO arraytest (id, intarray) VALUES (1, ARRAY[1, 2]); > INSERT INTO arraytest (id, intarray) VALUES (2, '{1, 3}' :: int[]); > > Can you than execute the following code using class IntArray: > > import java.sql.Connection; > import java.sql.DriverManager; > import java.sql.PreparedStatement; > > public class ArrayTest > { > public static void main(String[] args) > { > try > { > Class.forName("org.postgresql.Driver"); > String url = "jdbc:postgresql://localhost/test"; > Connection con = DriverManager.getConnection(url, > "postgres", "admin"); > > String sql = "INSERT INTO arraytest (id, intarray) > VALUES (?, ?)"; > PreparedStatement pstmt = con.prepareStatement(sql); > pstmt.setInt(1, 3); > int[] ints = {2, 4}; > IntArray intArray = new IntArray(ints); > pstmt.setArray(2, intArray); > int rows = pstmt.executeUpdate(); > System.out.println(rows); > pstmt.close(); > con.close(); > } > catch (Exception e) > { > e.printStackTrace(System.out); > } > } > } > > Do you get any exceptions? > > jishnu123 schrieb: >> I have already implemented all java beans with SqlArrayAdapter,IntArray >> and >> IntArrayTypeHandler..But iam still facing the same problem....Actually i >> had >> implemented my project using spring mvc with iBatis..I think spring MVC >> problem... >> >> I again mention that particular error as follows....Any body have any >> idea >> to solve that problem... Please sent reply immediately... >> >> INFO [org.springframework.beans.factory.xml.XmlBeanDefinitionReader] - >> <Loading XML bean definitions from class path resource >> [org/springframework/jdbc/support/sql-error-codes.xml]> >> INFO [org.springframework.jdbc.support.SQLErrorCodesFactory] - >> <SQLErrorCodes loaded: [DB2, Derby, H2, HSQL, Informix, MS-SQL, MySQL, >> Oracle, PostgreSQL, Sybase]> >> >> >> Rahul Saluja wrote: >>> Hi Jishnu, >>> >>> I cannot understand anything by given exception but yes suggested >>> implementation by Ingmar is rite approach and moreover which version of >>> Postgres you are using as in 7.3.1 it is nlot possible to store the >>> array >>> data so better way of doing it is to convert the data in String and push >>> it as varchar and while retrieving back convert back it into your >>> required datatype array here is the example you can use for insertion. >>> >>> >>> >>> >>> >>> import java.sql.SQLException; >>> import java.sql.Types; >>> import java.util.Vector; >>> >>> import com.hns.hss.nmf.common.util.unilogger.LogFactory; >>> import com.hns.hss.nmf.common.util.unilogger.LoggerIf; >>> import com.ibatis.sqlmap.client.extensions.ParameterSetter; >>> import com.ibatis.sqlmap.client.extensions.ResultGetter; >>> import com.ibatis.sqlmap.client.extensions.TypeHandlerCallback; >>> >>> public class ByteArrayToTimeStampHandler implements TypeHandlerCallback >>> { >>> private static LoggerIf log_ = >>> LogFactory.getLoggerIf(ArraysToStringTypeHandler.class.getName()); >>> >>> >>> >>> public Object getResult(ResultGetter arg0) throws SQLException >>> { >>> // TODO Auto-generated method stub >>> return null; >>> } >>> >>> >>> public void setParameter(ParameterSetter setter, Object >>> parameter) >>> throws SQLException >>> { >>> if (parameter == null) >>> { >>> setter.setNull(Types.CHAR); >>> } >>> else >>> { >>> setter.setString(ArraysToString(parameter)); >>> } >>> // TODO Auto-generated method stub >>> >>> } >>> >>> >>> public Object valueOf(String arg0) >>> { >>> // TODO Auto-generated method stub >>> return null; >>> } >>> >>> >>> private String ArraysToString(Object obj) >>> { >>> if (obj == null) >>> { >>> throw new IllegalArgumentException("Could not >>> convert null to a String value. " + "Valid argument is an array of type >>> I_U8 Only "); >>> } >>> >>> else if (obj instanceof >>> com.hns.hss.nmf.server.log.manager.gensrc.Common.I_U8[]) >>> { >>> >>> com.hns.hss.nmf.server.log.manager.gensrc.Common.I_U8[] ourData >>> = >>> (com.hns.hss.nmf.server.log.manager.gensrc.Common.I_U8[]) obj; >>> int length = ourData.length; >>> Vector byteVector = new Vector(); >>> //byte[] newByteArray = new byte[length-1]; >>> int count = 0; >>> >>> for (int i = 0; i < length; i++) >>> { >>> >>> if (ourData[i].getValue() == (byte) >>> '\0') >>> //\0 byte value >>> { >>> log_.debug(" NULL CHAR FOUND "); >>> break; >>> } >>> else >>> { >>> >>> byteVector.add(ourData[i].getValue()); >>> count++; >>> } >>> } >>> log_.debug(" Byte Vector " + byteVector); >>> String finalHexString = new String(); >>> StringBuffer finalString = new StringBuffer(); >>> //String returnString = new String(); >>> try >>> { >>> finalHexString = >>> ByteArrayToTimeStampHandler.getHexString(byteVector); >>> >>> >>> >>> >>> ByteArrayToTimeStampHandler.hexToString(finalHexString, finalString); >>> log_.debug("finalString is " + >>> finalString.toString()); >>> >>> >>> if ( ourData[0].getValue() != (byte)45 ) >>> //Not a Negative Sign >>> { >>> log_.debug(" NOT A NEGATIVE SIGN "); >>> returnString = " " + finalString; >>> >>> >>> }else // Negative Sign >>> { >>> returnString = "-" + >>> finalString; >>> >>> } >>> >>> } >>> catch (Exception e) >>> { >>> e.printStackTrace(); >>> } >>> >>> String checkString = finalString.toString(); >>> return checkString; >>> >>> } >>> else >>> { >>> >>> return null; >>> } >>> //return null; >>> >>> } >>> >>> >>> public static final void hexToString(String hex, StringBuffer >>> out) >>> { >>> if (hex == null) return; >>> int length = hex.length() & -4; >>> for (int pos = 0; pos < length; pos += 4) >>> { >>> int this_char = 0; >>> try >>> { >>> this_char = Integer.parseInt(hex.substring(pos, pos + >>> 4), >>> 16); >>> } >>> catch (NumberFormatException NF_Ex) >>> { >>> } >>> out.append((char) this_char); >>> } >>> } >>> >>> public static String getHexString(Vector vector) throws >>> Exception >>> { >>> >>> String result = "00"; >>> short[] b = new short[vector.size()]; >>> >>> for (int j = 0; j < vector.size(); j++) >>> { >>> >>> b[j] = ((Short) vector.get(j)).shortValue(); >>> } >>> for (int i = 0; i < b.length; i++) >>> { >>> result += Integer.toString((b[i] & 0xff) + 0x100, >>> 16).substring(1); >>> result += "00"; >>> } >>> >>> return result.substring(0, result.length() - 2); >>> } >>> } >>> -----Original Message----- >>> From: jishnu123 [mailto:rjis...@gmail.com] >>> Sent: Friday, October 09, 2009 10:49 AM >>> To: user-java@ibatis.apache.org >>> Subject: Re: IBatis Array feild insertion problem in postgres >>> database()Please help me) >>> >>> >>> >>> Thank you for your reply...I have already implemented type handler and >>> all >>> classes as follows...But i got the the same error as follows....Please >>> help >>> me.....I didn't try array feild selection....I have been trying to >>> insertion >>> of array feild... >>> >>> I have to mention again that error as follows....Any body get an idea >>> please >>> reply immediately.. >>> >>> INFO [org.springframework.beans.factory.xml.XmlBeanDefinitionReader] - >>> <Loading XML bean definitions from class path resource >>> [org/springframework/jdbc/support/sql-error-codes.xml]> >>> INFO [org.springframework.jdbc.support.SQLErrorCodesFactory] - >>> <SQLErrorCodes loaded: [DB2, Derby, H2, HSQL, Informix, MS-SQL, MySQL, >>> Oracle, PostgreSQL, Sybase]> >>> >>> >>> Ingmar Lötzsch wrote: >>>> You can use a type handler and implement java.sql.Array. Example: >>>> >>>> 1st: abstract superclass as adapter >>>> >>>> public abstract class SqlArrayAdapter >>>> implements Array >>>> { >>>> public Object getArray() throws SQLException >>>> { >>>> // Auto-generated method stub >>>> return null; >>>> } >>>> >>>> public Object getArray(long index, int count) throws SQLException >>>> { >>>> // Auto-generated method stub >>>> return null; >>>> } >>>> >>>> public Object getArray(long index, int count, Map<String, Class< >>>> ? >>>> map) throws SQLException >>>> { >>>> // Auto-generated method stub >>>> return null; >>>> } >>>> >>>> public Object getArray(Map<String, Class< ? >> map) throws >>>> SQLException >>>> { >>>> // Auto-generated method stub >>>> return null; >>>> } >>>> >>>> public int getBaseType() throws SQLException >>>> { >>>> // Auto-generated method stub >>>> return 0; >>>> } >>>> >>>> public String getBaseTypeName() throws SQLException >>>> { >>>> // Auto-generated method stub >>>> return null; >>>> } >>>> >>>> public ResultSet getResultSet() throws SQLException >>>> { >>>> // Auto-generated method stub >>>> return null; >>>> } >>>> >>>> public ResultSet getResultSet(long index, int count) throws >>>> SQLException >>>> { >>>> // Auto-generated method stub >>>> return null; >>>> } >>>> >>>> public ResultSet getResultSet(long index, int count, Map<String, >>>> Class< >>>> ? >> map) throws SQLException >>>> { >>>> // Auto-generated method stub >>>> return null; >>>> } >>>> >>>> public ResultSet getResultSet(Map<String, Class< ? >> map) throws >>>> SQLException >>>> { >>>> // Auto-generated method stub >>>> return null; >>>> } >>>> } >>>> >>>> 2nd: implementation of java.sql.Array for use with int[] or >>>> Collection<Integer> >>>> >>>> public class IntArray >>>> extends SqlArrayAdapter >>>> { >>>> private static final Integer[] emptyArray = new Integer[0]; >>>> >>>> private int[] array; >>>> >>>> public IntArray(int[] array) >>>> { >>>> if (array == null) >>>> { >>>> throw new IllegalArgumentException("parameter >>>> array >>>> should not be >>>> null"); >>>> } >>>> this.array = array; >>>> } >>>> >>>> public IntArray(Collection<Integer> set) >>>> { >>>> if (set == null) >>>> { >>>> throw new IllegalArgumentException("parameter set >>>> should not be null"); >>>> } >>>> Integer[] keys = set.toArray(emptyArray); >>>> >>>> this.array = new int[keys.length]; >>>> for (int i = 0; i < keys.length; ++i) >>>> { >>>> Integer key = keys[i]; >>>> this.array[i] = key.intValue(); >>>> } >>>> } >>>> >>>> @Override >>>> public int getBaseType() >>>> // throws SQLException >>>> { >>>> return Types.INTEGER; >>>> } >>>> >>>> /** >>>> * This method is called by driver ver. 8 but not by ver. 7. >>>> */ >>>> @Override >>>> public String getBaseTypeName() >>>> // throws SQLException >>>> { >>>> return "int4"; >>>> } >>>> >>>> /** >>>> * This method is called by both drivers ver. 8 and 7. >>>> */ >>>> @Override >>>> public String toString() >>>> { >>>> String result = "{"; >>>> for (int i = 0; i < this.array.length; ++i) >>>> { >>>> if (i > 0) >>>> { >>>> result += ","; >>>> } >>>> result += this.array[i]; >>>> } >>>> result += "}"; >>>> return result; >>>> } >>>> >>>> public void free() >>>> // throws SQLException >>>> { >>>> this.array = null; >>>> } >>>> } >>>> >>>> 3rd: implementation of TypeHandlerCallback >>>> >>>> public class IntArrayTypeHandler >>>> implements TypeHandlerCallback >>>> { >>>> public void setParameter(ParameterSetter setter, Object >>>> parameter) >>>> throws SQLException >>>> { >>>> Collection<Integer> keys = (Collection<Integer>) >>>> parameter; >>>> IntArray intArray = new IntArray(keys); >>>> setter.setArray(intArray); >>>> } >>>> >>>> public Object getResult(ResultGetter getter) >>>> throws SQLException >>>> { >>>> Array array = getter.getArray(); >>>> return array; >>>> } >>>> >>>> public Object valueOf(String string) >>>> { >>>> return string; >>>> } >>>> } >>>> >>>> 4th: add the type handler to your configuration >>>> <typeAlias alias="IntArrayTypeHandler" >>>> type="com.asci.common.ibatis.IntArrayTypeHandler" /> >>>> >>>> 5th: SQL map >>>> >>>> <select id="selectFahrgastById" parameterClass="map" resultMap="..."> >>>> SELECT >>>> k.id, >>>> ... >>>> FROM kunden AS k >>>> WHERE k.id = ANY (#fahrgastIds,handler=IntArrayTypehandler#) >>>> </select> >>>> >>>> 6th: DAO >>>> >>>> public List<Fahrgast> selectFahrgastById(Set<Integer> fahrgastIds) >>>> { >>>> HashMap<String, Object> params = new HashMap<String, Object>(); >>>> params.put("fahrgastIds", fahrgastIds); >>>> List<Fahrgast> list = getSqlMapClientTemplate().queryForList( >>>> "datenerfassung.selectFahrgastById", params); >>>> return list; >>>> } >>>> >>>> jishnu123 schrieb: >>>>> Hai, >>>>> >>>>> I have to tried insertion of array feild in postgres database >>>>> using >>>>> spring mvc with iBatis.I got two lines error ...like >>>>> >>>>> Error as follows... >>>>> >>>>> >>>>> [org.springframework.beans.factory.xml.XmlBeanDefinitionReader] - >>>>> <Loading >>>>> XML bean definitions from class path resource >>>>> [org/springframework/jdbc/support/sql-error-codes.xml]> >>>>> [org.springframework.jdbc.support.SQLErrorCodesFactory] - >>>>> <SQLErrorCodes >>>>> loaded: [DB2, Derby, H2, HSQL, Informix, MS-SQL, MySQL, Oracle, >>>>> PostgreSQL, >>>>> Sybase]> >>>>> >>>>> >>>>> Its urgent ....Please help me........Any one has an idea please >>>>> reply >>>>> immediately otherwise sent to my emaild id rjis...@gmail.com >>>>> >>>>> >>>> >>>> --------------------------------------------------------------------- >>>> To unsubscribe, e-mail: user-java-unsubscr...@ibatis.apache.org >>>> For additional commands, e-mail: user-java-h...@ibatis.apache.org >>>> >>>> >>>> >>> -- >>> View this message in context: >>> http://www.nabble.com/IBatis-Array-feild-insertion-problem-in-postgres-database%28%29Please-help-me%29-tp25799490p25815639.html >>> Sent from the iBATIS - User - Java mailing list archive at Nabble.com. >>> >>> >>> --------------------------------------------------------------------- >>> To unsubscribe, e-mail: user-java-unsubscr...@ibatis.apache.org >>> For additional commands, e-mail: user-java-h...@ibatis.apache.org >>> The information contained in this e-mail is private & confidential and >>> may >>> also be legally privileged. If you are not the intended recipient, >>> please >>> notify us, preferably by e-mail, and do not read, copy or disclose the >>> contents of this message to anyone. >>> >>> --------------------------------------------------------------------- >>> To unsubscribe, e-mail: user-java-unsubscr...@ibatis.apache.org >>> For additional commands, e-mail: user-java-h...@ibatis.apache.org >>> >>> >>> >> > > > --------------------------------------------------------------------- > To unsubscribe, e-mail: user-java-unsubscr...@ibatis.apache.org > For additional commands, e-mail: user-java-h...@ibatis.apache.org > > > -- View this message in context: http://www.nabble.com/IBatis-Array-feild-insertion-problem-in-postgres-database%28%29Please-help-me%29-tp25799490p25853890.html Sent from the iBATIS - User - Java mailing list archive at Nabble.com. --------------------------------------------------------------------- To unsubscribe, e-mail: user-java-unsubscr...@ibatis.apache.org For additional commands, e-mail: user-java-h...@ibatis.apache.org