Une question concernant l'utilisation de PreparedStatement et le message d'erreur ORA
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 :mrgreen:)
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
Code:
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();
}
}
} |
ç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:
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); |
J'aurai le message suivant:
Code:
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 à dire, juste après
Code:
1 2
|
ResultSet query_result = prepared_statement.executeQuery(query_text); |
c'est l'exception qui est lancée,
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?:help:
Merci d'avance,