在 JDBC 应用程序中向前和向后移动 ResultSet 游标

2024-02-26

我正在开发一个库存系统软件,该软件使用 JDBC ODBC 连接连接到 Ms Sql 服务器。我想将结果集光标移动到下一行并向后移动。连接正常,程序可以从数据库中检索字段,因此没有问题。

我这里的代码位于标有“下一步”的按钮上。当您单击此按钮时,它应该移动到数据库中的下一行并从该行检索数据。检索到的数据应显示在“文本字段”中。问题是当我点击下一步时没有任何反应?

    private void NextBtnActionPerformed(java.awt.event.ActionEvent evt) {                                        
    try {
        Class.forName("sun.jdbc.odbc.JdbcOdbc");
        Connection con;
        con = DriverManager.getConnection("jdbc:odbc:StockInventory","sa","123");           

        Statement stmt = con.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_UPDATABLE);
        String query = "select * from Stocktbl";

        ResultSet rs; 
        rs = stmt.executeQuery(query); 


        if(!rs.isLast()) {
            rs.next();

            TxtStockid.setText(rs.getString("StockId"));
            TxtItem.setText(rs.getString("ItemName"));
            TxtQuantity.setText(rs.getString("Quantity"));
            TxtUnitprice.setText(rs.getString("UnitPrice"));
            TxtNetprice.setText(rs.getString("NetPrice"));
            TxtUnitweight.setText(rs.getString("UnitWeight"));
            TxtNetweight.setText(rs.getString("Netweight"));
            TxtDescription.setText(rs.getString("Description"));
        }

        rs.close();
        stmt.close();
        con.close();




    } 
    catch (SQLException ex) 
    {
        Logger.getLogger(StockScr.class.getName()).log(Level.SEVERE, null, ex);
    }
    catch (ClassNotFoundException ex) 
    {
        Logger.getLogger(StockScr.class.getName()).log(Level.SEVERE, null, ex);
    }       
}

这是程序的其余编码,“下一步”按钮被添加到该面板中。

public class StockScr extends javax.swing.JPanel {
ResultSet rs;
Connection con = null;

public StockScr() {
    initComponents();
    ShowTable();

}

void ShowTable(){
    try {
        Class.forName("sun.jdbc.odbc.JdbcOdbc");
        Connection con;
        con = DriverManager.getConnection("jdbc:odbc:StockInventory","sa","123");           

        Statement stmt = con.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_READ_ONLY);
        String query = "select * from Stocktbl";           
        ResultSet rs; 
        rs = stmt.executeQuery(query);

        rs.first();
            TxtStockid.setText(rs.getString("StockId"));
            TxtItem.setText(rs.getString("ItemName"));
            TxtQuantity.setText(rs.getString("Quantity"));
            TxtUnitprice.setText(rs.getString("UnitPrice"));
            TxtNetprice.setText(rs.getString("NetPrice"));
            TxtUnitweight.setText(rs.getString("UnitWeight"));
            TxtNetweight.setText(rs.getString("Netweight"));
            TxtDescription.setText(rs.getString("Description"));

        rs.close();
        stmt.close();
        con.close();

    } 
    catch (SQLException ex) 
    {
        Logger.getLogger(StockScr.class.getName()).log(Level.SEVERE, null, ex);
    }
    catch (ClassNotFoundException ex) 
    {
        Logger.getLogger(StockScr.class.getName()).log(Level.SEVERE, null, ex);
    }        
}


public void fetchResultSet()
{

try {
    if(con==null || con.isClosed())
    {
      Class.forName("sun.jdbc.odbc.JdbcOdbc");
      con = DriverManager.getConnection("jdbc:odbc:StockInventory","sa","123");           
    }
    Statement stmt =     con.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_READ_ONLY);
    String query = "select * from Stocktbl";
    rs = stmt.executeQuery(query); 
  }catch(Exception ex){
     System.out.println(ex);
     Logger.getLogger(StockScr.class.getName()).log(Level.SEVERE, null, ex); 
  }

     try
     {
        if(con != null)
        {
          con.close();
        }
     }catch(Exception ex){

     }

}


private void NextBtnActionPerformed(java.awt.event.ActionEvent evt) {

try
{

 if (rs == null)
 {
    fetchResultSet();
 }

 if (rs!=null)
 {
    if (rs.next())
    {
        TxtStockid.setText(rs.getString("StockId"));
        TxtItem.setText(rs.getString("ItemName"));
        TxtQuantity.setText(rs.getString("Quantity"));
        TxtUnitprice.setText(rs.getString("UnitPrice"));
        TxtNetprice.setText(rs.getString("NetPrice"));
        TxtUnitweight.setText(rs.getString("UnitWeight"));
        TxtNetweight.setText(rs.getString("Netweight"));
        TxtDescription.setText(rs.getString("Description"));         
    }
   else
   {
      rs = null;
   }
 }
}catch(Exception ex){
  System.out.println(ex); 
  }        
}

您应该在单击之前创建与数据库的连接并仅获取一次新记录next按钮。然后继续使用rs.next in NextBtnActionPerformed method.

例如,您应该有一个方法调用 fetchResultSet ,如下所示,并且应该在之前调用next单击按钮。

ResultSet rs;
Connection con = null;
public void fetchResultSet()
{

   try {
        if(con==null || con.isClosed())
        {
          Class.forName("sun.jdbc.odbc.JdbcOdbc");
          con = DriverManager.getConnection("jdbc:odbc:StockInventory","sa","123");           
        }
        Statement stmt = con.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_READ_ONLY);
        String query = "select * from Stocktbl";
        rs = stmt.executeQuery(query); 
      }catch(Exception ex)
      {
         System.out.println(ex);
         Logger.getLogger(StockScr.class.getName()).log(Level.SEVERE, null, ex);

         try
         {
            if(con != null)
            {
              con.close();
            }
         }catch(Exception x){}
      }
}

然后你的NextBtnActionPerformed应该是这样的:

private void NextBtnActionPerformed(java.awt.event.ActionEvent evt)
{
  try
  {
     if (rs == null)
     {
        fetchResultSet();
     }
     if (rs!=null)
     {
        if (rs.next())
        {
            TxtStockid.setText(rs.getString("StockId"));
            TxtItem.setText(rs.getString("ItemName"));
            TxtQuantity.setText(rs.getString("Quantity"));
            TxtUnitprice.setText(rs.getString("UnitPrice"));
            TxtNetprice.setText(rs.getString("NetPrice"));
            TxtUnitweight.setText(rs.getString("UnitWeight"));
            TxtNetweight.setText(rs.getString("Netweight"));
            TxtDescription.setText(rs.getString("Description"));         
        }
       else
       {
          rs = null;
       }
     }
  }catch(Exception ex){System.out.println(ex);}
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 JDBC 应用程序中向前和向后移动 ResultSet 游标 的相关文章

  • 是否有像数据库的 JDBC 一样的 NoSQL/键值存储抽象库?

    我使用过很多 SQL 抽象库 例如 ODBC JDBC 和 ActiveRecord NoSQL 键值存储世界中有哪些抽象选项 我主要是问这个问题 这样如果我选择键值存储 那么我就可以使用抽象库而不会被锁定 考虑到周围键值存储的数量 我认为
  • 如何让 BlazeDS 忽略属性?

    我有一个 java 类 它有一个带有 getter 和 setter 的字段 以及第二对 getter 和 setter 它们以另一种方式访问 该字段 public class NullAbleId private static final
  • Spring应用中Eureka健康检查的问题

    我正在开发一个基于 Spring 的应用程序 其中包含多个微服务 我的一个微服务充当尤里卡服务器 到目前为止一切正常 在我所有其他微服务中 用 EnableEurekaClient 我想启用这样的健康检查 应用程序 yml eureka c
  • Junit:如何测试从属性文件读取属性的方法

    嗨 我有课ReadProperty其中有一个方法ReadPropertyFile返回类型的Myclass从属性文件读取参数值并返回Myclass目的 我需要帮助来测试ReadPropertyFile方法与JUnit 如果可能的话使用模拟文件
  • 在内存中使用 byte[] 创建 zip 文件。 Zip 文件总是损坏

    我创建的 zip 文件有问题 我正在使用 Java 7 我尝试从字节数组创建一个 zip 文件 其中包含两个或多个 Excel 文件 应用程序始终完成 没有任何异常 所以 我以为一切都好 当我尝试打开 zip 文件后 Windows 7 出
  • 为什么 JTables 使 TableModel 在呈现时不可序列化?

    所以最近我正在开发一个工具 供我们配置某些应用程序 它不需要是什么真正令人敬畏的东西 只是一个具有一些 SQL 脚本生成功能并创建几个 XML 文件的基本工具 在此期间 我使用自己的 AbstractTableModel 实现创建了一系列
  • 为 java 游戏创建交互式 GUI

    大家好 我正在创建一个类似于 java 中的 farmville 的游戏 我只是想知道如何实现用户通常单击以与游戏客户端交互的交互式对象 按钮 我不想使用 swing 库 通用 Windows 看起来像对象 我想为我的按钮导入自定义图像 并
  • Spring AspectJ 在双代理接口时失败:无法生成类的 CGLIB 子类

    我正在使用Spring的
  • 过滤两次 Lambda Java

    我有一个清单如下 1 2 3 4 5 6 7 和 预期结果必须是 1 2 3 4 5 6 7 我知道怎么做才能到7点 我的结果 1 2 3 4 5 6 我也想知道如何输入 7 我添加了i gt i objList size 1到我的过滤器
  • 如何在 Spring 中禁用使用 @Component 注释创建 bean?

    我的项目中有一些用于重构逻辑的通用接口 它看起来大约是这样的 public interface RefactorAwareEntryPoint default boolean doRefactor if EventLogService wa
  • 如何获取之前的URL?

    我需要调用我的网络应用程序的 URL 例如 如果有一个从 stackoverflow com 到我的网站 foo com 的链接 我需要 Web 应用程序 托管 bean 中的 stackoverflow 链接 感谢所有帮助 谢谢 并不总是
  • 帮助将图像从 Servlet 获取到 JSP 页面 [重复]

    这个问题在这里已经有答案了 我目前必须生成一个显示字符串文本的图像 我需要在 Servlet 上制作此图像 然后以某种方式将图像传递到 JSP 页面 以便它可以显示它 我试图避免保存图像 而是以某种方式将图像流式传输到 JSP 自从我开始寻
  • jdbc mysql loginTimeout 不起作用

    有人可以解释一下为什么下面的程序在 3 秒后超时 因为我将其设置为在 3 秒后超时 12秒 我特意关闭了mysql服务器来测试mysql服务器无法访问的这种场景 import java sql Connection import java
  • 内部类的构造函数引用在运行时失败并出现VerifyError

    我正在使用 lambda 为内部类构造函数创建供应商ctx gt new SpectatorSwitcher ctx IntelliJ建议我将其更改为SpectatorSwitcher new反而 SpectatorSwitcher 是我正
  • volatile、final 和synchronized 安全发布的区别

    给定一个带有变量 x 的 A 类 变量 x 在类构造函数中设置 A x 77 我们想将 x 发布到其他线程 考虑以下 3 种变量 x 线程安全 发布的情况 1 x is final 2 x is volatile 3 x 设定为同步块 sy
  • Spring Boot Data JPA 从存储过程接收多个输出参数

    我尝试通过 Spring Boot Data JPA v2 2 6 调用具有多个输出参数的存储过程 但收到错误 DEBUG http nio 8080 exec 1 org hibernate engine jdbc spi SqlStat
  • 如何访问JAR文件中的Maven资源? [复制]

    这个问题在这里已经有答案了 我有一个使用 Maven 构建的 Java 应用程序 我有一个资源文件夹com pkg resources 我需要从中访问文件 例如directory txt 我一直在查看各种教程和其他答案 但似乎没有一个对我有
  • 为什么 Java 8 不允许非公共默认方法?

    让我们举个例子 public interface Testerface default public String example return Hello public class Tester implements Testerface
  • 专门针对 JSP 的测试驱动开发

    在理解 TDD 到底是什么之前 我就已经开始编写测试驱动的代码了 在没有实现的情况下调用函数和类可以帮助我以更快 更有效的方式理解和构建我的应用程序 所以我非常习惯编写代码 gt 编译它 gt 看到它失败 gt 通过构建其实现来修复它的过程
  • Eclipse 启动时崩溃;退出代码=13

    I am trying to work with Eclipse Helios on my x64 machine Im pretty sure now that this problem could occur with any ecli

随机推荐

  • 通过 C# Graphics 绘制“透明”文本,但在某种程度上它将绘制的文本变为“缺失”,因此它在结果图像中是透明的

    我希望在 DC 上绘制一个字符串 图形 我正在使用 C 但我希望将绘制的文本从图像中 删除 以便剩下的本质上是文本的剪切 如果我用透明画笔绘制绳索 显然什么都不会发生 有没有一种方法可以绘制类似的东西 或者我是否需要使用 2 个 DC 和
  • Pyopengl 镶嵌多边形

    我有以下形式的多边形 1 2 2 4 3 4 5 6 我需要镶嵌来绘制它们 但是 glutes 太复杂了 Opengl 无法处理凸多边形 我想我需要类似的东西 http www math uiuc edu gfrancis illimath
  • 如何为单个文件启用 ARC

    我想将使用 ARC 编写的单个 Objective C 类引入旧项目中 互联网提供了许多关于如何为项目启用 ARC 然后为单个文件禁用它的参考 但我想做相反的事情 我想保持项目原样 即使用手动引用计数 然后仅为新文件启用 ARC 我的搜索在
  • 为什么 Gitlab-CI 在下一阶段删除工件?

    指定依赖关系后 Gitlab CI当进入下一阶段时 仍然会从工作目录中删除工件 我已经尝试了该代码的所有不同变体 我认为这些变体应该有效 但没有成功 此外 我已经阅读了几个小时但尚未成功 亚搏体育实验室11 6 0 stages build
  • mef 中的组合容器所持有的类的实例

    据我了解 MEF CompositionContainer 创建并保留类的实例 我不知道在什么情况下 CompositionContainer 的内部会有一个类实例 任何人都可以列出对 CompositionContainer 执行的操作或
  • C++ 相当于代数数据类型?

    假设我有这个 Haskell 代码 data RigidBody RigidBody Vector3 Vector3 Float Shape position velocity mass and shape data Shape Ball
  • WEKA 工具包中的隐马尔可夫模型相当于什么?

    我需要对来自由 8 个加速度计组成的传感器网络的数据流进行分类 每个加速度计都会给我一个 X Y 和 Z 值 因此 在每个样本中 我有 8 x 3 24 个加速度值 我的采样频率约为 30 Hz 执行时间约为 0 5 秒 起初我想为此使用隐
  • 如何使用反射改变属性值

    是否可以使用反射来更改类的属性值 以下是我的课程 public class LoggerManager private static LoggerManager instance new LoggerManager private Logg
  • 使用 awk getline bash 从指定时间范围内的日志文件中提取数据

    我正在搜索解析日志文件并在此链接中找到了我需要的内容从日志文件中提取指定时间范围内的数据 https stackoverflow com questions 7575267 extract data from log file in spe
  • SemanticException 分区规范 {col=null} 包含非分区列

    我正在尝试使用以下代码在配置单元中创建动态分区 SET hive exec dynamic partition true SET hive exec dynamic partition mode nonstrict create exter
  • PHP 数组按值和日期排序(2 列)[重复]

    这个问题在这里已经有答案了 我在 PHP 中有多维数组 就像是 mylist array array ID gt 1 title gt Hello datetime gt 2014 05 05 12 08 PM array ID gt 2
  • 在 travis-ci 上使用秘密 api 密钥

    我想用特拉维斯 ci http travis ci org 对于我的一个projects https github com adelevie parse ruby client 该项目是一个 API 包装器 因此许多测试都依赖于 API 密
  • Fortran 多态性、函数和分配

    我是 Fortran OOP 的初学者 我正在尝试编写一个程序 其中包含处理多态变量作为参数的过程 尽管我的原始代码要复杂得多 许多过程 几个派生类型等 但我可以隔离我的问题的一个简单示例 例如 我有一个复制多态变量并稍微修改此副本的过程
  • 如何配置 Spring MVC 来防止“基于路径的漏洞”

    我有一个 Spring MVC 5 0 8 RELEASE 应用程序 最近的安全扫描表明它具有 基于路径的漏洞 这是控制器 RequestMapping value faq method RequestMethod GET public S
  • 编写一个可调用 C 代码的 void 过程?

    编写一个可从 C 调用的汇编过程 称为increment 该过程应采用指向 32 位整数的指针作为参数 并应递增该参数指向的整数 该函数的 C 原型如下 void increment int p 仅提供从过程标签到 ret 指令的汇编代码
  • Xcode 中的 Swift 编译时间极长

    我有三个 iOS 项目 第一个 35k Swift LOC Swift 2 1 或 2 0 使用 Xcode 7 2 3 编译 第二个 15k Swift LOC Swift 2 3 使用 Xcode 8 2 1 编译 第三个 15k Sw
  • Bootstrap 4 向右浮动无法与导航栏一起使用[重复]

    这个问题在这里已经有答案了 这是代码 我需要将导航栏 没有徽标 移动到右侧 所以我添加了 float right 来喜欢 div class collapse navbar collapse float right 但它没有奏效 完整代码
  • 在 ASP.NET 单元测试中模拟 HttpContext.server.MapPath

    我在 ASP Net Web 应用程序中进行单元测试 现在我可以访问模型文件中的构造函数来测试其中是否有用于上传 XML 文件的 Server MapPath 代码 当尝试测试此代码时 我收到错误 因为 HttpContext 为 null
  • 函数使用 NRV 优化应遵循哪些规则

    我应该遵循哪些规则或技巧才能使函数能够在函数中使用 NRV 命名返回值 优化 我从不同的地方吸收了这些提示 但不知道我的理解是否正确 要返回的对象在函数内部不应该有任何名称 那为什么叫NAMED返回值优化 return 语句应该将对象用括号
  • 在 JDBC 应用程序中向前和向后移动 ResultSet 游标

    我正在开发一个库存系统软件 该软件使用 JDBC ODBC 连接连接到 Ms Sql 服务器 我想将结果集光标移动到下一行并向后移动 连接正常 程序可以从数据库中检索字段 因此没有问题 我这里的代码位于标有 下一步 的按钮上 当您单击此按钮