23

Java1.6-JDBC-Oracle11コードを作成しています。id、name、ageを持つemployeeというテーブルを作成しました。エラーが発生します-ORA-00911:無効な文字。どうすればこれを修正できますか?

これが私のコードです-

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);
        }

    }

}

残念ながら、オラクルのエラーメッセージはmysqlやmssqlほど有益ではなく、簡単にトラブルシューティングすることはできません。また、どのコード行が例外を引き起こしたのかもわかりません。

4

3 に答える 3

50

SQLステートメントの最後からセミコロンを削除してみてください。

すなわち

static String query = "SELECT emp_id, emp_name, emp_age " +
    "FROM employee"; // no trailing ";" in the SQL
于 2012-08-07T23:58:30.100 に答える
0

ボヘミアンは正確に正しいです。なぜこんなに大変だったのかわかりません。メッセージをGoogleにポップすると、次のようになります。

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

セミコロンが最初に指摘された問題です。

別の推奨事項:これを行わないでください。

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

代わりにこれを行ってください:

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

それはあなたにもっとたくさんの情報を与えるでしょう。

于 2012-08-08T00:00:00.090 に答える
0

;を削除します。クエリ内から

于 2016-09-10T23:32:38.420 に答える