#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()
функцию, чтобы устранить проблему.