【问题标题】:My prepared statement not specified未指定我的准备好的语句
【发布时间】:2017-01-20 01:42:09
【问题描述】:

我正在对数据库准备好的语句进行查询,但它只是不正确。

我在打印我的声明时收到此错误。

com.mysql.jdbc.JDBC42PreparedStatement@157b62f9: SELECT * FROM 2015-wind WHERE TimeStamp BETWEEN '2015-01-01' AND '2015-01-25' AND ConnectingArea IN (** 未指定 * *)

10YAT-APG--L(我打印我的字符串,它给了我一个输出)。

有人知道这里发生了什么吗?

public List<Wind2015> getResultsWind(String beginDate1, String endDate1, String[] connectingAreas1) throws Exception{
    int count = 0;
    List<Wind2015> myWind2015s = new ArrayList<>();

    SimpleDateFormat readFormat = new SimpleDateFormat("EE MMM dd HH:mm:ss z yyyy",
            Locale.ENGLISH);
    Date date2 = readFormat.parse(beginDate1);
    Date date3 = readFormat.parse(endDate1);


    String beginDate = new SimpleDateFormat("yyyy-MM-dd").format(date2);
    String endDate = new SimpleDateFormat("yyyy-MM-dd").format(date3);

    ArrayList<String> connectingArea = new ArrayList<>(Arrays.asList(connectingAreas1));

    StringBuilder inputs = new StringBuilder();

    for (int i = 0; i < connectingArea.size(); i++) {
        if (i < connectingArea.size()-1) {
            inputs.append("?,");
        } else {
            inputs.append("?");
        }   
    }


    String connectingAreaInputs = inputs.toString();

    Connection connection = null;
    PreparedStatement prepareStatement = null;
    ResultSet myRs = null;

    System.out.println(connectingAreaInputs);

    try {
        connection = getConnection();

        String sql = "SELECT * FROM `2015-wind` WHERE `TimeStamp` BETWEEN ? AND ? AND `ConnectingArea` IN ("+ connectingAreaInputs +")";

        prepareStatement = connection.prepareStatement(sql);


        prepareStatement.setString(count+=1,beginDate);
        prepareStatement.setString(count+=1, endDate);

        System.out.println(prepareStatement);
        for (String string : connectingArea) {
             System.out.println(string);
            count+=1;
            prepareStatement.setString(count, string);
        }



        myRs = prepareStatement.executeQuery();

        Wind2015 wind2015 = null;

        while (myRs.next()) {

            String timeStamp = myRs.getString("Timestamp");
            String connectingArea1 = myRs.getString("ConnectingArea");
            String value = myRs.getString("ActualWindEnergy");

            wind2015 = new Wind2015(timeStamp, value, connectingArea1);

            myWind2015s.add(wind2015);
        }

        return myWind2015s;

    } finally {
        close(connection, prepareStatement, myRs);
    }

}

【问题讨论】:

    标签: mysql jdbc prepared-statement


    【解决方案1】:

    您正在使用这一行打印准备好的语句:

    System.out.println(prepareStatement);
    

    之前您将值分配给IN (...) 表达式中的动态占位符,因此它们(正确地)显示为“未[尚未]指定”。

    将 print 语句移动到 after 它当前所在的 for 循环 before

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多