0

我的任务是从我的数据库中选择地址并向地理编码 api 发出请求以获取地址的纬度、经度坐标。一旦我得到它,我应该将它们填充到 dsatabase

包 com.gismo;

import java.net.*;
import org.xml.sax.InputSource;
import org.w3c.dom.*;
import javax.xml.xpath.*;
import javax.xml.parsers.DocumentBuilderFactory;
import java.io.*;
import java.nio.*;

import java.io.IOException;
import java.net.URISyntaxException;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.sql.SQLException;
import java.sql.Statement;

import javax.xml.parsers.ParserConfigurationException;
import javax.xml.xpath.XPathExpressionException;
import org.xml.sax.SAXException;

public class TestCon {
    static String nodeString="";
    static String nody="";
    //static String[] nodeString={};
    static String elementValue = "";
    static Connection conn2 = null;

    private static final String GEOCODE_REQUEST_PREFIX = "http://maps.google.com/maps/api/geocode/xml";



    public String _xpath = null;
    public Document _xml = null;

    public static void main(String[] args) throws IOException,  URISyntaxException, ParserConfigurationException, SAXException, ClassNotFoundException 
    {
       for (int j=200;j<3000;j++)

        {
           Class.forName("org.postgresql.Driver");

        try 
        {
            conn2 = DriverManager.getConnection(
                    "jdbc:postgresql://localhost:5432/plovdivbizloca",
                    "postgres", "tan");
        }

        catch (SQLException ex) 
        {

            ex.printStackTrace();
        }

        Statement mystmt = null;

        String selectQuery = "SELECT main_office_town, address FROM pl_biz where id="+j;

        try
        {
            mystmt = conn2.createStatement();
            ResultSet mysr = mystmt.executeQuery(selectQuery);

            ResultSetMetaData rsmd = mysr.getMetaData();
            int colCount = rsmd.getColumnCount();
            int numberrow = 0;
             elementValue="";
            while (mysr.next()) 
            {

                for (int i = 1; i <= colCount; i++) 
                {

                     elementValue += mysr.getString(i);
                    if (i < colCount)
                        elementValue += ",";
                }
                System.out.println(elementValue);


            }

         }
        catch (Exception ex) 
        {
        }
        // NEW GEOCODING;

        String inputQuery, resultXml, urlString, xPathString,xi = null;
        inputQuery = elementValue;

        urlString = GEOCODE_REQUEST_PREFIX + "?address=" + URLEncoder.encode(inputQuery, "UTF-8") + "&sensor=false";
        System.out.println(urlString);

        // Convert the string to a URL so we can parse it
        URL url = new URL(urlString);


        HttpURLConnection conn = (HttpURLConnection) url.openConnection();
        Document geocoderResultDocument = null;
        try 
        {
            // open the connection and get results as InputSource.
            conn.connect();
            InputSource geocoderResultInputSource = new InputSource(conn.getInputStream());

            // read result and parse into XML Document
            geocoderResultDocument = DocumentBuilderFactory.newInstance().newDocumentBuilder().parse(geocoderResultInputSource);
        } 
        finally 
        {
            conn.disconnect();
        }

        // Process the results
        xPathString = "//GeocodeResponse//location/lat";
        NodeList nodes = process(geocoderResultDocument, xPathString);
        System.out.println ("nodes" +nodes.getLength());

        // Print results
        for (int i = 0; i < nodes.getLength(); i++) 
        { 
           nodeString = nodes.item(i).getTextContent();
          // nodeString = nodes(i).getTextContent();
            System.out.print("cordinate:"  + nodeString);


        }
        xi = "//GeocodeResponse//location/lng";
        NodeList nodes2 = process(geocoderResultDocument, xi);
        System.out.println ("nodes length" + nodes2.getLength());
        for (int i = 0; i < nodes2.getLength(); i++) 
        { 
           nody = nodes2.item(i).getTextContent();
          // nodeString = nodes(i).getTextContent();
            System.out.println("cl:" + nody);


        }

        PreparedStatement pstmt = null;
        //console.writeln(nodeString);
        String insertQuery = "UPDATE pl_biz set long= '" + nody+ "' ,  lat= '"+nodeString+ "' where id="+j;

        try 
        {
            pstmt = conn2.prepareStatement(insertQuery);

            int rowss = pstmt.executeUpdate();
            System.out.println("rowss successfull:" +rowss);

        }

        catch (Exception ex) {

        }
        System.out.println("j:"+j);
        }


    }

    private void TestCon() {
    }

    public static NodeList process(Document xml, String xPathStrings)
            throws IOException {

        NodeList result = null;
        System.out.println(result);
        System.out.print("Geocode Processor 1.0\n");

        XPathFactory factory = XPathFactory.newInstance();

        XPath xpath = factory.newXPath();

        try {
            result = (NodeList) xpath.evaluate(xPathStrings, xml,
                    XPathConstants.NODESET);
        }
        catch (XPathExpressionException ex) {
            ex.printStackTrace();
        }
        System.out.println(result);
        return result;
    }



}
4

1 回答 1

1

您是否尝试过conn2.close()在完成后显式调用conn2

于 2013-02-17T16:29:15.243 回答