【问题标题】:Java sqlite row disappear after Select query选择查询后Java sqlite行消失
【发布时间】:2017-09-09 00:26:25
【问题描述】:

我有一个由其他程序创建的 sqlite db 文件,检查一切正常。

然后在进行选择查询以获取一些数据后,一些行在此过程后消失了。我尝试使用 prepareStatement,虽然它有效,但仍然存在。

我的代码

private ForecastTableItem selectItemPrepareStatement(String tableName, String columnName, String name) {
    ForecastTableItem item = null;
    Connection conn = null;
    PreparedStatement pstmt = null;
    ResultSet rs = null;

    try {
        Class.forName("org.sqlite.JDBC");
        conn = DriverManager.getConnection("jdbc:sqlite:" + dbLocation);
        System.out.println("Selecting item from tableName: "+tableName + " of col: "+columnName + " : "+name);

        String query = "SELECT * FROM " + tableName + " WHERE " + columnName + "=? COLLATE NOCASE";
        pstmt = conn.prepareStatement(query);

        pstmt.setString(1, name);
        rs = pstmt.executeQuery();

        if (rs.next()) {
            if (tableName.equalsIgnoreCase("mainTable")) {
                item = new ForecastTableItem();
                item.setId(rs.getInt("Id"));
                item.setTitle(rs.getString("title"));
                item.setLink(rs.getString("link").toLowerCase());
                item.setPositionType(rs.getString("positionType"));
                item.setPackageName(rs.getString("packageName"));
                item.setCsvFilePath(rs.getString("csvFilePath"));
                item.setSubpackageName(rs.getString("subpackageName"));
                item.setTimeFrame(rs.getString("timeFrame"));
                item.setForecastDate(rs.getString("forecastDate"));
                item.setTargetDate(rs.getString("targetDate"));
            }

        }


    } catch (ClassNotFoundException e) {
        e.printStackTrace();
    } catch (SQLException e) {
        e.printStackTrace();
    } finally{
        if(pstmt != null) try{ pstmt.close();} catch(SQLException e){};                   
        if(rs != null) try{ rs.close();} catch(SQLException e){};
        if(conn != null) try{ conn.close();} catch(SQLException e){};
    }


    return item;
}

【问题讨论】:

  • 我可以看到问题,但在选择查询的情况下,它应该是 executeNonQuery 而不是 executeQuery
  • 您没有 100% 正确使用准备好的语句。

标签: java sql sqlite select


【解决方案1】:

在 COLLATE NOCASE 之后使用半列 "SELECT * FROM " + tableName + " WHERE " + columnName + "= ? COLLATE NOCASE;";

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-04-29
    • 1970-01-01
    • 2016-03-30
    • 1970-01-01
    • 1970-01-01
    • 2013-03-24
    • 1970-01-01
    相关资源
    最近更新 更多