2010-08-12 43 views
0

我正在使用JDBC从两个表中查询MySQL数据库中的特定记录。jdbc - java - method query

我的MySQL查询样本是这样的:

SELECT 
r.name 
    , r.network 
    , r.namestring 
    , i.name 
    , r.rid 
    , i.id 
    , d.dtime 
    , d.ifInOctets 
FROM router AS r 
INNER JOIN interface AS i 
ON r.rid = i.rid 
INNER JOIN 1278993600_1_60 AS d 
ON i.id = d.id 
AND dtime BETWEEN 1279027200 AND 1279029000 
WHERE r.network = "ITPN" 
AND i.status = "active" 
WHERE i.id BETWEEN 1418 AND 1518 

现在是有可能对我来说,添加所有我需要的特定记录:

r.name 
, r.network 
, r.namestring 
, i.name 
, r.rid 
, i.id 
, d.dtime 
, d.ifInOctets 

到一个数组中明确,并打印出来,以一个Excel表格?

我试着为3个表格创建不同的类别:r,i,d。然后,当我查询数据库时,我创建了对象并将它们添加到ArrayList s,我打印到另一张表。 (目标是将其打印到Excel工作表中)

但是这种方法正在让我存储和遍历数百万个对象。

是否有任何方法以更简单,更省时的方式动态添加所有记录并将其发送到工作表?

+0

你考虑CSV?你知道'LOAD DATA INFILE'吗? – BalusC 2010-08-12 14:37:27

回答

2

这将是类似的东西:

PreparedStatement stmt = cnt.prepareStatement("..."); 
try { 
    /* ... */ 
    ResultSetMetaData meta = stmt.getMetaData(); 
    Object row[] = new Object[meta.getColumnCount()]; 
    ResultSet rs = stmt.executeQuery(); 
    while (rs.next()) { 
     for (int i = 0; i < row.length; ++i) { 
      row[i] = rs.getObject(i+1); 
     } 
     processRow(row); 
    } 
} finally { 
    stmt.close(); 
} 
+0

嗨,谢谢。 是否有可能获得整个列在一个数组?我试图使用rs.getArray()函数没有运气。 此外,如果有多个数据ID映射到同一时间我可以用什么来跟踪它,因为每个ID将有不同的值列表? – JJunior 2010-08-12 14:05:40

+0

循环遍历结果集,并在每次迭代时将列值添加到'ArrayList'。 – BalusC 2010-08-12 14:36:18

+0

是的,但如果你有数百万行,我不会推荐它 – 2010-08-12 16:52:24