2015-12-01 2 views
2

Я пытаюсь использовать ActiveJDBC с БД, чей драйвер не поддерживает метод Connection.prepareStatement(String, String[]). При попытке ввода я получаю следующее исключение:Вставка ActiveJDBC без подготовленного оператора

org.javalite.activejdbc.DBException: java.sql.SQLFeatureNotSupportedException: [DataDirect][OpenEdge JDBC Driver]Unsupported method: Connection.prepareStatement(String, String[]), query: INSERT INTO ... 
    at com.ddtek.jdbc.openedgebase.ddb9.b(Unknown Source) 
    at com.ddtek.jdbc.openedgebase.ddb9.a(Unknown Source) 
    at com.ddtek.jdbc.openedgebase.ddb8.b(Unknown Source) 
    at com.ddtek.jdbc.openedgebase.ddb8.a(Unknown Source) 
    at com.ddtek.jdbc.openedgebase.BaseConnection.prepareStatement(Unknown Source) 
    at org.javalite.activejdbc.DB.execInsert(DB.java:597) 
    at org.javalite.activejdbc.Model.insert(Model.java:2618) 
    at org.javalite.activejdbc.Model.save(Model.java:2552) 
    at org.javalite.activejdbc.Model.saveIt(Model.java:2477) 
    ... 

Поддерживаются некоторые другие формы prepareStatement, например. prepareStatement (String), prepareStatement (String, int) и т. Д.

Есть ли что-нибудь, что я могу сделать, чтобы убедить ActiveJDBC не использовать неподдерживаемый оператор?

+0

'String []' предназначен для автоматически сгенерированных ключей. Вам нужны автоматически сгенерированные значения ключей? –

+0

Нет, не знаю. Все, что я делаю в коде, это 'm = new Model();', заполнить его, затем 'm.saveIt();', в модели нет автогенерированных столбцов. ActiveJDBC вызывает метод 'prepareStatement' внутри [здесь] (https://github.com/javalite/activejdbc/blob/master/activejdbc/src/main/java/org/javalite/activejdbc/DB.java#L625) – gimoh

+0

что базу данных/драйвера вы используете? – ipolevoy

ответ

0

Как вы можете видеть в source, это довольно жестко закодировано. Таким образом, с верхней частью моей памяти вы можете либо запросить изменение в ActiveJDBC или идти вперед оборачивать ваше «недостатки» Подключение в пользовательской реализацию и переопределение этого prepareStatement(String, String[])

public PreparedStatement prepareStatement(String qry, String[] autoIdColumns) { 
    return delegate.prepareStatement(qry); 
} 

Google вернулись некоторые идеи для ConnectionWrapper реализаций там.

+0

Как я могу связать это завернутое соединение в AJ? Это будет связано с использованием 'Base.open (DataSource dataSource)'? – gimoh

+0

Я не настолько глубоко в AJ. Но это кажется правильным: если вы передадите DataSource, то DataSource, в свою очередь, создаст соединения. откуда вы получаете DataSource? – Jan

+0

На самом деле, я не использовал DataSoruces, это было единственное, что я мог видеть в AJ API, который, казалось бы, позволил бы переопределить Connection. Я буду копаться в этом, спасибо @Jan – gimoh

 Смежные вопросы

  • Нет связанных вопросов^_^