java中无效字符串_java – SQLSyntaxErrorException:ORA-00911:无效字符

我正在尝试使用PreparedStatement将记录插入Oracle数据库,但我只收到此错误.在这一点上,我克服它的努力远远超过了我的进步,所以另一组眼睛可能有所帮助.无效字符在哪里?

我发现的很多东西都暗示了一个尾随的“;”在你的sql内部字符串可能是罪魁祸首,但我从一开始就没有在我的声明中有一个.

我的连接本身,在程序的其他几个地方完美运行:

Properties props = new Properties();

props.setProperty( "user", username );

props.setProperty( "password", password );

props.setProperty( "defaultRowPrefetch", "10" );

props.setProperty( "defaultBatchValue", "10" );

props.setProperty( "processEscapes", "false" );

DriverManager.registerDriver(new oracle.jdbc.OracleDriver());

Connection conn = DriverManager.getConnection(DB_URL_SVC, props);

我希望它完成它的方式(除了我将它包装在一个接受三个字符串的方法中)但它抛出一个SQLSyntaxErrorException

String INSERT_BIKE = "INSERT INTO RACEBIKES ( BIKENAME , COUNTRY_OF_ORIGIN , COST ) VALUES ( ? , ? , ? )";

PreparedStatement preStatement = conn.prepareStatement( INSERT_BIKE );

preStatement.setString(1, "JHT");

preStatement.setString(2, "USA");

preStatement.setInt(3, 2500);

preStatement.executeUpdate(); // ORA-00911: invalid character error

这有效,但由于参数是硬编码的,因此无法使用PreparedStatement:

String INSERT_BIKE = "INSERT INTO RACEBIKES ( BIKENAME , COUNTRY_OF_ORIGIN , COST ) VALUES ( 'JHT' , 'USA' , '2500' )";

PreparedStatement preStatement = conn.prepareStatement( INSERT_BIKE );

preStatement.executeUpdate();

作品.但是,我理解用单引号和双引号连接变量也不是最好的方法因为PreparedStatement应该减轻我们不得不处理语法的那部分:

String value1 = "JHT";

String value2 = "USA";

int value3 = 2500;

String INSERT_BIKE = "INSERT INTO RACEBIKES ( BIKENAME , COUNTRY_OF_ORIGIN , COST ) VALUES ( '" + value1 + "', '" + value2 + "', '" + value3 + "' )";

PreparedStatement preStatement = conn.prepareStatement( INSERT_BIKE );

preStatement.executeUpdate();

失败,出现SQLSyntaxErrorException.所以即使我自己使用代码引用语法,我仍然无法将这些变量放在preStatement.setString()中,这至少可以提供一点灵活性.

String INSERT_BIKE = "INSERT INTO RACEBIKES ( BIKENAME , COUNTRY_OF_ORIGIN , COST ) VALUES ( ? , ? , ? )";

PreparedStatement preStatement = conn.prepareStatement( INSERT_BIKE );

preStatement.setString(1, "' + value1 + '");

preStatement.setString(2, "' + value2 + '");

preStatement.setInt(3, "' + value3 + '");

preStatement.executeUpdate(); // ORA-00911: invalid character error

失败.用单引号括住我的String中的占位符会导致SQLException.

String INSERT_BIKE = "INSERT INTO RACEBIKES ( BIKENAME , COUNTRY_OF_ORIGIN , COST ) VALUES ( '?' , '?' , '?' )";

PreparedStatement preStatement = conn.prepareStatement( INSERT_BIKE );

preStatement.setString(1, "JHT");

preStatement.setString(2, "USA");

preStatement.setInt(3, 2500);

preStatement.executeUpdate(); // invalid column index

失败.用单引号括住我的String中的两个String(但不是int)占位符会导致SQLException.

String INSERT_BIKE = "INSERT INTO RACEBIKES ( BIKENAME , COUNTRY_OF_ORIGIN , COST ) VALUES ( '?' , '?' , ? )";

PreparedStatement preStatement = conn.prepareStatement( INSERT_BIKE );

preStatement.setString(1, "JHT");

preStatement.setString(2, "USA");

preStatement.setInt(3, 2500);

preStatement.executeUpdate(); // invalid column index

这不会失败,但也不会写入数据库(即使我没有禁用自动提交).

String INSERT_BIKE = "INSERT INTO RACEBIKES ( BIKENAME , COUNTRY_OF_ORIGIN , COST ) VALUES ( ? , ? , ? )";

PreparedStatement preStatement = conn.prepareStatement( INSERT_BIKE );

preStatement.setString(1, "JHT");

preStatement.setString(2, "USA");

preStatement.setInt(3, 2500);

preStatement.executeBatch();

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值