hibernate3.1b3版+Tomcat5.5.15+Oracle9:存储空间数据时,使用的自定义类型出错!!!
[b]hibernate+Tomcat,存储空间数据时,使用的自定义类型出错!!! [b]
配置环境:hibernate3.1b3版+Tomcat5.5.15+Oracle9
在往Oracle数据库存储空间数据的时候,出错.其他不涉及到空间数据的地方一切正常.
错误:
**********输出1**************
oracle.sql.STRUCT@1d9e279
time:2006-03-01 02:38:24:312
Servlet.service() for servlet jsp threw exception
method:org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:253)
java.lang.ArrayIndexOutOfBoundsException: 1
at com.lbsone.cusxy.nullSafeGet(cusxy.java:50)
at org.hibernate.type.CustomType.nullSafeGet(CustomType.java:104)
at org.hibernate.type.AbstractType.hydrate(AbstractType.java:81)
at org.hibernate.persister.entity.AbstractEntityPersister.hydrate(AbstractEntityPersister.java:1889)
at org.hibernate.loader.Loader.loadFromResultSet(Loader.java:1372)
at org.hibernate.loader.Loader.instanceNotYetLoaded(Loader.java:1300)
at org.hibernate.loader.Loader.getRow(Loader.java:1197)
at org.hibernate.loader.Loader.getRowFromResultSet(Loader.java:568)
at org.hibernate.loader.Loader.doQuery(Loader.java:689)
at org.hibernate.loader.Loader.doQueryAndInitializeNonLazyCollections(Loader.java:223)
at org.hibernate.loader.Loader.doList(Loader.java:2147)
at org.hibernate.loader.Loader.listIgnoreQueryCache(Loader.java:2026)
at org.hibernate.loader.Loader.list(Loader.java:2021)
at org.hibernate.loader.custom.CustomLoader.list(CustomLoader.java:109)
at org.hibernate.impl.SessionImpl.listCustomQuery(SessionImpl.java:1544)
at org.hibernate.impl.SQLQueryImpl.list(SQLQueryImpl.java:165)
at com.lbsone.MapCard.newcards(MapCard.java:405)
at org.apache.jsp.mapcardleft_jsp._jspService(org.apache.jsp.mapcardleft_jsp:66)
at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:97)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:332)
at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:314)
at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:264)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:252)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:213)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:178)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:126)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:105)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:107)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:148)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:869)
at org.apache.coyote.http11.Http11BaseProtocol$Http11ConnectionHandler.processConnection(Http11BaseProtocol.java:667)
at org.apache.tomcat.util.net.PoolTcpEndpoint.processSocket(PoolTcpEndpoint.java:527)
at org.apache.tomcat.util.net.LeaderFollowerWorkerThread.runIt(LeaderFollowerWorkerThread.java:80)
at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:684)
at java.lang.Thread.run(Thread.java:595)
我的自定义类文件:cusxy.java
package com.lbsone;
import oracle.sql.STRUCT;
import java.io.*;
import java.sql.*;
import org.hibernate.usertype.*;
import oracle.spatial.geometry.*;
public class cusxy
implements UserType {
private static final int[] TYPES = new int[] {
Types.VARCHAR
};
public cusxy() {
}
public static void main(String[] args) {
cusxy cusxy1 = new cusxy();
}
public int[] sqlTypes() {
return TYPES;
}
public Class returnedClass() {
return String.class;
}
public boolean equals(Object parm1, Object parm2) throws org.hibernate.
HibernateException {
boolean i = true;
if (parm1 != null) {
if (parm1.equals(parm2)) {
i = true;
}
else {
i = false;
}
}
return i;
}
public Object nullSafeGet(ResultSet result, String[] parm2, Object parm3) {
String xy = "";
oracle.sql.STRUCT st = null;
try {
System.out.println("**********输出1**************");
System.out.println(result.getObject(parm2[0]));
System.out.println("**********输出2**************");
st = (oracle.sql.STRUCT) result.getObject(parm2[0]);
System.out.println("**********输出3**************");
}
catch (SQLException ex) {
//ex.printStackTrace();
System.out.println("*******异常************");
}
System.out.println("***********完成************");
if (st != null) {
JGeometry j_geom = null;
try {
j_geom = JGeometry.load(st);
}
catch (SQLException ex1) {
}
if (j_geom != null) {
double[] dxy = j_geom.getPoint();
if (dxy != null) {
for (int i = 0; i < dxy.length; i++) {
xy = dxy[0] + ";" + dxy[1];
}
}
}
}
return xy;
}
public void nullSafeSet(PreparedStatement parm1, Object parm2, int parm3) throws
org.hibernate.HibernateException, java.sql.SQLException {
String xysrc = (String) parm2;
System.out.println("xy===" + xysrc);
String xyArr[] = xysrc.split(";");
try {
// PoolableConnection connpool=(PoolableConnection)parm1.getConnection();
//Connection conn=connpool.getInnermostDelegate();
//System.out.println("oracle.jdbc.driver.OracleConnection");
//com.mchange.v2.c3p0.impl.NewProxyConnection conns = (com.mchange.v2.c3p0.
//impl.NewProxyConnection) parm1.getConnection();
oracle.jdbc.driver.OracleConnection conns = (oracle.jdbc.driver.OracleConnection) parm1.getConnection();
Statement statement = conns.createStatement();
ResultSet resultset = statement.executeQuery(
"select GEOLOC from usrpoi where rownum<2"); ;
resultset.next();
STRUCT st = (oracle.sql.STRUCT) resultset.getObject(1);
Connection conn = st.getConnection();
System.out.println("connection+++" + conn);
String x = xyArr[0];
String y = xyArr[1];
System.out.println("x+y=" + x + y);
double dx = Double.parseDouble(x);
double dy = Double.parseDouble(y);
JGeometry jg = new JGeometry(2001, 8192, dx, dy, 0, null, null);
STRUCT struct = JGeometry.store(jg, conn);
String xy = "MDSYS.SDO_GEOMETRY(2001,8192,MDSYS.SDO_POINT_TYPE(" + x +
"," + y + ",0),null,null)";
parm1.setObject(parm3, struct);
resultset.close();
statement.close();
conn.close();
}
catch (Exception e) {
System.out.print("异常报告输出1");
e.printStackTrace();
}
}
public Object deepCopy(Object parm1) throws org.hibernate.HibernateException {
String xy = (String) parm1;
return xy;
}
public boolean isMutable() {
return false;
}
public int hashCode(Object object) {
return 0;
}
public Serializable disassemble(Object object) {
return null;
}
public Object assemble(Serializable serializable, Object object) {
return "";
}
public Object replace(Object object, Object object1, Object object2) {
return "";
}
}
*****************************************************************************************
问题点数:20、回复次数:1Top
1 楼znjgress(四空和尚)回复于 2006-03-03 09:28:02 得分 0
友情UPTop




