我如何在数据库中存储entier jtable来检索它

时间:2014-06-28 22:39:02

标签: java sql swing

我正在使用java构建计费应用程序。在我的JTable中可能有 n 行数。如何将其压缩到数据库然后从那里检索它?

例如,假设有一个客户ABC,他们在此列表或帐单中有100个项目。如何将此100项和相关列字段(即完整的JTable)放在数据库的单个列中?

我正在使用MySQL。

JTable table = new JTable(row,column);
TableModel tm = table.getModel();
try
{
    ByteArrayOutputStream baos = new ByteArrayOutputStream();  
    ObjectOutputStream oos = new ObjectOutputStream(baos);  
    oos.writeObject(table.getModel());  
    oos.flush();  
    oos.close();  
    byte[] b = baos.toByteArray();  

    java.sql.Connection con=null;


    Class.forName("com.mysql.jdbc.Driver");
    con=DriverManager.getConnection("jdbc:mysql://localhost:3306/ankit","root","");
    java.sql.Statement stmt =con.createStatement();

    String maketable = "CREATE TABLE if not exists contacttable(Name Varchar(25),Position Varchar(20),Phone Varchar(20))";
    stmt.executeUpdate(maketable);

    System.out.print("table created ");
    //PreparedStatement pstmt = null; ;
    // pstmt.setBytes(1, b);
    PreparedStatement pstmt = (PreparedStatement) con.prepareStatement("INSERT INTO contacttable VALUES(?,?,?)");
    pstmt.setBytes(1, b);


    // . . . 

1 个答案:

答案 0 :(得分:1)

您可以通过循环读取JTable,然后编写SQL命令来将JTable存储在数据库中,例如:

List<String> Columns = new ArrayList();
for (int i = 0; i < jTable1.getColumnCount(); i++) {
     Columns.Add(jTable.GetModel.getColumnName(i));
}

并且

List<List<String>> Rows = new ArrayList();
for (int i = 0; i < jTable1.getRowCount(); i++) {
    List<String> Temp = new ArrayList();
    for (int x = 0; x < jTable1.getColumnCount(); x++) {
        Rows.Add(jTable.GetModel.getValueAt(i,x));
     }
}

然后创建您的SQL语句,如

StringBuilder sb = new StringBuilder();
sb.append("INSERT INTO ")
for (String s: Rows) {
  sb.Append(s).append(", ");
}
// and so on.

检索将是相同的,但相反。