jsp连接MySQL数据库显示GIS地理数据乱码问题的解决(select AsText(the_geom))
oh,fuck,经过我昨天下午到今天的努力,终于将这一问题成功解决了,哈哈哈
问题详细描述:
我通过jsp页面连接上MySQL数据库,取出存在表中的地理数据(类型是geometry,具体有POINT、MULTILINESTRING等),其在数据库中的存储格式为(以POINT类为例):POINT(121.38785 28.426766),表的设计及表内具体内容见下图:
前天就测试了把表中的全部数据取出来,但取出来之后发现经纬度部分是乱码的,由于我昨天先要解决jsp往数据库存数据乱码的问题,所以就先把经纬度乱码的问题放了一放。昨天下午终于把存数据乱码的问题解决了之后就开始考虑如何解决经纬度显示乱码的问题。
我首先想到的是,既然我存进数据库的是字符串(如POINT(121.38785 28.426766)),那么我取出来的也应该是字符串啊,因而也就应该能正常显示到页面啊。如果能正常显示的话,我就能使用字符串分离提取出经度值和纬度值来使用了。可是乱码问题出在哪儿呢?
在openlayers技术群1里问了下,有人提示我试试使用类似于SELECT X(GeometryFromText(P))、SELECT Y(GeometryFromText(P))的语句取the_geom的数值试下,我把p用the_geom替换,添加到我的jsp页面的语句中,测试,不可行,而且这样的话会对我的代码结构产生影响,并且会影响我的结果的输出,具体为什么请看我的代码结构(主要是我使用了String query_sql = "select * from biandianzhan_point_tb";这一语句):
String connUrl = "jdbc:mysql://localhost/" + DBName + "?user=" + DBUser + "&password=" + DBPasswd;
Class.forName(driverName).newInstance();
Connection conn = DriverManager.getConnection(connUrl);
Statement stmt = conn.createStatement();
stmt.executeQuery("SET NAMES UTF8");
String query_sql = "select * from biandianzhan_point_tb";
try {
ResultSet rs = stmt.executeQuery(query_sql);
while(rs.next()) {
%>
ID:<%=rs.getString("id")%> </br>
名称:<%=rs.getString("name")%> </br>
电压等级:<%=rs.getString("voltage_level")%> </br>
经纬度:<%=rs.getString("AsText(the_geom)")%> </br>
<%
}
}catch(Exception e) {
e.printStackTrace();
}
//rs.close();
stmt.close();
conn.close();
群里的那位仁兄同时还给我发来MySQL官网中介绍MySQL对空间数据支持的扩展的API链接(http://dev.mysql.com/doc/refman/5.1/zh/spatial-extensions-in-mysql.html#fetching-spatial-data),我进去看了下,很有收获,最终锁定了一个函数AsText(),非常感谢这位仁兄啊!
但是,我自己尝试着使用了下这个函数,没测试成功,很遗憾。后来发现我是测试的对象不对,我测试的是age和name,这两个变量的类型和the_geom的类型不对,估计是AsText()函数指定了参数类型。测试的结果如下图:
因为我对AsText()这个函数不了解,不知道怎么正确使用,于是我在网上搜索了一下这个函数,遗憾的是可用资源太少,庆幸的是我找到了一片很有用的博客,在此非常感谢博主!博文的网址为http://blog.sina.com.cn/s/blog_a48af8c001018q1p.html,下面我摘抄了一段有用的内容:
从Points表中读取数据也是非常简单的:
SELECT name, AsText(location) FROM Points;
以上语句的返回结果中location会被转换成跟第二步中一样的GIS标准字符串。实际上AsText函数仅仅是把数据库内部存储的几何对象格式化成一个字符串而已。
下面一个函数也是非常有用的:
SELECT name, AsText(location) FROM Points WHERE X(location) < 10 and Y(location) > 12;
该Select语句返回一系列location的X()(经度)小于10并且Y()(经度)大于12的点集合。
空间表的高级查询
把指定的几何对象转变易读的文本:
SELECT AsText(Envelope(GeomFromText('LineString(1 1,2 2)')));
返回指定几何对象的大小:
SELECT GeometryType(GeomFromText('POINT(1 1)'));
返回指定几何对象的类型:
SELECT GeometryType(GeomFromText('POINT(1 1)'));
于是,我现在数据库命令行里测试了下命令:select AsText(the_geom) from biandianzhan_point_tb ,哈哈哈,成功地显示了我需要的字符串信息:经纬度。于是我又扩展了一下这个语句,改为:select id,name,voltage_level,AsText(the_geom) from biandianzhan_point_tb,呵呵,也成功地显示了目标信息,测试结果如下:
可以看出命令行显示的中文字符是乱码的,不过不要紧,这是命令行dos窗口的编码方式导致的。总的来说,我现在是非常高兴的,因为终于能够显示我想要的信息了。
接下来就是要把这些语句放进jsp页面代码中执行了,修改后,我的jsp代码为:
String connUrl = "jdbc:mysql://localhost/" + DBName + "?user=" + DBUser + "&password=" + DBPasswd;
Class.forName(driverName).newInstance();
Connection conn = DriverManager.getConnection(connUrl);
Statement stmt = conn.createStatement();
stmt.executeQuery("SET NAMES UTF8");
String insert_sql = "INSERT INTO biandianzhan_point_tb VALUES('" + id + "','" + name + "','" + voltage_level + "',GeometryFromText('POINT (" + lon + " " + lat + ")') )";
String query_sql = "select id,name,voltage_level,AsText(the_geom) from biandianzhan_point_tb"; try {
stmt.execute(insert_sql);
}catch(Exception e) {
e.printStackTrace();
}
try {
ResultSet rs = stmt.executeQuery(query_sql);
while(rs.next()) {
%>
ID:<%=rs.getString("id")%> </br>
名称:<%=rs.getString("name")%> </br>
电压等级:<%=rs.getString("voltage_level")%> </br>
经纬度:<%=rs.getString("AsText(the_geom)")%> </br> </br>
<%
}
}catch(Exception e) {
e.printStackTrace();
}
//rs.close();
stmt.close();
conn.close();
修改好后,直接在浏览器访问insert_map.jsp,见证奇迹的时刻就要到了啊!
哈哈,我期望的效果终于出来了啊!经纬度值终于显示了!
下一步我就可以使用字符串分离分别得到经度值和纬度值用于其他地方了。
jsp连接MySQL数据库显示GIS地理数据乱码问题的解决(select AsText(the_geom))的更多相关文章
- JSP连接MySQL数据库问题
之前写了一大段,还说了一下具体JDBC连接数据库API的具体包的基本知识,哪知道自己手残不小心按了删除按钮.结果去看自动保存记录时,就只剩下下面这段了.好吧,其实最主要最核心的也就是下面这点了.具体如 ...
- Jsp连接Mysql数据库取数方法
我将Jsp连接Mysql数据库方法整理如下,供大家学习交流! 1.首先在myslq数据库中新建mldn数据库,并新建emp表.(方法不展开介绍) 插入数据如下: create table `emp` ...
- java web 程序---jsp连接mysql数据库的实例基础+表格显示
<%@ page language="java" import="java.util.*,java.sql.*" pageEncoding="g ...
- tomcat之jsp连接mysql数据库
一.下载并部署mysql连接类 首先下载mysql连接类,下载地址https://dev.mysql.com/downloads/connector/j 如图所示,选择第一个箭头所指的平台无关版本,然 ...
- 值得收藏的JSP连接mysql数据库的例子
1:用mysql驱动把mysql与tomcat的连接起来.把mysql驱动包(不用解压)放到Tomcat安装目录中lib文件夹下即可. 2:然后在自己的新建的web应用程序上面就可以下下面的代码 3: ...
- JSP连接mysql数据库的重点
1:用mysql驱动把mysql与tomcat的连接起来.把mysql驱动包(不用解压)放到Tomcat安装目录中lib文件夹下即可. 2:然后在自己的新建的web应用程序上面就可以下下面的代码 3: ...
- VS2017项目中使用代码连接MySQL数据库,以及进行数据添加
//头文件 #include "mysql.h" //函数定义 // 执行sql语句, 包括增加.删除.更新数据 bool ExecuteSql(MYSQL m_mysql,con ...
- jsp连接mysql数据库
1.新建一个Java web项目. 2.导入mysql驱动包.(这个跟上一篇写的Java连接mysql类似) 3.编写测试代码 <%@ page contentType="text/h ...
- mysql数据库优化方法大数据量查询轻松解决
1.对查询进行优化,应尽量避免全表扫描,首先应考虑在 where 及 order by 涉及的列上建立索引. 2.应尽量避免在 where 子句中对字段进行 null 值判断,否则将导致引擎放弃使用索 ...
随机推荐
- k8s google sample - guestbook
Redis读写分离作为存储 PHP网页作为前端 github地址 https://github.com/kubernetes/kubernetes/blob/release-1.1/examples/ ...
- 《神秘的程序员们》漫画26~28:《万年坑系列》 I、II、III(转)
26 <万年坑系列> I:那些令你憎恶的系统从何而来? 世界上总有一些令人憎恶的系统,而你却天天非用不可.这些系统的提供方们既不缺钱也不缺人,有的还很热衷于改版升级. 但为何升级完后,它们 ...
- java.lang.Runnable接口
大家都知道使用线程的2种方式,一是继承Thread类,二是实现Runnable接口.实际上,即使你实现了Runnable接口,终于还是要构造一个Thread类的对象.看过Thread源码发现,事实上这 ...
- ubuntu下安装myeclipse
一.下载myeclipse 官网下载:http://www.myeclipseide.com/ 我使用的是myeclipse pro 2014.run,重命名为myeclipse.run 示例路径:/ ...
- mvc5 解析route源码实现自己的route系统
Asp.net mvc5 解析route源码实现自己的route系统 url route 路由系统的责任是找到匹配的路由,创建路由数据,并将请求分配给一个处理程序. 选择动作是 MVC 的处理程序 ...
- SqlServer发送邮件,定时作业
今天偶然研究了一下sqlserver发送邮件的功能,之前听说过可以发,但是一直没尝试过,只是用C#写后台程序的方式来发邮件. 现在又多了一种发送邮件的途径. 大致的步骤如下: 1.配置sqlserve ...
- hdu 亲和串(kmp)
Problem Description 人随着岁数的增长是越大越聪明还是越大越笨,这是一个值得全世界科学家思考的问题,同样的问题Eddy也一直在思考,因为他在很小的时候就知道亲和串如何判断了,但是发现 ...
- WIN phone 8.1 SDK 坑遇到 Hyper-V
先声明! 仅限WIN操作系统下 ! 事实上 Hyper-V 就是个虚拟机 ,是微软弄出来和 VM 争市场的.(所以Hyper-V中你随便安装什么系统都行,可是 Hyper-V必须 安装在WIN下) ...
- java:高速排序算法与冒泡排序算法
Java:高速排序算法与冒泡算法 首先看下,冒泡排序算法与高速排序算法的效率: 例如以下的是main方法: /** * * @Description: * @author:cuiyaon ...
- C#操作Excel初探
近期一段时间正好在做winform导出Excel报表的问题,学习了一下C#操作Excel的一些方法(如:向Excel中插入图片:删除Excel指定sheet中的某行或某列,在Excel指定的单 ...