java.sql.SQLSyntaxErrorException:ORA-00911:无效字符

时间:2016-08-15 12:28:35

标签: java oracle oracle11g

我有以下用于将值插入数据库的java代码

当我尝试下面的代码时,它可以正常工作

st.executeUpdate("INSERT INTO USERT " +  "VALUES ('1', 'Simpson', 'Mr', 'Springfield', '2001')");

但是,当我尝试下面的代码时,我得到一个错误

  

java.sql.SQLSyntaxErrorException:ORA-00911:无效字符

st.executeUpdate("INSERT INTO USERT (`USERID`, `FIRSTNAME`,`LASTNAME`,`EMAIL`,`PHONE`) VALUES ('2', 'james', 'john', 'myemail', 'myphone')");

此处在堆栈溢出处提供的大多数答案都是指分号;的字符错位。即link 1link 2link 3似乎没有帮助我

以下是我班级的完整代码

package dbproject;

import java.sql.*;

public class jdbcconnection {

    public static void main(String[] args) {
        try{

        Class.forName("oracle.jdbc.driver.OracleDriver");
        java.sql.Connection con=DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:xe","data1","mypass");
        Statement st=con.createStatement();

        st.executeUpdate("INSERT INTO USERT (`USERID`, `FIRSTNAME`,`LASTNAME`,`EMAIL`,`PHONE`) VALUES ('2', 'james', 'john', 'myemail', 'myphone')");

        //st.executeUpdate("INSERT INTO USERT " +  "VALUES ('1', 'Simpson', 'Mr', 'Springfield', '2001')");

        con.close();

        }
        catch(Exception e){

                System.out.println(e);

        }
    }
}

执行查询可能有什么问题,还有什么可能导致错误?

1 个答案:

答案 0 :(得分:1)

MySQL和Oracle在标识符定义方面存在一些细微差别。在MySQL中,不带引号的标识符可以以数字开头,并且在带引号的标识符中允许使用双引号;但是,这些都不允许在Oracle标识符中使用。在MySQL中,引号字符是backtick(`)。如果设置了SQL模式ANSI_QUOTES,则双引号也可用于引用标识符。在Oracle中,标识符使用双引号引用。

https://docs.oracle.com/cd/E12151_01/doc.150/e12155/oracle_mysql_compared.htm#i1026354

试;

   st.executeUpdate("INSERT INTO USERT (USERID, FIRSTNAME,LASTNAME,EMAIL,PHONE) VALUES ('2', 'james', 'john', 'myemail', 'myphone')");