我正在使用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);
// . . .
答案 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.
检索将是相同的,但相反。