Java 执行查询时出现错误ORA-12899

Java 执行查询时出现错误ORA-12899,java,oracle,Java,Oracle,我试图在准备好的语句中设置一个包含一个字符的字符串,如下所示: ps.setString(7, String.valueOf(concretizada)); 但问题是:我的db列的大小只有一个。即使只是一个字符,也会引发异常: java.sql.SQLException: ORA-12899: valor muito grande para a coluna "QPL"."TAB_NEGC"."FL_CONCR" (real: 8, máximo: 1) at oracle.jdbc

我试图在准备好的语句中设置一个包含一个字符的字符串,如下所示:

ps.setString(7, String.valueOf(concretizada));
但问题是:我的db列的大小只有一个。即使只是一个字符,也会引发异常:

java.sql.SQLException: ORA-12899: valor muito grande para a coluna "QPL"."TAB_NEGC"."FL_CONCR" (real: 8, máximo: 1)

    at oracle.jdbc.driver.T4CTTIoer.processError(T4CTTIoer.java:447)
    at oracle.jdbc.driver.T4CTTIoer.processError(T4CTTIoer.java:396)
    at oracle.jdbc.driver.T4C8Oall.processError(T4C8Oall.java:951)
    at oracle.jdbc.driver.T4CTTIfun.receive(T4CTTIfun.java:513)
    at oracle.jdbc.driver.T4CTTIfun.doRPC(T4CTTIfun.java:227)
    at oracle.jdbc.driver.T4C8Oall.doOALL(T4C8Oall.java:531)
    at oracle.jdbc.driver.T4CPreparedStatement.doOall8(T4CPreparedStatement.java:208)
    at oracle.jdbc.driver.T4CPreparedStatement.executeForRows(T4CPreparedStatement.java:1046)
    at oracle.jdbc.driver.OracleStatement.doExecuteWithTimeout(OracleStatement.java:1336)
    at oracle.jdbc.driver.OraclePreparedStatement.executeInternal(OraclePreparedStatement.java:3613)
    at oracle.jdbc.driver.OraclePreparedStatement.executeUpdate(OraclePreparedStatement.java:3694)
    at oracle.jdbc.driver.OraclePreparedStatementWrapper.executeUpdate(OraclePreparedStatementWrapper.java:1354)
    at br.com.reajuste.repositorio.RepositorioTabelaNegociacao.inserirTabela(RepositorioTabelaNegociacao.java:1451)
    at br.com.reajuste.repositorio.RepositorioTabelaNegociacao.inserirTabelaNegociacao(RepositorioTabelaNegociacao.java:855)
    at br.com.reajuste.repositorio.RepositorioTabelaNegociacao.copiarTabelas(RepositorioTabelaNegociacao.java:837)
    at br.com.reajuste.controlador.ControladorReajuste.executarReajuste(ControladorReajuste.java:33)
    at br.com.reajuste.gui.Main.main(Main.java:18)
(值对于列来说太大)

如何在准备好的语句中将char设置为参数

编辑:我的'constituzada'变量:

String concretizada = "N";
        if (tabelaNegociacao.getConcretizada()) {
            concretizada = "S";
        }

DDL并没有说
FL\u CONCR
的长度为1个字符。它表示
FL\u CONCR
的长度为1字节

根据编码方式,一个字符可以占用多个字节

将其更改为:

FL_CONCR VARCHAR2(1 CHAR)
它应该会起作用

如果不想重新创建表,请执行以下操作:

ALTER TABLE TAB_NEGC MODIFY(FL_CONCR VARCHAR2(1 CHAR));

concretizada
的值是多少?修剪()字符串并查看。可能是字符串中的空格导致问题。允许的最大值为“FL_CONCR”列的1个字符,您正在传递8个字符。您发布的错误表明您有一个长度为
8
的字符串,您正试图将其放入长度为
1
的列中。使用“concretizada”的定义进行编辑。在不更改列的定义的情况下,是否有办法解决此问题?@JoaoVictor不幸的是,没有。正如我所写,根据编码方式,字符可以具有可变的字节大小。i、 e.UTF-8可以使用1到4个字节来存储字符。