【问题标题】:Is there a way how i can save severals of table data to mysql有没有办法可以将多个表数据保存到 mysql
【发布时间】:2019-09-28 00:51:23
【问题描述】:

我有一个 Java 表格,其中包含几行,但是当我保存数据时,只保存最后一行,其余的不保存。

下面是我的代码:

try {
    int rows=jTable1.getRowCount();
    for (int row = 0; row < rows; row++) {
        String qtys = (String) jTable1.getValueAt(row, 0);
        String name = (String) jTable1.getValueAt(row, 1);
        String commo = (String) jTable1.getValueAt(row, 2);
        String wei = (String) jTable1.getValueAt(row, 3);

        String queryco = "Insert into invoice(qtys,name,commo,wei) " +
                         "values ('"+qtys +"','"+name+"','"+commo+"','"+wei+"')";

        pst = conn.prepareStatement(queryco);
        pst.execute();     
    }
    JOptionPane.showMessageDialog(null, "Successfully Save");
}
catch (Exception e) {
    JOptionPane.showMessageDialog(this,e.getMessage());
}

【问题讨论】:

  • 有人能帮忙解决一下上面的问题吗
  • 嗨@janes,这个链接可能会帮助你“stackoverflow.com/questions/32755997/…”。看起来意图相同。
  • @Pearl 我试过了,但还是没有全部保存
  • 能否提供源文件。所以,我可以在本地试试
  • 您的表当前包含多少行?

标签: java swing jdbc


【解决方案1】:
package com.sample;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;

import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.table.DefaultTableModel;



public class JTableExample {

JFrame f; 
// Table 
JTable j; 


void process()  throws Exception
{ 
    // Frame initiallization 
    f = new JFrame(); 

    // Frame Title 
    f.setTitle("JTable Example"); 

    // Initializing the JTable 
    j = new JTable(); 
    j.setBounds(30, 40, 200, 300); 

    DefaultTableModel dtm = new DefaultTableModel(0, 0);

    // add header of the table
    String header[] = new String[] { "Prority", "Task Title", "Start",
    };

    // add header in table model     
    dtm.setColumnIdentifiers(header);

    for (int count = 1; count <= 1000; count++) {
        dtm.addRow(new Object[] { "data"+count, "data"+count, "data"+count});
    }

    j.setModel(dtm);


    // adding it to JScrollPane 
    JScrollPane sp = new JScrollPane(j); 
    f.add(sp); 
    // Frame Size 
    f.setSize(500, 200); 
    // Frame Visible = true 
    f.setVisible(true); 

    int rows=j.getRowCount();
    Class.forName("com.mysql.jdbc.Driver");

    Connection connection = 
    DriverManager.getConnection("jdbc:mysql://localhost:3306/sakila",
    "root","root");

    String sqlQuery = "Insert into sakila.student(name,dep,rollnumber) 
    values(?,?,?)";

    PreparedStatement  stmt = connection.prepareStatement(sqlQuery);
    try {
        for(int row = 0; row<rows; row++)
        {   
            System.out.println("Count:"+row);
            stmt.clearParameters();
            String name= (String) j.getValueAt(row, 0);
            String rollNumber = (String) j.getValueAt(row, 1);
            String dep = (String) j.getValueAt(row, 2);

            stmt.setString(1, name);
            stmt.setString(2, dep);
            stmt.setString(3, rollNumber);
            stmt.executeUpdate();
        }

    } catch(Exception e) {
        System.out.println(e.getMessage());
    }
    connection.close();
} 

// Driver  method 
public static void main(String[] args)  throws Exception
{   
    JTableExample jt = new JTableExample(); 
    jt.process();
} }

我使用了这段代码,我可以将 5000 行存储到数据库中而没有任何问题。所有数据都成功存储在数据库中。

【讨论】:

  • 优化:变​​量sqlQuerystmt可以在for循环之前创建。这样 stmt 只准备一次,你只需要调用 setter 和 executeUpdate()。此外,为确保所有参数设置正确,您可以在每次迭代开始时调用 stmt.clearParameters()。
  • 你能解释一下 OP 做错了什么,你如何解决这个问题?
  • @vincrichaud,我没听明白? Janes 没有分享任何源代码。上面的代码 sn -p 可以插入数据近 5000 条记录。我没有测试更多。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-10-27
  • 2011-04-12
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多