一、异常情况:
有了一定Java编程经验之后,一般都使用PreparedStatement代替Statement。
但实际开发中对数据库进行操作时,字段遇到大数据并且该字段为非BLOB,CLOB的类型时,若采用PreparedStatement方法setString方法时会如下异常: java.sql.SQLException: 数据大小超出此类型的最大值
实际数据库定义字段长度为:4000,而包装的数据内容长度只有1000左右
二、分析原因:
1、驱动程序在把SQL语句发给数据库前,PreparedStatement对字符串进行预处理并进行了转义替换;
2、字符集原因。
三、解决办法:
通过阅读PreparedStatement文档,setCharacterStream方法可以解决这个问题:
stmt.setCharacterStream(1,
new InputStreamReader(String内容, String内容.length());
四、案例总结:
JDBC在转换过程中对字符串的长度做了限制。这个限制和数据库中字段的实际长度没有关系。而setCharacterStream()方法可以逃过字符转换限制,也就成为了解决此问题的方案之一。JDBC对转换字符长度的限制是为了转换过程中的数据扩展。根据实际测试结果,在ZHS16GBK字符集和thin驱动下,2000-4000长度的varchar字段都只能插入1333个字节(约666个汉字)。
故解决PreparedStatement的setString中字符串长度问题可以有两种办法:
1、使用setCharacterStream()方法;
2、使用OCI驱动连接Oracle数据库。
分享到:
相关推荐
以上策略并非互相排斥,可以根据实际情况组合使用,以便更有效地解决MySQL数据库导入超出默认大小和执行时间的问题。在进行任何调整前,记得备份数据,以防意外情况发生。同时,对服务器性能的监控也非常重要,以免...
多媒体数据时达到了四个一体化:一体化定义、一体化存储、一体化检索、一体化处理,最大限 度地提高了数据库管理系统处理多媒体的能力和速度; 语言集数据库的定义、査询、更新、控制、维护、恢复、安全等一系列操作...
当尝试插入或更新的数据超过了该字段的长度限制时,Oracle会抛出错误`ORA-01438`,提示“value larger than specified precision allowed for this column”,即实际值的长度超出了该列允许的最大精度。这个错误通常...
数据库系统中的数据类型是构建和操作数据库的基础,它们定义了数据的结构和格式。以下是关于SQL Server数据库系统数据类型的详细讲解: 1. **二进制数据类型**: - **binary(n)**:用于存储固定长度的二进制数据,...
只有INTEGER PRIMARY KEY列才能使用AUTOINCREMENT,而且每次插入新记录时,会找到当前最大值加1作为新值。如果表中有多个INTEGER PRIMARY KEY,只有一个能使用AUTOINCREMENT特性。 7. 动态类型系统 SQLite3使用...
当尝试获取的数据修改锁(DML Lock)超出了系统允许的最大值时会触发此错误。通常需要对锁定机制进行优化或者降低并发事务的复杂度。 - ORA-00060: 等待资源时检测到死锁。在多用户环境中,当两个或多个事务相互...
这个错误通常表明数据库当前打开的游标数量超过了`open_cursors`参数所设定的最大值。 首先,我们需要理解为什么会出现这样的问题。在Java中,当我们使用`conn.createStatement()`或`conn.prepareStatement()`创建...
在 MySQL 中,可以通过配置参数 `max_allowed_packet` 来设置最大允许的网络数据包大小,默认值通常是 1MB,可以根据需要调整到更大的值,但需要注意不要超出系统限制。 #### 问题10:你对游标的理解,游标的分类 ...
这个错误通常发生在尝试插入或更新数据时,违反了唯一性约束,如主键或唯一索引。解决方法包括检查插入的数据是否已存在于表中,或者修改插入的数据以满足约束条件。 二、ORA-01422:精确提取超出了最大允许数量 当...
decimal类型是数据库中一种常用的数据类型,对于 decimal 类型的属性,在插入数据时可能会出现一些错误,以下是对decimal测试案例文档1中出现的七个问题的知识点总结: 1. decimal类型属性插入数据时的精度范围问题...
这个错误主要涉及到数据库管理和编程语言的交互,如ASP.NET和C#,在处理字符串和二进制数据时需要特别注意。 1. 数据库字段类型与长度:首先,我们需要理解数据库中的字段类型。在SQL Server等关系型数据库中,字符...
最近在往SQL Server 2008数据库里插入数据时,有个超过1000条记录集,需要手动插入到一个表里,数据库名为MF,表名为test。 insert into test(name) values (1),(2),(3),(4),(5),(6),…(1001) –这里是1001条...
当使用SQL*Loader导入数据时遇到超出字符长度限制的错误,可以通过调整目标表列的长度、修改控制文件中的定义、优化控制文件以及检查源文件等多种方式来解决。在处理此类问题时,确保对SQL*Loader的工作原理有充分的...
2. **应用程序逻辑缺陷**:在数据收集或处理阶段,未能有效校验和控制数据长度,导致超出字段限制的数据被尝试插入数据库。 3. **参数绑定错误**:在使用预编译语句或参数化查询时,参数绑定的值大小超过数据库字段...
当数据量过大时,可以通过分表的方式来解决。 15. **慎用分区(如果要用分区需采用物理分区)** - **解释**:分区可以提高大数据表的查询性能,但在使用时需要谨慎,特别是考虑到分区对表结构的影响。物理分区可以...
在面试中,Oracle相关的知识通常涉及数据库管理、SQL语法、数据类型、函数、触发器、事务处理等方面。下面将对这些知识点进行详细的解释。 1. 字符串操作函数: - `ASCII()`:返回字符串第一个字符的ASCII码。 - ...
MySQL中的DECIMAL数据类型用于存储高精度的十进制数,它在数据库设计中尤其重要,因为这种数据类型可以确保精确存储货币和其他需要精确计算的数值。标题和描述提到的"DECIMAL(N,M)"中,N和M是两个关键参数,它们定义...
##### 错误处理:在插入数据时可能遇到的常见错误及解决方案 1. **数据类型不匹配**: - **问题**:尝试插入的数据类型与列定义的类型不符。 - **解决方法**:检查并确保插入的数据与列定义的数据类型相匹配。 2...
可以设置其最大值和当前值,以反映任务的进度。在上述代码中,用作加载数据时的可视化反馈。 7. **ActionListener**和**ActionEvent**: ActionListener接口用于监听和响应按钮点击等事件。当用户点击按钮时,会触发...
1. **当向SC表插入数据时**,修改SC_NUMBER表中的选课数量。 - 如果该学生已有记录,则更新`num`字段;如果没有记录,则新增一条记录。 2. **当从SC表删除数据时**,同样更新SC_NUMBER表中的`num`字段,表示选课...