ibatis-user-java mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Rahul Saluja <rahul.sal...@vnl.in>
Subject RE: IBatis Array feild insertion problem in postgres database()Please help me)
Date Fri, 09 Oct 2009 05:23:37 GMT
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:rjishnu@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 rjishnu@gmail.com
>>
>>
>
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: user-java-unsubscribe@ibatis.apache.org
> For additional commands, e-mail: user-java-help@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-unsubscribe@ibatis.apache.org
For additional commands, e-mail: user-java-help@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-unsubscribe@ibatis.apache.org
For additional commands, e-mail: user-java-help@ibatis.apache.org


Mime
View raw message