1

Access データベース (.mdb) で「コメント」という名前の列の値を取得しようとすると、次のエラーが表示されます。

Offence: copying data
ERROR - Offence TABLE
java.sql.SQLSyntaxErrorException: ORA-00904: "Comment": invalid identifier

これは私のコードです:

public static void copyOffenceTable()
    {
        PreparedStatement updateOffenceTypeTable  = null;

        //Set up "insert" string
        String insertString = "INSERT INTO Offence "
                + "(id, OffenceName, status, OffenceSuburb, OffenceDate, FirstName, LastName, \"Comment\", OffenderAddress, OffenderSuburb, OffenderPostcode, OffenderState, OffenderEmail, LicenceNumber, DOB, StaffIssuerID, OffenderPhone) "                                          
                + "VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)";

        String MSAccessQuery = "SELECT * FROM Offence";

        try
        {
            //create a query object for MSAccess
            dbmsMSAccess.DBMSStatement = dbmsMSAccess.DBMSConnection.createStatement();
            //Query the MSAccess database for extraction
            dbmsMSAccess.DBMSResultSet = dbmsMSAccess.DBMSStatement.executeQuery(MSAccessQuery);
            //make query object for Oracle
            dbmsOracle.DBMSOracleStatement = dbmsOracle.DBMSOracleConnection.createStatement();

            dbmsOracle.DBMSOracleStatement.execute("TRUNCATE TABLE Offence");

            dbmsOracle.DBMSOracleConnection.setAutoCommit(false);

            updateOffenceTypeTable = dbmsOracle.DBMSOracleConnection.prepareStatement(insertString);

            System.out.println("Offence: copying data");

            while(dbmsMSAccess.DBMSResultSet.next())
            {
                updateOffenceTypeTable.setInt(1, dbmsMSAccess.DBMSResultSet.getInt("id") );
                updateOffenceTypeTable.setString(2, dbmsMSAccess.DBMSResultSet.getString("OffenceName") );
                updateOffenceTypeTable.setString(3, dbmsMSAccess.DBMSResultSet.getString("Status") );
                updateOffenceTypeTable.setString(4, dbmsMSAccess.DBMSResultSet.getString("OffenceSuburb") );
                updateOffenceTypeTable.setDate(5, dbmsMSAccess.DBMSResultSet.getDate("OffenceDate") );
                updateOffenceTypeTable.setString(6, dbmsMSAccess.DBMSResultSet.getString("FirstName") );
                updateOffenceTypeTable.setString(7, dbmsMSAccess.DBMSResultSet.getString("LastName") );
                updateOffenceTypeTable.setString(8, dbmsMSAccess.DBMSResultSet.getString("COMMENT") );
                updateOffenceTypeTable.setString(9, dbmsMSAccess.DBMSResultSet.getString("OffenderAddress") );
                updateOffenceTypeTable.setString(10, dbmsMSAccess.DBMSResultSet.getString("OffenderSuburb") );
                updateOffenceTypeTable.setInt(11, dbmsMSAccess.DBMSResultSet.getInt("OffenderPostcode") );
                updateOffenceTypeTable.setString(12, dbmsMSAccess.DBMSResultSet.getString("OffenderState") );
                updateOffenceTypeTable.setString(13, dbmsMSAccess.DBMSResultSet.getString("OffenderEmail") );
                updateOffenceTypeTable.setInt(14, dbmsMSAccess.DBMSResultSet.getInt("LicenceNumber") );
                updateOffenceTypeTable.setDate(15, dbmsMSAccess.DBMSResultSet.getDate("DOB") );
                updateOffenceTypeTable.setInt(16, dbmsMSAccess.DBMSResultSet.getInt("StaffIssuerID") );
                updateOffenceTypeTable.setInt(17, dbmsMSAccess.DBMSResultSet.getInt("OffenderPhone") );

                updateOffenceTypeTable.executeUpdate();
            }

            System.out.println("Offence: ACCESS DATA COPIED TO ORACLE\n");
        }
        catch(Exception X)
        {
            System.out.println("ERROR - Offence TABLE");
            X.printStackTrace();
        } 
    }

jdbcを介してキーワードでもある列を参照する方法はありますか?

アポストロフィと引用符の間に「コメント」を入れてみました。

助言がありますか?

EDIT:値は、おそらく同一のテーブルを持つOracleデータベースに配置されています。

4

5 に答える 5

0

いくつかの括弧で試してください:

 String insertString = "INSERT INTO Offence "
                + "(id, OffenceName, status, OffenceSuburb, OffenceDate, FirstName, LastName, [Comment], OffenderAddress, OffenderSuburb, OffenderPostcode, OffenderState, OffenderEmail, LicenceNumber, DOB, StaffIssuerID, OffenderPhone) "                                          
                + "VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)";

編集: オラクルの場合、このトピックを信頼する場合: https://stackoverflow.com/a/1162391/291541

解決策は二重引用符ですが、大文字と小文字に注意する必要があります。列が例によるコメントではなくコメントであるかどうかを確認してください。

于 2013-05-20T12:01:21.747 に答える
0

クエリ内の二重引用符を削除してください

   String insertString = "INSERT INTO Offence "
                + "(id, OffenceName, status, OffenceSuburb, OffenceDate, FirstName, LastName, Comment, OffenderAddress, OffenderSuburb, OffenderPostcode, OffenderState, OffenderEmail, LicenceNumber, DOB, StaffIssuerID, OffenderPhone) "                                          
                + "VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)";
于 2013-05-20T12:02:01.467 に答える
0

クエリ レベルで列の名前を変更することはできませんか? 何かのようなもの select comment as my_comment from blabla

インデックスを使用してそのフィールドに到達することもできます

于 2013-05-20T12:03:46.967 に答える
0

結局、提案されたこれらの方法はどれもうまくいきませんでしたが、試してみる価値はありました!

結局、データベースにアクセスして、フィールドをコメントからコメントに変更する許可を得る必要がありました。

投稿してくれたみんな、本当にありがとう!

于 2013-05-20T13:20:50.557 に答える