Bonjour,
Je suis débutant en JDBC et j'ai un problème si vous pourriez m'aider (merci c'est très très gentil)
j'utilise:
- Oracle Database 11g Enterprise (Release 11.1.0.6.0)
- JDBC thin driver version: ( 11.1.0.7.0-Production)
- JDK 1.6
- Operating system: Linux (Ubuntu 8.10)
voici mon code
ça marche très bien, sans aucun problème. Par contre si j'utilise PreparedStatement au lieu de Statement, alors j'aurai le message d'erreur ORA-03115. C'est à dire quand je modifie le code de la façon suivante:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28 import java.sql.*; public class Main { public static void main(String[] args) { String dbURL = "jdbc:oracle:thin:@localhost:1521:mydatabase"; String username = "scott"; String user_password = "tiger"; try { Connection connection = DriverManager.getConnection(dbURL, username, user_password); String query_text = "SELECT * FROM mytable"; Statement statement = connection.createStatement(); ResultSet query_result = statement.executeQuery(query_text); connection.close(); } catch (SQLException e) { for (Throwable t: e) t.printStackTrace(); } } }
J'aurai le message suivant:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12 String query_text = "SELECT first_name, ?, id, ?, job_title, salary FROM mytable "+ "WHERE id IN ('id14', ?, 'id17', 'id18')"; PreparedStatement prepared_statement = connection.preparedStatement(query_text); prepared_statement.setString(1, "last_name"); prepared_statement.setString(2, "birthday"); prepared_statement.setString(3, "id02"); ResultSet query_result = prepared_statement.executeQuery(query_text);
c'est à dire, juste après
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 java.sql.SQLException: ORA-03115: unsupported network datatype or representation at oracle.jdbc.driver.SQLStateMapping.newSQLException(SQLStateMapping.java:70) at oracle.jdbc.driver.DatabaseError.newSQLException(DatabaseError.java:133) at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:206) at oracle.jdbc.driver.T4CTTIoer.processError(T4CTTIoer.java:455) at oracle.jdbc.driver.T4CTTIoer.processError(T4CTTIoer.java:413) at oracle.jdbc.driver.T4C8Oall.receive(T4C8Oall.java:1034) at oracle.jdbc.driver.T4CPreparedStatement.doOall8(T4CPreparedStatement.java:194) at oracle.jdbc.driver.T4CPreparedStatement.executeForDescribe(T4CPreparedStatement.java:791) at oracle.jdbc.driver.T4CPreparedStatement.executeMaybeDescribe(T4CPreparedStatement.java:866) at oracle.jdbc.driver.OracleStatement.doExecuteWithTimeout(OracleStatement.java:1186) at oracle.jdbc.driver.OracleStatement.executeQuery(OracleStatement.java:1377) at oracle.jdbc.driver.OracleStatementWrapper.executeQuery(OracleStatementWrapper.java:387) at mysqlpackage.Main.main(Main.java:33)
c'est l'exception qui est lancée,
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 ResultSet query_result = prepared_statement.executeQuery(query_text);
Ma question: Pourquoi ça marche avec Statement mais pas avec PreparedStatement? J'ai même fait d'autres tests avec d'autres requêtes, INSERT, DELETE etc. , à chaque fois le programme fonctionne bien, mais dès que je remplace Statement par PreparedStatement de la façon décrite au-dessus, j'ai le message ORA-03115.
Quelqu'un a une idée?
Merci d'avance,
Partager