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
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();
        }
    }
}
ç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
 
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 : 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 à dire, juste après
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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?


Merci d'avance,