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:[email protected]]
>>> Sent: Friday, October 09, 2009 10:49 AM
>>> To: [email protected]
>>> 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 [email protected]
>>>>>
>>>>>
>>>>
>>>> ---------------------------------------------------------------------
>>>> To unsubscribe, e-mail: [email protected]
>>>> For additional commands, e-mail: [email protected]
>>>>
>>>>
>>>>
>>> --
>>> 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: [email protected]
>>> For additional commands, e-mail: [email protected]
>>> 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: [email protected]
>>> For additional commands, e-mail: [email protected]
>>>
>>>
>>>
>>
>
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: [email protected]
> For additional commands, e-mail: [email protected]
>
>
>
--
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: [email protected]
For additional commands, e-mail: [email protected]