每当我尝试在Access数据库(.mdb)中检索名为“Comment”的列的值时,它会给我以下错误。
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引用也是关键字的列?
我尝试在撇号和引号之间加上'注释'。
有什么建议吗?
编辑:这些值被放入一个具有相同表格的oracle数据库中。
答案 0 :(得分:0)
尝试使用一些括号:
String insertString = "INSERT INTO Offence "
+ "(id, OffenceName, status, OffenceSuburb, OffenceDate, FirstName, LastName, [Comment], OffenderAddress, OffenderSuburb, OffenderPostcode, OffenderState, OffenderEmail, LicenceNumber, DOB, StaffIssuerID, OffenderPhone) "
+ "VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)";
编辑: 对于oracle,如果我们相信这个主题:https://stackoverflow.com/a/1162391/291541
解决方案是双引号,但你必须注意这个案例。请检查您的专栏是否是评论,而不是示例评论。
答案 1 :(得分:0)
请删除查询中的双引号
String insertString = "INSERT INTO Offence "
+ "(id, OffenceName, status, OffenceSuburb, OffenceDate, FirstName, LastName, Comment, OffenderAddress, OffenderSuburb, OffenderPostcode, OffenderState, OffenderEmail, LicenceNumber, DOB, StaffIssuerID, OffenderPhone) "
+ "VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)";
答案 2 :(得分:0)
无法在查询级别重命名您的列?就像是
select comment as my_comment from blabla
您也可以使用其索引
到达该字段答案 3 :(得分:0)
使用反向引号(或反向标记)来转义违规列的名称,例如`\"Comment\"`
String insertString = "INSERT INTO Offence "
+ "(id, OffenceName, status, OffenceSuburb, OffenceDate, FirstName, LastName, `\"Comment\"`, OffenderAddress, OffenderSuburb, OffenderPostcode, OffenderState, OffenderEmail, LicenceNumber, DOB, StaffIssuerID, OffenderPhone) "
+ "VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)";
答案 4 :(得分:0)
最后,这些方法都没有对我有用,但是值得一试!
我最终不得不进入数据库并获得将注释中的字段更改为注释的权限。
感谢所有发帖的人我真的很感激!