Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/66.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java mysql介于和之间,通过JDBC preparedstatement使用-获取参数索引超出范围异常_Java_Mysql_Jdbc - Fatal编程技术网

Java mysql介于和之间,通过JDBC preparedstatement使用-获取参数索引超出范围异常

Java mysql介于和之间,通过JDBC preparedstatement使用-获取参数索引超出范围异常,java,mysql,jdbc,Java,Mysql,Jdbc,从select查询参数化值(日期值介于和之间) 我的问题 SELECT COUNT(*) AS assignedtotalcount FROM ticket, ticket_data WHERE ticket.`ticket_id` = ticket_data.`ticket_id` AND ticket.`created` BETWEEN '?' AND '?' 从上面的查询中,参数化了介于和之间的值 Java代码 static String dateFrom = "2018-01-01";

从select查询参数化值(日期值介于和之间)

我的问题

SELECT COUNT(*) AS assignedtotalcount FROM ticket, ticket_data
WHERE ticket.`ticket_id` = ticket_data.`ticket_id`
AND ticket.`created` BETWEEN '?' AND '?'
从上面的查询中,参数化了介于和之间的值

Java代码

static String dateFrom = "2018-01-01";
static String dateTo = "2018-01-31";
String query = reportQuery.toString();
statement = connection.createStatement();
preparedStatement = connection.prepareStatement(query);
preparedStatement.setString(1, dateFrom);
preparedStatement.setString(2, dateTo);
resultSet = preparedStatement.executeQuery(query);
执行时,我得到以下异常

java.sql.SQLException: Parameter index out of range (1 > number of parameters, which is 0).

请帮我解决

不要引用占位符。您需要将
“?”
更改为

所以查询变成这样

SELECT COUNT(*) AS assignedtotalcount FROM ticket, ticket_data
WHERE ticket.`ticket_id` = ticket_data.`ticket_id`
AND ticket.`created` BETWEEN ? AND ?

不要引用占位符。您需要将
“?”
更改为

所以查询变成这样

SELECT COUNT(*) AS assignedtotalcount FROM ticket, ticket_data
WHERE ticket.`ticket_id` = ticket_data.`ticket_id`
AND ticket.`created` BETWEEN ? AND ?

另一方面,我们更喜欢向查询传递对象而不是字符串<代码>LocalDate fromDate=LocalDate.of(2018年1月1日)preparedStatement.setObject(1,dateFrom),等等。另外,正如另一条评论所说,通过JDBC 4.2和更高版本传递智能对象而不是哑字符串:
myPreparedStatement.setObject(…,LocalDate.parse(“2018-01-31”)相关:可能重复的作为旁白,更喜欢向查询传递对象而不是字符串<代码>LocalDate fromDate=LocalDate.of(2018年1月1日)preparedStatement.setObject(1,dateFrom),等等。另外,正如另一条评论所说,通过JDBC 4.2和更高版本传递智能对象而不是哑字符串:
myPreparedStatement.setObject(…,LocalDate.parse(“2018-01-31”)相关:可能与您的问题重复。您是否可以将问题标记为已解决?您是否可以将问题标记为已解决