后端JSP文件里Java语言如果操作Oracle Spatial提供的JGeometry对象

记个流水账,记录下这个困扰自己多时的问题最后怎么解决的。当时觉得该尝试的都尝试了,纳闷到底怎样能解决的,最后还是解决了~

正确的代码如下:

<%@ 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.*"

我之前导入的是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);
时间: 2024-10-09 04:39:23

后端JSP文件里Java语言如果操作Oracle Spatial提供的JGeometry对象的相关文章

后端JSP文件里Java语言如何操作Oracle Spatial提供的JGeometry对象2

之前写过一篇文章记录过遇到的一些问题,这次换新机子,又遇到一些问题搞不定,现在解决了,记录下.因为这些问题真的是,知道的人很快就可以搞定,不知道的人搞来搞去花费很多很多时间,搞的人都郁闷了,还是搞不定. 之前的文章,见此. 主要遇到的错误如下: 1.在点击一个按钮,调用一.jsp文件后,正常的应该是,State从1到2到3到4的过程中,相应的HTTP状态值为0到200到200到200:而我这里出现错误,State从1之后直接到4,HTTP状态值两个都是0. 审查网页元素后发现,错误截图如下: 虽

如何在Eclipse里,有什么快捷的替换方法。把上百个jsp文件里的内容替换掉

ctrl + h 如何在Eclipse里,有什么快捷的替换方法.把上百个jsp文件里的内容替换掉,布布扣,bubuko.com

tomcat work目录的作用就是编译每个项目里的jsp文件为java文件如果项目没有jsp页面则这个项目文件夹为空

最近发现,很多网友喜欢把tomcat的work目录里的东西叫做缓存,其实那不是很恰当,work目录只是tomcat的工作目录,也就是tomcat把jsp转换为class文件的工作目录,这也正是为什么它叫work目录而不是cache目录的原因. jsp,tomcat的工作原理是当浏览器访问某个jsp页面时,tomcat会在work目录里把这个jsp页面转换成.java文件,比如将index.jsp转换为index_jsp.java文件,而后编译为index_jsp.class文件,最后tomcat

使用C#操作Oracle Spatial的SDO_GEOMETRY对像(读取和写入)

首先,这个需要使用ODAC,也就是Oracle.DataAccess.dll,新出的托管Oracle.ManagedDataAccess.dll不支持Object Type,无法使用 ODAC下载地址参考:http://www.oracle.com/technetwork/topics/dotnet/utilsoft-086879.htmlODAC使用方法参考:http://blog.csdn.net/rrrrssss00/article/details/7178515 代码见附件http://

java:JSP(JSPWeb.xml的配置,动态和静态导入JSP文件,重定项和请求转发,使用JSP实现数据库的增删改查实例)

1.JSP的配置: <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%> <% String path = request.getContextPath(); String basePath = request.getScheme() + "://" + request.getServerName() + ":&qu

java语言程序

第一章 Jave语言基础 1.1 Java语言的特点 领会Java语言的特点.关键字 1010-11.Java语言采用多种机制来保证可移植性,其中最主要的是______.虚拟机 1110-11.Java语言是一种 ____强类型语言___ 语言,它约束程序员必须遵守规定编写程序,能让编译器检测出程序中尽可能多的错误. 1.2 Java应用程序和小应用程序 识记      Java应用程序与小应用程序的特点和区别 11.一个应用程序必须在某个类中定义的方法是______.main() 1201-

【数据结构】之队列(Java语言描述)

在[这篇文章]中,我简单介绍了队列的基本数据结构及操作方式,并用C语言代码描述了队列的基本功能实现. JDK中默认为我们提供了队列的API-- Queue . Queue是一个接口,其中提供了处理队列及其操作的一些基本方法,如果我们想要创建自己的队列,就需要先创建一个类实现Queue接口. 在Java语言中也为我们提供了一些现成的Queue接口的实现类,如下: * @see java.util.Collection * @see LinkedList * @see PriorityQueue *

Java生成和操作Excel文件

JAVA EXCEL API:是一开放源码项目,通过它Java开发人员可以读取Excel文件的内容.创建新的Excel文件.更新已经存在的Excel文件.使用该API非Windows操作系统也可以通过纯Java应用来处理Excel数据表.因为它是使用Java编写的,所以我们在Web应用中可以通过JSP.Servlet来调用API实现对Excel数据表的访问. 下载: 官方网站 http://www.andykhan.com/jexcelapi/ 下载最新版本(本人下的是jexcelapi_2_6

(转载)Java生成和操作Excel文件

JAVA EXCEL API:是一开放源码项目,通过它Java开发人员可以读取Excel文件的内容.创建新的Excel文件.更新已经存在的Excel文件.使用该API非Windows操作系统也可以通过纯Java应用来处理Excel数据表.因为它是使用Java编写的,所以我们在Web应用中可以通过JSP.Servlet来调用API实现对Excel数据表的访问. 下载: 官方网站 http://www.andykhan.com/jexcelapi/ 下载最新版本(本人下的是jexcelapi_2_6