WebGIS开发实习(一)——数据库连接

来源:互联网 发布:算法艺术与信息学竞赛 编辑:程序博客网 时间:2024/06/05 04:02

本文讲解基于java语言的后台数据库的基本操作方法,为前端网络开发部署打好基础。数据库操作主要分为有增改查删,操作方式主要是通过对应的SQL语句来实现,因此,在介绍时,笔者不按照具体的操作来介绍,而是按照数据库运作的基本流程来介绍。

1.数据库基本操作流程
数据库的基本操作流程为:数据库连接、SQL语句设置、数据结果处理、数据库连接断开。以下以一个简短的代码来介绍基本流程。

import java.sql.*;public class test{    public static void main(String args[]){        String  url = "jdbc:postgresql://localhost:5432/WebGIS"; //数据库资源信息        String user = "postage";         //用户名        String password = "WHU(2014)";   //密码        String sql = ""                  //sql语句        Connection con;        Statement st;        ResultSet rs;        try{            Class.forName("org.postgresql.Driver").newInstance();            con = DriverManager.getConnection(url, "postgres", "WHU(2014)");            st = con.createStatement();       //创建查询集            rs = st.executeQuery(sql);    //生成结果集            /* 以下为数据结果处理*/            /*以上为数据结果处理*/            st.close();            rs.close();            con.close();       //关闭数据集        }catch(Exception e){            System.out.print(e.getMessage());        }    }}

2.数据结果集的读取
在嵌入式的SQL语言中,宿主语言的读取的SQL的查询结果都是以游标的形式进行存储的,java语言也不例外。游标数据集的读取,需要通过不断的移动游标,将结果输出,或者存储到对应的变量中。以下是示例代码段:

try{    while(rs.next() != false){       //注意,这里返回的是布尔值        id = rs.getInt(indexID);        name = rs.getString(indexName);        data = rs.getDouble(indexData);        //rs可以返回多种数据类型的值,其参数可以是字段的序号,也可以使是字段的名称    }}catch(Exception e){    System.out.print(e.getMessage());}

3.数据集的元数据
通过以上介绍,读取简单的数据库并输出相信已经不成问题了。但是,在实际编程过程中,我们无法提前知道结果集中到底有什么字段,甚至,我们可能不知道这些字段的类型到底是什么,在这种情况下,上述方法便束手无策了。因此,我们需要让我们的程序更加灵活,在此,便介绍如何使用数据结果集的元数据来增强程序的灵活性的方法。
元数据是用来描述数据基本信息的数据。在java中,对数据结果集的元数据的获取十分简单,只用调用一下函数便可:
rs.getMetaData()
该函数返回的类型为ResultSetMetaData,简单介绍一下该类型的一些基本方法。

int getColumnCount() 获取字段个数,返回值为字段个数 int getColumnName(int column) 获取字段名称,参数为字段序号,从1开始 int getColumnType(int column) 获取字段类型,参数为字段序号,返回值为字段的类型号 String getTableName(int column) 获取表名,参数为字段序号,返回值为对应表名

以下为一段示例代码:

try{    int count = rs.getMetaData().getColumnCount();        for(int i=1; i<=count; i++){            rs.getMetaData().getColumnName(i)                  }             while(rs.next()!=false){            for(int i=1; i<=count; i++){                int type = rs.getMetaData().getColumnType(i);                    switch (type) {                    case Types.INTEGER:                        out.print(rs.getInt(i));                        break;                    case Types.VARCHAR:                        out.print(rs.getString(i));                        break;                    case Types.TIMESTAMP:                        out.print(rs.getDate(i));                        break;                    case Types.DOUBLE:                        out.print(rs.getDouble(i));                        break;                    default:                        break;                    }            }}catch(Exception ex){    System.out.print(ex.getMessage());}

4.SQL语句的一些注意事项
在编写数据库查询的SQL语句时,本人曾遇到过一些问题,在此向大家分享一下。
一是地理数据的读取。本人所使用的postgresql数据库支持地理数据的存储,但是其存储方式是使用二进制代码进行存储,在读取数据时需要将其转化为通用的geojson数据格式。转化方法是使用ST_AsGeoJson函数,示例如下:
select gid, name, ST_AsGeoJson(geom) as geojson from T1
二是对字符串数据的模糊查询,需要注意的是字符串数据在SQL语句中是需要使用单引号标注的,示例如下:
String sql = “select *, ST_AsGeoJson(geom) as geojson from ” + name + ” where ”
+ Field + ” like ” + “’%” + keyword + “%’”;

原创粉丝点击