后端JSP文件里Java语言如何操作Oracle Spatial提供的JGeometry对象
2014-11-25 14:21
513 查看
记个流水账,记录下这个困扰自己多时的问题最后怎么解决的。当时觉得该尝试的都尝试了,纳闷到底会怎样解决,最后还是解决了~
正确的代码如下:
然后由于用到JGeometry对象,JGeometry对象是在sdoapi.jar中提供的。其中需要用到sdoapi.jar和sdoutl.jar。所以需要在头信息的import里导入相应包:oracle.spatial.geometry.*,oracle.spatial.util.*,oracle.sql.*
其中还需要把这两个jar文件拷到tomcat下的lib文件夹下。至于是拷到tomcat下的lib文件夹,还是当前项目文件夹、还是当前项目文件下新建lib文件夹,就不太清楚了,之前老是有问题,三个地方都拷了都尝试了。感觉拷到tomcat下的lib文件夹应该就可以了,因为之前用到的jdbc的jar文件都是拷到这里的。
我之前导入的是oracle.spatial.geometry.*,oracle.jdbc.driver.*,oracle.sql.STRUCT; 没有导入oracle.spatial.util.*,可能导致JGeometry类型报错。
之前都是在浏览器加载jsp页面时报错JGeometry是未定义类型。后来没报这个错了,但还是有问题,一直以为还是这个问题,以为JGeometry不可用。(因为之前报JGeometry错的时候,也是有时报错有时不报错。)
然后程序里,通过select geom 去除sdo_geometry对象,再进行getObject和load。其中getObject()中的索引是指总共的项索引,不是指Object的索引。比如第一个属性是String,第二个属性是sdo_geometry。则取值依次为getString(1)和getObject(2)。我之前是select *了,然后getObject(1),所以是有问题的。(select * 出来的第一个是String,第二个是sdo_geometry)
正确的代码如下:
<%@ page contentType="text/html; charset=gb2312" language="java" import="java.sql.*,java.lang.*,oracle.spatial.geometry.*,oracle.spatial.util.*,oracle.sql.*" errorPage="" %> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=gb2312" /> <title>no title text</title> </head> <body> <% response.addHeader("Access-Control-Allow-Origin", "http://192.168.14.216:8888");//oracle.spatial.geometry.*,oracle.jdbc.driver.*,oracle.sql.STRUCT; //out.print("OK!"); String SQLStatement =""; String sp =request.getParameter("sp"); //out.print(sp); Class.forName("oracle.jdbc.driver.OracleDriver"); //加载JDBC驱动程序 //建立连接 String URL = "jdbc:oracle:thin:@localhost:1521:cad"; Connection conn = DriverManager.getConnection(URL,"cadadmin","cad"); /*if(conn.isClosed()) out.print("Failed to connect to the database!"); else out.print("Succeed connecting to the database!");*/ Statement stmt=conn.createStatement(); //求sp房间所对应的对象集合 //SQLStatement = "select rm.x,rm.y,rm.z from table(select geom from room where idc = "+sp+") rm"; //SQLStatement = "select mo.x,mo.y,mo.z,mo.room_id from table(select NavWithPosIndoor(position4indoor("+pos1id+","+pos1x+","+pos1y+","+pos1z+"),position4indoor("+pos2id+","+pos2x+","+pos2y+","+pos2z+"),ind.indoor) from inSpace ind) mo"; SQLStatement = "select geom from room where idc = "+sp; ResultSet res_room=stmt.executeQuery(SQLStatement); if(res_room.next()){ STRUCT dbObject=(STRUCT)res_room.getObject(1); JGeometry geom=JGeometry.load(dbObject); int plen=geom.getNumPoints();//点个数 //out.print("plen"+plen); double rmzb[]=new double[plen*2]; rmzb=geom.getOrdinatesArray(); for(int i=0;i<plen*2;++i) { out.print(rmzb[i]+","); } //String rmid=res_room.getString(1); //out.print("room:"+rmid); //String rmx=res_room.getString(2); //String rmy=res_room.getString(3); //String rmz=res_room.getString(4); //out.print("room:"+rmid+" "+rmx+" ");//+rmy+" "+rmz+" "); } out.print("1"); stmt.close(); conn.close(); %> </body> </html>其中,由于地图是在8888端口,而该jsp文件是在tomcat文件夹下webapps文件夹下新建的项目文件夹下,在8080端口。在chrome浏览器运行,需要如下代码:
response.addHeader("Access-Control-Allow-Origin", "http://192.168.14.216:8888");
然后由于用到JGeometry对象,JGeometry对象是在sdoapi.jar中提供的。其中需要用到sdoapi.jar和sdoutl.jar。所以需要在头信息的import里导入相应包:oracle.spatial.geometry.*,oracle.spatial.util.*,oracle.sql.*
import="java.sql.*,java.lang.*,oracle.spatial.geometry.*,oracle.spatial.util.*,oracle.sql.*"
其中还需要把这两个jar文件拷到tomcat下的lib文件夹下。至于是拷到tomcat下的lib文件夹,还是当前项目文件夹、还是当前项目文件下新建lib文件夹,就不太清楚了,之前老是有问题,三个地方都拷了都尝试了。感觉拷到tomcat下的lib文件夹应该就可以了,因为之前用到的jdbc的jar文件都是拷到这里的。
我之前导入的是oracle.spatial.geometry.*,oracle.jdbc.driver.*,oracle.sql.STRUCT; 没有导入oracle.spatial.util.*,可能导致JGeometry类型报错。
之前都是在浏览器加载jsp页面时报错JGeometry是未定义类型。后来没报这个错了,但还是有问题,一直以为还是这个问题,以为JGeometry不可用。(因为之前报JGeometry错的时候,也是有时报错有时不报错。)
然后程序里,通过select geom 去除sdo_geometry对象,再进行getObject和load。其中getObject()中的索引是指总共的项索引,不是指Object的索引。比如第一个属性是String,第二个属性是sdo_geometry。则取值依次为getString(1)和getObject(2)。我之前是select *了,然后getObject(1),所以是有问题的。(select * 出来的第一个是String,第二个是sdo_geometry)
SQLStatement = "select geom from room where idc = "+sp; ResultSet res_room=stmt.executeQuery(SQLStatement); if(res_room.next()){ STRUCT dbObject=(STRUCT)res_room.getObject(1); JGeometry geom=JGeometry.load(dbObject);
相关文章推荐
- 后端JSP文件里Java语言如何操作Oracle Spatial提供的JGeometry对象2
- Java 如何对文件进行多个Object对象流的读写操作
- Java 如何对文件进行多个Object对象流的读写操作
- Java 如何对文件进行多个Object对象流的读写操作
- Java 如何对文件进行多个Object对象流的读写操作
- Java 如何对文件进行多个Object对象流的读写操作
- 自定义java.policy配置(如何让你的类禁止读写文件?禁止创建Socket对象?)
- myeclipse 如何统一修改全部的java、jsp、js 等文件的编码
- jsp中操作java属性文件
- 关于JAVA EE项目在WEB-INF目录下的jsp页面如何访问WebRoot中的CSS和JS文件
- myeclipse 如何统一修改全部的java、jsp、js 等文件的编码 例如修改为utf-8
- 使用Java提供的方法防止IE缓存JSP文件
- 在Java 7中如何对文件进行操作
- 在Java语言中,如何列出PC机文件系统中的所有驱动器名?
- Resin是CAUCHO公司的产品,是一个非常流行的application server,对servlet和JSP提供了良好的支持,性能也比较优良,resin自身采用JAVA语言开发。
- 关于JAVA EE项目在WEB-INF目录下的jsp页面如何访问WebRoot中的CSS和JS文件
- 关于JAVA EE项目在WEB-INF目录下的jsp页面如何访问WebRoot中的CSS和JS文件
- javabean操作文件正确,但是Jsp调用javabean时文件路径出错问题解决之JavaBean访问本地文件实现路径无关实现方法
- 在Java 7里如何对文件进行操作
- java编译好的class文件如何在jsp页面中调用