gpt4 book ai didi

java - 由于字段大小有限,数据未保存在数据库中

转载 作者:行者123 更新时间:2023-12-01 15:05:22 25 4
gpt4 key购买 nike

数据库表 fsr_system_log 中有一个针对架构 fsr_applmessage 列。该表应该存储系统日志消息。列的大小为 255,数据类型为 varchar2。保存大于255个字符的消息的逻辑是:

public void saveSystemLog(SystemLogRequest systemLog){
User user = systemLog.getUser();
String system = systemLog.getSystem();
Log log = systemLog.getSystemLog();

try {
initializeDelegate();
delegate.beginTransaction();

LogEntry[] logEntries = log.getItemArray();
for (LogEntry logEntry : logEntries) {
// Save each entry
ParamVector<Object> params = new ParamVector<Object>();

//Check if message is greater than 255 characters
String message = logEntry.getMsg();
notifier.debug("Log Message is : " + message);
if(message.length()>255){
message = message.substring(0,255);
notifier().debug("Message string greater than 255 characters : " + message);
}
params.add(message, 255, false);
}

但是尽管实现了代码,我仍然面临以下错误:

Failed to save system log due to SQL error: ORA-12899: value too large for column "FSR_APPL". "FSR_SYSTEM_LOG". "MESSAGE" (actual: 257, maximum: 255)

正在使用的示例日志是:

<xbe:systemLogRequest xmlns:xbe="http://tdc.dk/fsr/common/xbean">
<user>
<userNumber>a62267</userNumber>
</user>
<system>Client</system>
<systemLog>
<item>
<timestamp>2011-10-27T17:03:08.404+02:00</timestamp>
<type>Info</type>
<msg><![CDATA[<html><center>Din registrering er nu sendt<br><br>Tak for indmeldingen</center></html>]]></msg>
</item>
<item>
<timestamp>2011-10-27T17:03:13.701+02:00</timestamp>
<type>Info</type>
<msg><![CDATA[<html><center>Din registrering er nu sendt<br><br>Tak for indmeldingen</center></html>]]></msg>
</item>
<item>
<timestamp>2011-10-28T12:45:47.801+02:00</timestamp>
<type>Info</type>
<msg><![CDATA[<html><center>Din registrering er nu sendt<br><br>Tak for indmeldingen</center></html>]]></msg>
</item>
<item>
<timestamp>2011-10-28T12:45:57.926+02:00</timestamp>
<type>Info</type>
<msg>Afsluttet uden at gemme fejlregistering</msg>
</item>
</systemLog>
</xbe:systemLogRequest>

请帮忙!

注意:抛出的错误仅适用于某些系统日志消息。当抛出此错误时,实际值始终为常量 257。

最佳答案

显然您有一些字符用多个字节表示。

在 Java 中,您可以得到以字符为单位的字符串长度,而 Oracle 显然会根据列的定义方式检查字节限制。

检查表的定义,很可能该列是使用默认字符语义定义的 - 即字节(但取决于您的 Oracle 安装),因此它默认为 VARCHAR2(255 Byte)

如果您将列重新定义为 VARCHAR2(255 Char) 事情应该没问题。

类似于:

CREATE TABLE FSR_SYSTEM_LOG
(
...
MESSAGE VARCHAR2(255 Char),
...
);

对我来说,将 XML 存储在这样一个(长度)有限的列中似乎相当奇怪。您能否确保您的 XML 决不超过 255 个字符?为什么不将消息存储为 CLOB

关于java - 由于字段大小有限,数据未保存在数据库中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13030293/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com