conn = ConnectionFactory.getConnection();
stm = conn.createStatement();
rst = stm.executeQuery(SQL);
rst.beforeFirst();
解决办法: stat = conn.createStatement();
改为 stmt=conn.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_READ_ONLY);
用法一:Statement stmt =conn.createStatement(); 使用返回的语句对象创建的结果集的类型为“仅向前”类型,简单说就是光标指针不能随意变动。
用法二:Statement stmt = conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_READ_ONLY);
createStatement(int type,int concurrency)
参数解释:
参数 int type
ResultSet.TYPE_FORWORD_ONLY 结果集的游标只能向下滚动。
ResultSet.TYPE_SCROLL_INSENSITIVE 结果集的游标可以上下移动,当数据库变化时,当前结果集不变。
ResultSet.TYPE_SCROLL_SENSITIVE 返回可滚动的结果集,当数据库变化时,当前结果集同步改变。
参数 int concurrency
ResultSet.CONCUR_READ_ONLY 不能用结果集更新数据库中的表。
ResultSet.CONCUR_UPDATETABLE 能用结果集更新数据库中的表。
常用方法:
public void beforeFirst 将游标移动到结果集的初始位置,即在第一行之前。
public void afterLast() 将游标移到结果集最后一行之后。
public void first() 将游标移到结果集的第一行。
public void last() 将游标移到结果集的最后一行。
public boolean isAfterLast() 判断游标是否在最后一行之后。
public boolean isBeforeFirst() 判断游标是否在第一行之前。
public boolean ifFirst() 判断游标是否指向结果集的第一行。
public boolean isLast() 判断游标是否指向结果集的最后一行。
public int getRow() 得到当前游标所指向行的行号,行号从1开始,如果结果集没有行,返回0。
public boolean absolute(int row) 将游标移到参数row指定的行号。如果row取负值,就是倒数的行数,absolute(-1)表示移到最后一行,absolute(-2)表示移到倒数第2行。当移动到第一行前面或最后一行的后面时,该方法返回false。
报错:java.sql.SQLException: 对只转发结果集的无效操作: beforeFirst at oracle.jdbc.driver.BaseResultSet.beforeFirst(BaseResultSet.java:65)原因(代码简写):conn = ConnectionFactory.getConnection();stm = conn.createStatement();rst = stm.executeQuery(SQL);rst.beforeFir...
在遍历结果集的时候,用rs.isLast()来判断是否到达最后一条,结果报出异常:
java.sql.SQLException: 对只转发结果集的无效操作: isLast
在网上找到一个解决方法是:
java 代码
PreparedStatement ps = conn.prepareStatement(sql, ResultSet.TYPE_SCROLL_INSENSITIVE, R...
stmt=conn.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_READ_ONLY)
加上括号里的内容就可以了。
ResultSet.TYPE_SCROLL_INSENSITIVE
ResultSet对象类型,可滚动,不受其它更改影响。
ResultSet.CONCUR_READ_ON
PreparedStatement prep = null;
String sql = "select * from t_users where userID = ? and password = ? ";
prep = conn.prepareStatement(sql);
如果用结果集保存执行得到的结果,然后用结果集的方法first()、beforeFirst()等都会报错...
错误提示:
java.sql.SQLException: 对只转发结果集的无效操作: last
at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:112)
at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.jav
[ERROR] 2009-03-19 11:04:44 [http-8080-1] com.utils.DbUtil.executeSql(DbUtil.java:57)
java.sql.SQLExceptio
出现异常的语句: rs.last();
异常的详细信息:对只转发结果集的无效操作: last
解决办法: stat = conn.createStatement();
改为 stmt=conn.cr
今天想用rs.first()方法,突然方法报错了:Exception in thread "main" java.sql.SQLException: 对只转发结果集的无效操作: first
后来上网找了找才知道原来是:
PreparedStatement pstmt =conn.prepareStatement(sql);这种方法产生的ResultSet 对象类型为ResultSet.TYPE...
pstmt = sourceConn.prepareStatement(findSql);
pstmt.executeUpdate();
rs = pstmt.executeQuery();
rs.last(); //移到最后一行 出错代码行
int rowCount = rs.getRow(); //得到当前行号,也就是记录数
rs.beforeFirst(); //还要用到记录集,就把
今天调用DbUtil类直接操作数据库,取得ResultSet,想判断其是否为空(sql中有exists判断有无相关记录),结果出现异常:
[code="java"]
[ERROR] 2009-03-19 11:04:44 [http-8080-1] com.utils.DbUtil.executeSql(DbUtil.java:57)
java.sql.SQLException: 对只转发结...
包含1391个指标,其说明文档参考:
https://blog.csdn.net/yushibing717/article/details/136115027
数据来源:基于上市公司公告数据整理
数据期间:从具体上市公司上市那一年开始-2022年度的数据,年度数据
包含各上市公司股票的、多年度的上市公司财务报表资产负债表、上市公司财务报表利润表、上市公司财务报表现金流量表间接法、直接法四表合在一个面板里面,方便比较和分析利用
含各个上市公司股票的、多年度的
偿债能力 披露财务指标 比率结构 经营能力 盈利能力
现金流量分析 风险水平 发展能力 每股指标 相对价值指标 股利分配
11类财务指标分析数据合在一个面板里面,方便比较和分析利用
含上市公司公告的公司治理、股权结构、审计、诉讼等数据
包含1391个指标,如:
注册具体地址
公司办公地址
办公地址邮政编码
董事会秘书
董秘联系电话
董秘电子邮箱
.....
其中:客户资金存款
结算备付金
其中:客户备付金
.........
根据您提供的信息,您遇到了一个“java.sql.SQLException: 无效的列索引”的错误。这通常发生在尝试访问查询结果集中不存在的列时。
可能有以下一些原因导致这个错误:
1. 您尝试访问结果集中不存在的列索引,例如,您可能会尝试访问列0,但是结果集中的第一列的索引是1。
2. 您可能在查询中使用了错误的列名。请确保使用正确的列名。
3. 查询返回的结果集可能为空,因此尝试访问任何列都会导致此错误。
要解决此问题,您可以尝试以下步骤:
1. 检查您的代码并确保使用正确的列索引或列名。
2. 如果您使用的是列索引,请确保从1开始而不是从0开始。
3. 确保查询返回的结果集不为空,可以在代码中添加适当的条件来处理空结果集。
希望这可以帮助您解决问题!