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))的更多相关文章

  1. JSP连接MySQL数据库问题

    之前写了一大段,还说了一下具体JDBC连接数据库API的具体包的基本知识,哪知道自己手残不小心按了删除按钮.结果去看自动保存记录时,就只剩下下面这段了.好吧,其实最主要最核心的也就是下面这点了.具体如 ...

  2. Jsp连接Mysql数据库取数方法

    我将Jsp连接Mysql数据库方法整理如下,供大家学习交流! 1.首先在myslq数据库中新建mldn数据库,并新建emp表.(方法不展开介绍) 插入数据如下: create table `emp` ...

  3. java web 程序---jsp连接mysql数据库的实例基础+表格显示

    <%@ page language="java" import="java.util.*,java.sql.*" pageEncoding="g ...

  4. tomcat之jsp连接mysql数据库

    一.下载并部署mysql连接类 首先下载mysql连接类,下载地址https://dev.mysql.com/downloads/connector/j 如图所示,选择第一个箭头所指的平台无关版本,然 ...

  5. 值得收藏的JSP连接mysql数据库的例子

    1:用mysql驱动把mysql与tomcat的连接起来.把mysql驱动包(不用解压)放到Tomcat安装目录中lib文件夹下即可. 2:然后在自己的新建的web应用程序上面就可以下下面的代码 3: ...

  6. JSP连接mysql数据库的重点

    1:用mysql驱动把mysql与tomcat的连接起来.把mysql驱动包(不用解压)放到Tomcat安装目录中lib文件夹下即可. 2:然后在自己的新建的web应用程序上面就可以下下面的代码 3: ...

  7. VS2017项目中使用代码连接MySQL数据库,以及进行数据添加

    //头文件 #include "mysql.h" //函数定义 // 执行sql语句, 包括增加.删除.更新数据 bool ExecuteSql(MYSQL m_mysql,con ...

  8. jsp连接mysql数据库

    1.新建一个Java web项目. 2.导入mysql驱动包.(这个跟上一篇写的Java连接mysql类似) 3.编写测试代码 <%@ page contentType="text/h ...

  9. mysql数据库优化方法大数据量查询轻松解决

    1.对查询进行优化,应尽量避免全表扫描,首先应考虑在 where 及 order by 涉及的列上建立索引. 2.应尽量避免在 where 子句中对字段进行 null 值判断,否则将导致引擎放弃使用索 ...

随机推荐

  1. CodeForces 398B 概率DP 记忆化搜索

    题目:http://codeforces.com/contest/398/problem/B 有点似曾相识的感觉,记忆中上次那个跟这个相似的 我是用了 暴力搜索过掉的,今天这个肯定不行了,dp方程想了 ...

  2. Forbidden You don't have permission to access / on this server.

    原文:Forbidden You don't have permission to access / on this server. Forbidden You don't have permissi ...

  3. matlab简单实现SVD的推荐

    %svd chengxu A = [5 5 0 5;5 0 3 4; 3 4 0 3; 0 0 5 3; 5 4 4 5; 5 4 5 5]; A = A'; [U S V] = svd(A); U ...

  4. IIS 7.0 Features and Vista Editions

    原文 IIS 7.0 Features and Vista Editions Overview of IIS 7.0 differences Across Windows Vista Editions ...

  5. 纯CSS3实现的图片滑块程序 效果非常酷

    原文:纯CSS3实现的图片滑块程序 效果非常酷 之前我们经常会看到很多利用jQuery实现的焦点图插件,种类太多了,今天我想给大家分享一款利用纯CSS3实现的图片滑块应用,完全是利用CSS3的相关特性 ...

  6. 军医王-moTestin云测试看好移动医疗行业

    看医生汪谟军:Testin云測在移动医疗产业大有可为 2014/10/21 · Testin · 开发人员訪谈 日常生活可能常常碰到这种情况:突然遇上头疼脑热.小病小痛,去医院又不方便:非常想了解家人 ...

  7. thinkphp学习笔记8—命名空间

    原文:thinkphp学习笔记8-命名空间 新版本(3.2)中采用命名空间的方式定义和加载类库文件,解决多个模块之间的冲突问题,并实现了更加高效的自动加载机制. 需要给类库定义所在的命名空间,命名空间 ...

  8. 1711 Number Sequence(kmp)

    Problem Description Given two sequences of numbers : a[1], a[2], ...... , a[N], and b[1], b[2], .... ...

  9. RegisterStartupScript和RegisterClientScriptBlock区别

    RegisterStartupScript(key, script) RegisterClientScriptBlock(key, script) 这两个方法的作用都是从前台向后台写脚本,且都接受两个 ...

  10. Hibernate_10_继承的例子_单表

     只是建一个表,所有属性都包括在此表.使用discriminator 到父和子类之间的区别. 1)父类(Article): public class Article { private Integer ...