进入在项目中插入数据的时候,发现数据在一千多条的时候,插入报超过最大游标错误。一直不明白为什么有这个错误呢,因为我我的Connection 只有一个啊,怎么还有报这个错。后来检查发现PreparedStatement 对象开的太多了,也需要对它进行关闭。
/**
*插入数据
*@param Layer
*@return void
*/
public boolean insertShap(Layer layer) {
Connection conn=JdbcUtil.getConnection();
PreparedStatement ps=null;
boolean result=true;
String sqlexute="";
StringBuffer sqlstr=new StringBuffer("insert into ");
sqlstr.append(layer.getLayer()+"(objectid,shape");
List<String> Fileds=layer.getFeature().get(0).getFiled();
for(int i=0;i<Fileds.size();i++){
String filed=Fileds.get(i);
sqlstr.append(" ,"+filed);
}
sqlstr.append(") values(");
sqlstr.append("?,?,");
for(int i=0;i<Fileds.size();i++){
sqlstr.append("?,");
}
sqlexute=sqlstr.substring(0, sqlstr.length()-1);
sqlexute+=")";
System.out.println(sqlexute);
List<Feature> features=layer.getFeature();
for(int i=0;i<features.size();i++){
Feature f=features.get(i);
JGeometry jgom=createJGeometry(f);
if(jgom==null)continue;
try {
STRUCT dbObject = JGeometry.store (jgom, conn);
ps=conn.prepareStatement(sqlexute);
ps.setInt(1, i+1);
ps.setObject(2, dbObject);
List<String> value=f.getValue();
for(int j=0;j<f.getFiled().size();j++){
ps.setString(j+3,value.get(j));
if(ConfigUtil.debug){
System.out.println(j+3+">>>>>>>>>>>"+value.get(j));
}
}
ps.executeUpdate();
} catch (SQLException e) {
result=false;
if(ConfigUtil.debug){
e.printStackTrace();
}
}
JdbcUtil.closeAll(ps);
//开始没写,始终报错
}
//JdbcUtil.closeAll(ps, conn);
if(result){
System.out.println("图层数据入库成功...");
}else{
System.out.println("图层数据入库失败...");
}
return result;
}
分享到:
相关推荐
每个会话可以打开多个游标,但存在一个限制,即 OPEN_CURSORS 参数指定的最大游标数。如果应用程序打开的游标数超过这个限制,会引发 ORA-01000: maximum open cursors exceeded 异常。下面将探讨超出打开游标的最大...
本文实例讲述了Oracle出现超出打开游标最大数的解决方法。分享给大家供大家参考,具体如下: Java代码在执行conn.createStatement()和conn.prepareStatement()的时候,实际上都是相当与在数据库中打开了一个cursor。...
"进程达到最大游标数"的问题通常发生在关系型数据库中,如Oracle、MySQL或SQL Server,当应用程序或数据库实例打开并使用的游标超过了系统设定的最大限制,就会引发这个错误。游标是数据库操作中的一个关键概念,...
1. `OPEN_CURSORS`:这个参数定义了每个用户可以同时打开的最大游标数。当达到此限制时,会抛出`ORA-01000`错误。默认值可能因环境而异,但通常较小,如800。如果频繁遇到该错误,可以考虑增加此参数的值,但更重要...
如果打开的游标数量超过`OPEN_CURSORS`参数设置的最大值,系统会抛出ORA-01000错误。 2. **CodeXpert Rule 2608 - 确保引用的本地游标已经打开** - 这个警告规则要求在访问游标(例如通过FETCH或其他属性,如%IS...
1. ORA-01000: 达到最大打开游标数 - 表示应用程序打开了过多的游标,超过了系统允许的最大值。解决方法是优化代码,关闭不再使用的游标,或者增加`OPEN_CURSORS`初始化参数的值。 2. ORA-01422: 指定的行数超出...
3. **Open_cursors**(打开的游标数): 配置为30000,对于高并发查询环境尤其重要,提高了并发处理能力。 4. **Sessions**(会话数): 设置为2500,限制了数据库能同时支持的会话数,有助于避免资源过度消耗。 5...
接下来,我们讨论一个常见的Oracle错误:ORA-01000: maximum open cursors exceeded,即打开的游标数量超过了允许的最大值。这通常发生在频繁使用预编译语句(PreparedStatement)的场景中。解决这个问题有以下几个...
- `open_cursors`控制打开的游标数,过多会导致内存压力增大。 - `undo_retention`设置回滚段保留时间,确保事务一致性。 - `undo_management=AUTO`启用自动回滚段管理,提高性能。 6. **使用企业管理器...
11. SUBSCRIPT_BEYOND_COUNT:当尝试访问嵌套表或VARRAY的元素,其下标超过了其定义的最大值,会触发此异常。 12. SUBSCRIPT_OUTSIDE_LIMIT:当你对嵌套表或VARRAY使用负数下标,或者下标超出其范围时,会抛出此...
4. **CURSOR_ALREADY_OPEN**:当试图在一个已经打开的游标上再次执行OPEN语句时触发。每个游标只能处于打开状态一次,避免资源浪费和冲突。 5. **DUP_VAL_ON_INDEX**:在唯一性索引的列上插入或更新重复值时触发。...
3. **Blob列超过4M大小**:由于MySQL对BLOB类型的限制(最大4MB),过大的BLOB数据无法直接迁移。可以通过使用`longblob`代替`blob`来解决这一问题,因为`longblob`的最大长度为4GB,足够满足大多数应用的需求。 ##...
- `OPEN_CURSORS`: 打开游标的最大数量。 - `PROCESSES`: 允许的最大进程数。 8. **故障恢复相关配置** - `DB_RECOVERY_FILE_DEST`: 快闪恢复区域的目录。 - `DB_RECOVERY_FILE_SIZE`: 快闪恢复区域的大小。 ...
- **查看Oracle最大游标数**: - 命令:`show parameter open_cursors` - **查看当前打开的游标数目**: - 命令:`select count(*) from v$open_cursor;` - **修改Oracle最大游标数**: - 命令示例:`alter ...
7. 其他系统参数:如CONTROL_FILES定义控制文件的位置,UNDO_MANAGEMENT管理撤销空间的方式,ROLLBACK_SEGMENTS指定回滚段,OPEN_CURSORS设定单个用户可打开的游标数,PROCESSES定义允许同时连接的进程数,IFILES...
当使用无效的游标时触发此异常,可能是因为游标尚未被正确打开。 **解决方法:** - 确保在使用游标之前已正确打开它。 - 检查游标的打开状态和使用方式。 #### 7. INVALID_NUMBER (ORA-01722) **异常描述:** 当...
当达到会话允许的最大游标数时触发此错误。 **2. 原因** 当一个会话打开的游标数超过了系统定义的最大值时,会触发此错误。 **3. 措施** - 在初始化参数文件`init<SID>.ora`中增加`OPEN_CURSORS`的数值,一般建议...
在这个例子中,如果新插入的学生将使班级人数超过最大值,触发器会抛出一个自定义异常。 总之,Oracle异常处理和触发器是数据库管理的重要工具,它们可以帮助开发者优雅地处理错误,保持数据一致性,并在后台实现...
当一个会话达到其资源限制时,如最大打开游标数、最大连接时间等,会抛出此错误。这通常意味着会话配置需要调整,或者系统资源不足。 #### ORA-00021: Instance recovery in progress 在实例恢复过程中执行操作时...