web-dev-qa-db-fra.com

Comprendre les erreurs JDBC Oracle mystérieuses - ORA-00911: caractère non valide

Je fabrique du code Java 1.6-JDBC-Oracle 11. J'ai créé une table appelée employee avec identifiant, nom et âge. Je reçois le message d'erreur - ORA-00911: caractère non valide. Comment puis-je réparer cela ?

Voici mon code-

import Java.sql.*;
import Java.util.Properties;
import Java.io.IOException;
import Java.io.FileInputStream;

public class HelloOracle {

    static String query =
        "SELECT emp_id, emp_name, emp_age " +
        "FROM employee;";

    public static void main(String[] args) {
        String username = "";
        String password = "";
        Properties prop = new Properties();
        try {
            FileInputStream fis = new FileInputStream("Login.properties");
            prop.load(fis);
        } catch (IOException ex) {
            ex.printStackTrace();
        }

        username = prop.getProperty("username").trim();
        password = prop.getProperty("password").trim();

        try {
            Connection con = DriverManager.getConnection("jdbc:Oracle:thin:@//localhost:1521/xe", username, password);

            Statement stmt = con.createStatement();

            ResultSet rs = stmt.executeQuery(query);

            while (rs.next()) {
                System.out.print(rs.getString("emp_id"));
                System.out.print("  ,  ");
                System.out.print(rs.getString("emp_name"));
                System.out.print("  ,  ");
                System.out.print(rs.getString("emp_age"));
                System.out.println();
            }
        } catch (SQLException e) {
            System.out.println("Exception: " + e);
        }

    }

}

Malheureusement, les messages d'erreur Oracle ne sont pas aussi informatifs que mysql ou mssql et je ne parviens pas à les résoudre facilement. Je ne peux pas non plus voir quelle ligne de code a provoqué l'exception.

21
sweet dreams

Essayez de supprimer les points-virgules à la fin de votre instruction SQL.

c'est à dire 

static String query = "SELECT emp_id, emp_name, emp_age " +
    "FROM employee"; // no trailing ";" in the SQL
46
Bohemian

retirer le ; de l'intérieur de la requête

0
Mehdi

Bohemian est tout à fait juste. Je ne vois pas pourquoi c'était si difficile. Si vous ouvrez le message dans Google, vous obtiendrez ceci:

http://www.dba-Oracle.com/sf_ora_00911_invalid_character.htm

Le point-virgule est le premier problème noté.

Une autre recommandation: ne faites pas cela.

catch(SQLException e){System.out.println("Exception: " + e);}

Faites ceci à la place:

catch(SQLException e){
    e.printStackTrace(); // better yet, log it.
}

Cela vous donnera beaucoup plus d'informations.

0
duffymo