如何从jtable插入数据库?

Posted

技术标签:

【中文标题】如何从jtable插入数据库?【英文标题】:how to insert database from jtable? 【发布时间】:2012-10-25 09:44:23 【问题描述】:

我有 2 列的 jtable,然后我想将它的值插入数据库;

我知道它可以用类似的东西来完成 ..

    int count=table.getRowCount();
for(int i=0;i<count;i++)
Object obj1 = table.getValueAt(i, 0);
Object obj2 = table.getValueAt(i, 1);

问题是.. getRowCount 不知道该行是否为空, 然后在数据库中,该空值仍将插入 (它会在数据库中生成我的自动增量值)

我的问题 如何从jtable插入数据库,但空行不会插入?

非常感谢您的任何帮助,

如果我要求太多,请给我一个处理空行的线索,

原谅我的英语

这是向数据库添加数据的错误方法

public void addToDatabase()
            for (int i=0;i<table.getRowCount();i++)

                //#####################################
                //maybe need something in here
                if(table.getValueAt(i, 0)==null||table.getValueAt(i, 1) ==null)
                    return;
                //and maybe need something not return, but to get the next row (Just.. maybe ...)    
                //#####################################

                else
                    try
                        Connection c = getCon("databasez");
                        PreparedStatement p = c.prepareStatement("INSERT INTO table_data VALUES (?,?)");
                        p.setString(1, table.getValueAt(i, 0).toString());
                        p.setFloat (Float.parseFloat(table.getValueAt(i, 1).toString()));
                        p.executeUpdate();
                        p.close();
                    catch(Exception e)
                        JOptionPane.showMessageDialog(this, "THERE WAS AN INVALID DATA");
                    
                    
                
    

【问题讨论】:

【参考方案1】:

假设您使用的是DefaultTableModel,则getValueAt() 返回的结果将是null,直到您编辑相应的单元格。

您还可以注册TableModelListener 以接收TableModelEvent,它可以告诉您的听众发生了什么变化。

private JTable table = new JTable(1, 2);
...
table.getModel().addTableModelListener(new TableModelListener() 

    @Override
    public void tableChanged(TableModelEvent e) 
        System.out.println(""
            + e.getType() + " "
            + e.getFirstRow() + " "
            + e.getLastRow() + " " 
            + e.getColumn());
    
);

【讨论】:

非常感谢您的回复..我每天都在想它,使用表模型侦听器来知道哪一行是有价值的..然后获取所有行有一个值可以插入数据库..它对我来说很复杂..但也许另一个不会觉得复杂。谢谢你的回答 有点复杂但是非常灵活。考虑打开一个 modal 对话框来收集数据以插入新行;收听TableModel 的更新;使用checkboxes 标记要删除的行等。 是的。已经使用了很多jdialog))..但是,最后..我完全按照你说的来使用..谢谢老兄..【参考方案2】:

也许它会帮助你。 http://www.exampledepot.com/egs/javax.swing.table/InsertRow.html

首先,我在这里只看到了 getData 方法,没有看到您调用的 insert 或类似方法,所以我认为代码与您所说的无关。

其次,你也可以学习搜索关于jtable的api。 如果您完全了解一个类的方法以及如何在一般情况下使用它,我认为您理解和使用它非常好。 这也可以提高您对类似事物的理解。 并且您将变得越来越强大,无需提问即可学习其他困难的东西。

这是我学习程序的选择。

【讨论】:

对不起很久了..我的地方停电了..(我需要搬到另一个地方T-T)对不起代码(我的坏〜,〜)..我已经改变了代码并添加我损坏的方法..【参考方案3】:
JAVA swing,SIMPLE WAY TO store jTable DATA in database


private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) // swing Button

 String name[] =new String[4]; // name is array and index 4 means no. of row 
 String age[]=new String[4]; //age is array and index 4 means no. of row  
//loop from 0 row to 4
for(int i=0;i<4;i++) 
 
 name[i]=table.getValueAt(i,0).toString(); // it get value from 0 row and 0 column
 age[i]=table.getValueAt(i,1).toString();  // it get value from 0 row and 1 column

//similarly for more column  

try

Class.forName("com.mysql.jdbc.Driver");
Connection con=DriverManager.getConnection("jdbc:mysql://localhost:3306/crm","root","");
Statement s1=con.createStatement();
int mc=s1.executeUpdate("insert into testtable(Name,Age) values('"+name[i]+"','"+age[i]+"')");



        catch(Exception ex)
        
            javax.swing.JOptionPane.showMessageDialog(null,ex.getMessage().toString());

        

【讨论】:

以上是关于如何从jtable插入数据库?的主要内容,如果未能解决你的问题,请参考以下文章

如何将数据(实际上是 Jtable 数据)添加到数据库中。有没有办法使用preparedstmt将对象插入数据库?

显式编写一个用于将数据插入 JTable Swing 的类

从java程序中向oracle中插入数据,为啥插入顺序总是不对

如何计算jtable中的数据并显示在我的gui底部

解释数据字符串并将其插入到 Java 中正确列位置的 JTable 中

从 jTable 更新 SQL Server 表