如何从 (SQLite) 数据库加载的 JTable 中插入、更新和删除项目

2023-12-07

我目前有 2 个类,一类显示 GUI,一类是从数据库获取项目。我的代码如下:

此代码用于在我的 GUI 中显示 JTable

public void table() {
    if(SOMR.tableCall() == true) {
        this.columnNames = SOMR.getCol();
        this.data = SOMR.getData();
    JTable table = new JTable(data, columnNames)
    {
        public Class getColumnClass(int column)
        {

            for (int row = 0; row < getRowCount(); row++)
            {
                Object o = getValueAt(row, column);

                if (o != null)
                {
                    return o.getClass();
                }
            }

            return Object.class;
        }
    };

    JScrollPane scrollPane = new JScrollPane( table );
    add( scrollPane, BorderLayout.CENTER );
    }

}

这段代码是检索项目并将它们传递给上面的代码以将检索到的项目显示到 JTable

public boolean table() {

    Connection connection = null;  
     ResultSet resultSet = null;  
     PreparedStatement preparedStatement = null;  
     try 
     {  
         Class.forName("org.sqlite.JDBC");  
         connection = DriverManager.getConnection("jdbc:sqlite:db");
         preparedStatement = connection.prepareStatement("SELECT item1, item2, item3 FROM menu WHERE can = ? AND id = ?");
         preparedStatement.setInt(1, can);
         preparedStatement.setInt(2, id);
         resultSet =  preparedStatement.executeQuery();
         ResultSetMetaData md = resultSet.getMetaData();
         columns = 3;//md.getColumnCount();
         for(int i = 1; i<=columns; i++) {
             columnNames.addElement(md.getColumnName(i));
         }
         while(resultSet.next()) {
             row = new Vector(columns);
             for (int i = 1; i<=columns; i++) {
                 row.addElement(resultSet.getObject(i));
             }
             data.addElement(row);
         }
         tablecall = true;
         return tablecall;
     }
     catch (Exception ex) 
     {  
         tablecall = false;
         ex.printStackTrace();  
     }
     finally 
     {  
         try 
         {  
             resultSet.close();  
             preparedStatement.close();  
             connection.close();  
         } 
         catch (Exception ex) 
         {  
             ex.printStackTrace();  
         }  
     }
    return tablecall;
}

我遵循了显示 JTable 的方式数据库中的表,但是我真的不知道如何从 JTable 中插入、更新和删除一行并在数据库中更新,然后刷新 JTable 以从新更新的数据库中显示。

我想添加一个“添加项目”按钮,然后它将弹出一个框架/窗口,其中包含要输入的字段,然后在弹出框架中单击“添加”后,JTable 和数据库将同时更新。

有人可以帮我吗?我迷路了..非常感谢你!


我仍然不清楚您的要求,但让我们开始尽可能多地回答:

Every JTable对象使用表模型对象来管理实际的表数据。表模型对象必须实现TableModel界面。但是,那DefaultTableModel它本身足以进行表数据交互。看看它是java doc更多细节。

但是,要检测表管理的数据的更改model对象,即model与 交往JTable实例需要注册到一个实现TableModelListener接口使用addTableModelListener()功能。侦听器将收到事件通知TableModelEvent e使用以下命令检查数据行中的更改以及更改的类型:

  • e.getFirstRow():返回更改的第一行的索引,包括由 指定的表头TableModelEvent.HEADER_ROW
  • e.getLastRow():最后一行发生变化
  • e.getType(): What happened to the changed cells:
    1. 如果数据行inserted: e.getType() == TableModelEvent.INSERT
    2. 如果数据行deleted: e.getType() == TableModelEvent.DELETE
    3. 如果数据行updated: e.getType() == TableModelEvent.UPDATE.

一个简短的例子:

model.addTableModelListener(new TableModelListener() {

     @Override
     public void tableChanged(TableModelEvent e) {
          int rowFirstIndex = e.getFirstRow();
          int rowLastIndex = e.getLastRow();

          DefaultTableModel model = (DefaultTableModel) e.getSource();
           if(e.getType()==TableModelEvent.UPDATE)
            {
                int updatedColIndex = e.getColumn();
                String updateColmn = table.getColumnName(updatedColIndex);
                String updatedValue = (String) model.getValueAt(rowFirstIndex, updatedColIndex);
                System.out.println("column: "+updateColmn+" value: "+updatedValue);
                updateDB(updateColmn, updatedValue);
            }

            else if(e.getType()==TableModelEvent.INSERT)
            {
             for(int i= rowFirstIndex; i <= rowLastIndex ; i++)  
              {   
                  Vector rowData = (Vector) model.getDataVector().get(i);

                  Map<String, String>dataMap = new HashMap<>();

                  for(int j=0; j < rowData.size() ; j++)
                    dataMap.put(table.getColumnName(j), (String) rowData.get(j));

                  InsertToDB(dataMap); // now it contains columndName corresponding to row value

              }
          }
         }
     });

编辑(根据您的评论) : I am getting [value1, value2, value3]. How do I then use this with my SQL statement?

如果您有兴趣将行值与列名映射,就像构建 SQL 查询语法的情况一样:vector包含维护的行数据column指数。那就是row.get(i)具有带有列索引的数据i。您可以使用table.getColumnName(i)获取索引处的列的名称i对应于索引处的行向量值i.

教程:

  1. 如何编写表模型监听器
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何从 (SQLite) 数据库加载的 JTable 中插入、更新和删除项目 的相关文章

  • Android 2.2 SDK - Droid X 相机活动无法正常完成

    我注意到我在 Droid X 上调用的默认相机活动与我的 Droid 和 Nexus One 上的默认相机活动看起来不同 在 Droid 和 Nexus One 上选择 确定 后 活动将完成 Droid X 有一个 完成 按钮 它将带您返回
  • Grails 2.3.0 自动重新加载不起作用

    我最近将我们的项目升级到 grails 2 3 0 一切工作正常 除了每当我更改代码时自动重新加载都无法工作的问题 这包括所有项目工件 控制器 域 服务 gsps css 和 javascript 文件 我的旧版本 grails 可以正常工
  • 无法使用maven编译java项目

    我正在尝试在 java 16 0 1 上使用 maven 构建 IntelliJ 项目 但它无法编译我的项目 尽管 IntelliJ 能够成功完成 在此之前 我使用maven编译了一个java 15项目 但我决定将所有内容更新到16 0 1
  • 为什么 java 编译器不报告 Intellij 中多播表达式的未经检查的强制转换警告?

    为什么下面的代码没有报告 Intellij IDEA 的未经检查的警告jdk 1 8 0 121自从Supplier
  • 无法在 Spring Boot 测试中模拟 persistenceContext

    我正在使用带有 Mockito 框架的 spring boot 测试来测试我的应用程序 存储库类 EntityManager 之一作为参考 我的班级如下所示 Repository Transactional Slf4j public cla
  • Firestore - RecycleView - 图像持有者

    我不知道如何编写图像的支架 我已经设置了 2 个文本 但我不知道图像的支架应该是什么样子 你能帮我告诉我图像的文字应该是什么样子才能正确显示吗 holder artistImage setImageResource model getArt
  • 记录骆驼路线

    我的项目中有几个 Camel 上下文 如果可能的话 我想以逆向工程方式记录路线 因为我们希望保持与上下文相关的文档最新 最好的方法是什么 我们倾向于预先实际设计路线 并使用来自EIP book http www eaipatterns co
  • 如何让spring为JdbcMetadataStore创建相应的schema?

    我想使用此处描述的 jdbc 元数据存储 https docs spring io spring integration docs 5 2 0 BUILD SNAPSHOT reference html jdbc html jdbc met
  • 如何将 android.net.Uri 转换为 java.net.URL? [复制]

    这个问题在这里已经有答案了 有没有办法从Uri to URL 我正在使用的库需要这个 它only接受一个URL但我需要在我的设备上使用图像 如果该方案的Uri is http or https new URL uri toString 应该
  • 在java中实现你自己的阻塞队列

    我知道这个问题之前已经被问过并回答过很多次了 但我只是无法根据互联网上找到的示例找出窍门 例如this http tutorials jenkov com java concurrency blocking queues html or t
  • Java 收集返回顶级项目的映射的嵌套流

    我有以下模型 class Item String name List
  • Cloudfoundry:如何组合两个运行时

    cloundfoundry 有没有办法结合两个运行时环境 我正在将 NodeJS 应用程序部署到 IBM Bluemix 现在 我还希望能够执行独立的 jar 文件 但应用程序失败 APP 0 bin sh 1 java not found
  • Spring Security OAuth2简单配置

    我有一个简单的项目 需要以下简单的配置 我有一个 密码 grant type 这意味着我可以提交用户名 密码 用户在登录表单中输入 并在成功时获得 access token 有了该 access token 我就可以请求 API 并获取用户
  • Dispatcher-servlet 无法映射到 websocket 请求

    我正在开发一个以Spring为主要框架的Java web应用程序 特别使用Spring core Spring mvc Spring security Spring data Spring websocket 像这样在 Spring 上下文
  • 如何通过 Inno Setup for NetBeans 使用自定义 .iss 文件

    我将 Inno Setup 5 与 NetBeans 8 一起使用 并且我已经能够创建一个安装程序来安装该应用程序C users username local appname 但是我希望将其安装在C Programfiles 我如何在 Ne
  • 如何在Java中正确删除数组[重复]

    这个问题在这里已经有答案了 我刚接触 Java 4 天 从我搜索过的教程来看 讲师们花费了大量精力来解释如何分配二维数组 例如 如下所示 Foo fooArray new Foo 2 3 但我还没有找到任何解释如何删除它们的信息 从内存的情
  • Java:拆箱整数时出现空指针异常?

    此代码导致空指针异常 我不知道为什么 private void setSiblings PhylogenyTree node Color color throws InvalidCellNumberException PhylogenyTr
  • Java的-XX:+UseMembar参数是什么

    我在各种地方 论坛等 看到这个参数 并且常见的答案是它有助于高并发服务器 尽管如此 我还是找不到 sun 的官方文档来解释它的作用 另外 它是Java 6中添加的还是Java 5中存在的 顺便说一句 许多热点虚拟机参数的好地方是这一页 ht
  • Hibernate 和可序列化实体

    有谁知道是否有一个框架能够从实体类中剥离 Hibernate 集合以使它们可序列化 我查看了 BeanLib 但它似乎只进行实体的深层复制 而不允许我为实体类中的集合类型指定实现映射 BeanLib 目前不适用于 Hibernate 3 5
  • 在android中跟踪FTP上传数据?

    我有一个运行 Android 的 FTP 系统 但我希望能够在上传时跟踪字节 这样我就可以在上传过程中更新进度条 安卓可以实现这个功能吗 现在 我正在使用org apache common net ftp我正在使用的代码如下 另外 我在 A

随机推荐

  • Polly 在重试时更改查询字符串

    我正在使用 NET 5 并希望使用 Polly 来更改重试时请求的查询字符串 背景 我的 IP 地址允许每分钟发出固定的请求配额 如果超出限制 我会收到特定的 4xx 状态代码 在本例中 我想添加一个查询字符串参数 key xxx来处理峰值
  • JTextArea位置,setBounds不起作用?

    我想要一个JTextArea在某个位置上 我尝试了几件事 比如使用不同的LayoutManagers no LayoutManager无论如何 setLayout null 等等 无论我做什么 似乎setBounds setLocation
  • magento 网站迁移后 CSS 不加载

    我按照描述的步骤将我的 magento 网站迁移到不同的服务器here 一切都很顺利 除了当我加载页面时 CSS 不会加载 而且我只是以纯文本形式获取页面 我使用 firebug 并注意到系统用于获取 CSS 文件的路径在 FTP 服务器中
  • 在 BST 中查找所有小于 x 的数字

    我该怎么做 我不确定什么时候才能停止 bst 搜索 如果树的每个节点都有一个字段numLeft它告诉你它的左子树中有多少个节点 也计算它自己 然后你可以这样做O log N 继续添加即可numLeft对于每个值小于的节点的全局结果变量x c
  • 如何将 char* 转换为 TCHAR[ ]? [复制]

    这个问题在这里已经有答案了 char stheParameterFileName argv 1 I m passing the file name as a parameter TCHAR szName 512 我怎样才能转换char to
  • 大 og:提要中的图像

    我注意到 Facebook 有两种不同的方式在用户的提要中显示带有图像的开放图谱故事 一种是带有小图像以及旁边的标题和描述 example 一张带有更大的图像 其下方有标题和描述 example 按照教程 我能够生成大图像 然而 现在我要离
  • VBA复制网站数据

    有人可以帮助我指出如何通过 VBA 将特定数据从网站复制到 Excel 工作表的正确方向吗 我尝试使用宏记录器和网络查询 但它不断显示错误脚本 并且黄色箭头没有出现在我想要复制的部分 这是我要复制的网站http etfdb com etf
  • @googlemaps/markerclusterer:如何设置 maxZoom?

    我试图弄清楚如何设置 maxZoom 属性 我找到了可接受的参数列表 new MarkerClusterer map markers algorithm renderer onClusterClick 所以 我不想实现我自己的算法 我觉得默
  • PyQt4 - 将文件拖放到 QPushButton 中

    我认为标题是相当不言自明的 我正在努力创建一个小型独立应用程序 要求用户将音频文件拖放到按钮上 然后使用文件路径等将文件与硬件上的相应按钮关联起来 我已经遵循了大量的小部件拖放教程 我的朋友也遵循了列表的拖放教程 但是我开始相信这不能为按钮
  • 在单个链表中的任意索引处插入新节点

    我将如何创建一个函数 允许我在链表中 的任何索引处插入新节点 这是结构 struct node int data struct node next 这是函数 注意只有一个双指针 索引和数据参数 void insertN struct nod
  • “填充无效且无法删除”-这段代码有什么问题吗?

    每次我运行这个并加密时 输出都是可变的 当我尝试解密时 我收到 填充无效且无法删除 已经和这个斗争了一两天了 我很茫然 private static string strIV abcdefghijklmnmo The initializat
  • Break D3 每个循环没有标志

    考虑以下代码 circle each function d code 我怎样才能打破循环 是否有一种自然的 D3 方法可以打破 every 循环 我的意思是没有标志如下 var flag false circle each function
  • 如何在 dplyr 中对将 NA 放在第一位进行排序? [复制]

    这个问题在这里已经有答案了 考虑以下示例 require tibble require dplyr set seed 42 tbl lt data frame id letters 1 10 val c runif 5 NA runif 4
  • 致命错误:找不到“Google_Auth_AssertionCredentials”类

    我正在尝试将旧的 google api 迁移到新的 api 这样我就可以获取 google 分析数据 我正在尝试与this示例 但它会引发此错误 致命错误 找不到类 Google Auth AssertionCredentials 示例 p
  • ReactJS中的渲染函数

    快问 我正在学习react js 当我们创建组件时 我们在渲染函数中提供要渲染的组件的 html 模板 到目前为止 我只看到了带有非常小的 html 片段的小组件 但我只是想知道如果我们有一个带有巨大 html 模板的组件会发生什么 有没有
  • Core 3.0 更新后 Azure 函数停止工作

    该代码在 Core 3 0 Preview7 版本中工作 但更新到 3 0 Azure 函数后开始出现错误 如果我尝试访问构建器服务对象 则会出现错误 也无法调试问题 还尝试更新 Microsoft Extensions Dependenc
  • 等待 HTML5 视频加载

    我有一个视频标签 当我让用户从数据库中的多个视频中进行选择时 我会动态更改其来源 问题是 当我更改 src 属性时 即使我告诉它 视频也不会加载 这是我的代码 video attr src my video value ogg video
  • 更改我的 jquery mobile 主题会更改我的 css 样式

    我在网站上创建了一个可折叠集 看起来与此类似 div style margin auto padding top 50px padding bottom 20px div h2 span style font size 16px font
  • BSD 套接字 - 如何使用非阻塞套接字?

    我正在尝试使用非阻塞 TCP 套接字 问题是他们仍然在阻止 代码如下 服务器代码 struct sockaddr name char buf 80 void set nonblock int socket int flags flags f
  • 如何从 (SQLite) 数据库加载的 JTable 中插入、更新和删除项目

    我目前有 2 个类 一类显示 GUI 一类是从数据库获取项目 我的代码如下 此代码用于在我的 GUI 中显示 JTable public void table if SOMR tableCall true this columnNames