Я пытаюсь вернуть даты заказов из определенного имени пользователя и имени продукта со следующим кодом:

#java #sql #jdbc #derby

Вопрос:

 PreparedStatement prep = null;  try {  prep = conn.prepareStatement("SET SCHEMA CECS323LAB");  prep.executeQuery();   String query = "select OrderDate"    "from ORDERS O inner join ORDERDETAILS OD on O.ORDERNUMBER = OD.ORDERNUMBER "    "inner join PRODUCTS P on P.PRODUCTCODE = OD.PRODUCTCODE "    "where PRODUCTNAME = ?"    "and "    "CUSTOMERNUMBER = ( select CUSTOMERNUMBER from CUSTOMERS where CUSTOMERNAME like '%Euro%' )";   assert conn != null;  prep = conn.prepareStatement(query);   prep.setString(1, "1957 Chevy Pickup"); // replace the first ? with the sanitized customer's name.  //prep.setString(2,customerName);     ResultSet data = prep.executeQuery();}  

но я получаю следующую ошибку:

Вызвано: java.sql.SQLException: Оператор.ExecuteQuery() не может быть вызван с помощью оператора, возвращающего количество строк.

Комментарии:

1. Я вижу две проблемы: а) между ними должно быть пространство OrderDate и from б) CUSTOMERNUMBER = ( select Если будет возвращено более одной строки, это приведет к сбою. Либо используйте IN , либо limit 1

2. Вы не должны выполнять инструкции, как SET SCHEMA в случае с JDBC. Используйте соответствующий метод Connection (обычно Connection.setSchema , иногда Connection.setCatalog ). Как описано в Connection : «Приложения не должны напрямую вызывать команды SQL для изменения конфигурации соединения, когда доступен метод JDBC».

3. В этом есть смысл. Спасибо

Ответ №1:

Проблема здесь заключалась в .executeQuery() следующем SET SCHEMA CECS323LAB утверждении. Я использовал эту .execute() функцию, чтобы устранить проблему.