Java 中的 SQLite3 查询错误

erroneous with SQLite3 query in Java

我正在从 Metrolink 数据库中解析数据。当我从命令行查询数据库时,我得到以下输出:

Stop Name                                 Latitude        Longitude      
----------------------------------------  ---------------      
CLAYTON METROLINK STATION                 38.645657        -90.339223     
SUNNEN METROLINK STATION                  38.607509        -90.330296     
MAPLEWOOD METROLINK STATION               38.614023        -90.331314     
BRENTWOOD METROLINK STATION               38.627851        -90.33815      
RICHMOND HEIGHTS METROLINK STATION        38.635401        -90.342582     
SHREWSBURY METROLINK STATION              38.592735        -90.31932      
EMERSON PARK METROLINK STATION            38.629462        -90.137638     
FAIRVIEW HEIGHTS METROLINK STATION        38.594049        -90.048103     
WASHINGTON PARK METROLINK STATION         38.613762        -90.09531      
GRAND METROLINK STATION                   38.629525        -90.235254     
CENTRAL WEST END METROLINK STATION        38.635838        -90.261928     
FOREST PARK METROLINK STATION             38.647787        -90.284648     
DELMAR METROLINK STATION                  38.655513        -90.294481     
COLLEGE METROLINK STATION                 38.515994        -89.919669     
MEMORIAL HOSPITAL METROLINK STATION       38.557573        -90.015361     
JJK CENTER METROLINK STATION              38.623244        -90.124409     
SWANSEA METROLINK STATION                 38.536253        -89.987516     
BELLEVILLE METROLINK STATION              38.521823        -89.974368     
ROCK ROAD METROLINK STATION               38.685447        -90.301332     
CIVIC CENTER METROLINK STATION            38.624676        -90.203101     
FORSYTH METROLINK STATION                 38.648731        -90.328488     
STADIUM METROLINK STATION                 38.623416        -90.194531     
SKINKER METROLINK STATION                 38.649364        -90.300813     
WELLSTON METROLINK STATION                38.668902        -90.298356     
8TH AND PINE METROLINK STATION            38.627979        -90.192665     
UNION STA METROLINK STATION               38.626602        -90.206596     
EAST RIVERFRONT METROLINK STATION         38.628517        -90.17473      
5TH & MISSOURI METROLINK STATION          38.625088        -90.159346     
CONVENTION CENTER METROLINK STATION       38.630193        -90.189374     
LACLEDES LANDING METROLINK STATION        38.629484        -90.18355      
LAMBERT MAIN TRML METROLINK STATION       38.74092         -90.364451     
LAMBERT EAST TRML METROLINK STATION       38.736397        -90.356341     
NORTH HANLEY METROLINK STATION            38.719915        -90.315712     
UMSL NORTH METROLINK STATION              38.712889        -90.306081     
SHILOH-SCOTT METROLINK STATION            38.539125        -89.879143     
UMSL SOUTH METROLINK STATION              38.705072        -90.304974     

你明白了。当我 运行 这部分 java 代码时:

package com.bkane56.metrolink.sqlitedao;

import com.bkane56.metrolink.MetroData;
import com.bkane56.metrolink.MetroLinkDao;
import com.bkane56.metrolink.OutputInterface;

import java.sql.*;
import java.util.ArrayList;
import java.util.List;

public class SQLiteMetroDAO implements MetroLinkDao {

    public static final String METROLINK_DB = "jdbc:sqlite:metrolink.db";
    public static final String ORG_SQLITE_JDBC = "org.sqlite.JDBC";
    public static final String ALL_METROLINK_STOPS =
            "SELECT stop_name " +
            "FROM stops " +
            "WHERE stop_name " +
            "LIKE \"%metrolink Station\" " +
            "ORDER BY stop_lon;";
    public static final String METRO_LINK_STOPS_WITH_LAT_AND_LONG =
            "SELECT stop_name, stop_lat, stop_lon " +
            "FROM stops " +
            "WHERE stop_name " +
            "LIKE \"%metrolink Station\" " +
            "ORDER BY stop_lon;";

    public List<MetroData> metroDataOutput() {

        outputInterface.output("\n\nLooking up all MetroLink Stations\n\n");
        try (Connection connection = getConnection();) {
//            PreparedStatement preparedStatement = connection.prepareStatement(ALL_METROLINK_STOPS);
            PreparedStatement preparedStatement = connection.prepareStatement(METRO_LINK_STOPS_WITH_LAT_AND_LONG);
            ResultSet resultSet = preparedStatement.executeQuery();
            List<MetroData> metroDataList = new ArrayList<>();
            while (resultSet.next()) {
                MetroData metroData = new MetroData();
                metroData.setStopName(resultSet.getString("stop_name"));
                metroData.setStopDesc(resultSet.getString("stop_lat"));
                metroData.setStopLong(resultSet.getString("stop_lon"));
                metroDataList.add(metroData);
            }
            return metroDataList;
        } catch (SQLException e) {
            throw new RuntimeException("Error retrieving MetroLink data " + e);
        }
    }

    private static Connection getConnection() throws SQLException {
        try {
            Class.forName(ORG_SQLITE_JDBC);
        } catch (ClassNotFoundException e) {
            throw new RuntimeException("Unable to find class for loading the database", e);
        }
        return DriverManager.getConnection(METROLINK_DB);
    }

    private OutputInterface outputInterface;

    public void setOutputInterface(OutputInterface outputInterface) {
        this.outputInterface = outputInterface;
    }
}

我得到以下输出。

2015-06-12 14:17:40 INFO  ClassPathXmlApplicationContext:513 - Refreshing org.springframework.context.support.ClassPathXmlApplicationContext@8102c8: startup date [Fri Jun 12 14:17:40 CDT 2015]; root of context hierarchy
2015-06-12 14:17:41 INFO  XmlBeanDefinitionReader:316 - Loading XML bean definitions from class path resource [App_Context.xml]


Looking up all MetroLink Stations


--1 -. LAMBERT MAIN TRML METROLINK STATION      null            -90.364451     
--2 -. LAMBERT EAST TRML METROLINK STATION      null            -90.356341     
--3 -. RICHMOND HEIGHTS METROLINK STATION       null            -90.342582     
--4 -. CLAYTON METROLINK STATION                null            -90.339223     
--5 -. BRENTWOOD METROLINK STATION              null            -90.33815      
--6 -. MAPLEWOOD METROLINK STATION              null            -90.331314     
--7 -. SUNNEN METROLINK STATION                 null            -90.330296     
--8 -. FORSYTH METROLINK STATION                null            -90.328488     
--9 -. SHREWSBURY METROLINK STATION             null            -90.31932      
--10-. NORTH HANLEY METROLINK STATION           null            -90.315712     
--11-. UMSL NORTH METROLINK STATION             null            -90.306081     
--12-. UMSL SOUTH METROLINK STATION             null            -90.304974     
--13-. ROCK ROAD METROLINK STATION              null            -90.301332     
--14-. SKINKER METROLINK STATION                null            -90.300813     
--15-. WELLSTON METROLINK STATION               null            -90.298356     
--16-. DELMAR METROLINK STATION                 null            -90.294481     
--17-. FOREST PARK METROLINK STATION            null            -90.284648     
--18-. CENTRAL WEST END METROLINK STATION       null            -90.261928     
--19-. GRAND METROLINK STATION                  null            -90.235254     
--20-. UNION STA METROLINK STATION              null            -90.206596     
--21-. CIVIC CENTER METROLINK STATION           null            -90.203101     
--22-. STADIUM METROLINK STATION                null            -90.194531     
--23-. 8TH AND PINE METROLINK STATION           null            -90.192665     
--24-. CONVENTION CENTER METROLINK STATION      null            -90.189374     
--25-. LACLEDES LANDING METROLINK STATION       null            -90.18355      
--26-. EAST RIVERFRONT METROLINK STATION        null            -90.17473      
--27-. 5TH & MISSOURI METROLINK STATION         null            -90.159346     
--28-. EMERSON PARK METROLINK STATION           null            -90.137638     
--29-. JJK CENTER METROLINK STATION             null            -90.124409     
--30-. WASHINGTON PARK METROLINK STATION        null            -90.09531      
--31-. FAIRVIEW HEIGHTS METROLINK STATION       null            -90.048103     
--32-. MEMORIAL HOSPITAL METROLINK STATION      null            -90.015361     
--33-. SWANSEA METROLINK STATION                null            -89.987516     
--34-. BELLEVILLE METROLINK STATION             null            -89.974368     
--35-. COLLEGE METROLINK STATION                null            -89.919669     
--36-. SHILOH-SCOTT METROLINK STATION           null            -89.879143     

Process finished with exit code 0

这是 table 的架构:

create table stops (
    stop_lat Decimal(9,6),
    zone_id char(30),
    stop_lon Decimal(9,6),
    stop_id char(30) PRIMARY KEY,
    stop_desc char(30),
    stop_name char(30),
    location_type char(30),
    stop_code char(30)
);

我没有得到空值。

是的,我会将它迁移到 Hibernate 以使编码更简洁,但我被要求最初使用 JDBC 编写它并且不使用注释本身。

如有任何帮助,我们将不胜感激。如果您需要任何其他代码,请询问。

谢谢

您正在使用 metroData.setStopDesc() 来存储纬度,而不是 setter 来存储纬度。