现在在编译Postgis文档中,java client部分代码,修改了下无法在jsp+tomcat6.0+jdk1.5的环境下编译通过。
Postgresq驱动是postgresql-8.2-506.jdbc3.jar  Postgis驱动是postgis-1.3.3.jar
本人代码如下:         String str="";
        String url="jdbc:postgresql://localhost:5432/hz";
        String user="abcde";
        String pwd="123456";
        java.sql.Connection conn;
        Statement stmt=null;
        ResultSet rs=null;
        try{
           Class.forName("org.postgresql.Driver").newInstance();
           conn=DriverManager.getConnection(url,user,pwd);    
          ((org.postgresql.jdbc3.Jdbc3Connection)conn).addDataType("box3d","org.postgis.PGbox3d");
          ((org.postgresql.jdbc3.Jdbc3Connection)conn).addDataType("the_geom","org.postgis.PGgeometry");
           stmt=conn.createStatement();
           }catch(Exception e){
              System.err.println("Driver:"+e.getMessage());
           }  
            String sql="";
            str="select asText(geom) as geom from hzpb where name='2'";
     ResultSet rs1=stmt.executeQuery(str);
     while(rs1.next())
    {
PGgeometry geom=(PGgeometry)rs1.getObject(1);
out.println(geom.toString());
}
Tomcat 报错如下:
org.apache.jasper.JasperException: An exception occurred processing JSP page /WebRoot/1.jsp at line 2219: 
20:  while(rs1.next())
21:  {
22:     PGgeometry geom=(PGgeometry)rs1.getObject(1);
23:     
24:     out.println(geom.toString());
Stacktrace:
org.apache.jasper.servlet.JspServletWrapper.handleJspException(JspServletWrapper.java:505)
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:416)
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:342)
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:267)
javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
root cause java.lang.ClassCastException: java.lang.String
org.apache.jsp.WebRoot._1_jsp._jspService(_1_jsp.java:139)
org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)
javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:374)
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:342)
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:267)
javax.servlet.http.HttpServlet.service(HttpServlet.java:717)

解决方案 »

  1.   

    没用过java,不过你能告诉下跟踪到哪一步除了问题吗?
      

  2.   


      java.lang.*; import org.postgis.*; 
    public class JavaGIS { 
    public static void main(String[] args) 
    { java.sql.Connection conn; 
      try 
      { /* * Load the
          JDBC driver and establish a connection. */
          Class.forName("org.postgresql.Driver");
          String url ="jdbc:postgresql://localhost:5432/database"; 
          conn =DriverManager.getConnection(url, "postgres", ""); 
          /* *Add the geometry types to the connection. Note that you * must cast the
          connection to the pgsql-specific connection * implementation before
          calling the addDataType() method. 
          */
          ((org.postgresql.Connection)conn).addDataType("geometry","org.postgis.PGgeometry");
          ((org.postgresql.Connection)conn).addDataType("box3d","org.postgis.PGbox3d");
          /* * Create a statement and execute a select query. */ 
          Statement s =conn.createStatement(); 
          ResultSet r = s.executeQuery("select AsText(geom) as geom,id from geomtable"); 
          while( r.next() ) 
          { 
          /* *Retrieve the geometry as an object then cast it to the geometry type. *        Print things out. */ 
            PGgeometry geom = (PGgeometry)r.getObject(1); 
            int id = r.getInt(2); 
            System.out.println("Row " + id + ":");
            System.out.println(geom.toString()); } 
            s.close(); conn.close(); } 
           catch(Exception e ) 
           { 
             e.printStackTrace(); 
           } 
        } 
    }这个是postgis上的例子。
    org.apache.jasper.JasperException: An exception occurred processing JSP page /WebRoot/1.jsp at line 22 
    你的1.jsp就是你贴出来的例子吗?
      

  3.   

    嗯,感谢ls的回答,由于Postgis中例子无法编译通过,问题就处在org.postgresql.Connection这里。
    改成org.postgresq.PGconnection就可以通过。
    不知道为什么,是文档太久没更新呢,还是postgis更新太快了。