【问题标题】:how to insert database from jtable?如何从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");
                    }
                    }
                }
    }

【问题讨论】:

    标签: java swing jdbc jtable row


    【解决方案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());
    
            }
    }
    

    【讨论】:

      猜你喜欢
      • 2014-08-08
      • 1970-01-01
      • 2015-02-16
      • 2012-05-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-02-02
      • 1970-01-01
      相关资源
      最近更新 更多