将多个表/列放入CSV文件中

时间:2013-01-30 14:37:38

标签: java android mysql sql

我目前正在做一个项目,我收集了大量有关流程和CPU使用情况,电池使用情况等信息的表格。

例如,“Log table”包含列'Process','Pid','Battery'和另一个表“CPU Table”,包含例如'Process','CPU Time','CPU Usage'。程序同时写入所有这些表,因此每个读数在所有表中都有自己的行。

我创建了一个程序,它可以获取所有这些信息,并为所有进程创建单独的CSV文件。在这些文件中,我希望获得所有四个表中有关该特定过程的所有信息。

我遇到的问题是,出于某种原因,当我尝试将信息输入时,其中一个表会复制另一个表中每条记录的记录。

problem

正如您所看到的,“日志表”中的信息正确写出,但来自“CPU表”(最右边的7列)的信息重复“Log”的每个条目的第一条记录,然后执行对于第二个以及Log的每个记录都是相同的。

Procs [i]包含所有唯一的进程名称。

目前,我使用的sql语句是基本代码:

String query = "SELECT * FROM log, cpuinfo WHERE log.Process = " + "'" + procs[i] + "'" + " AND cpuinfo.Process = " + "'" + procs[i] + "'";
                System.out.println(query);
                rs = sment.executeQuery(query);

                writer = new CSVWriter(new FileWriter(procs[i] + ".csv"), ',');
                //writer = new CSVWriter(procs[i] + ".csv");
                //System.out.println("Writing.....");



                //rs.beforeFirst();

                writer.writeAll(rs, true);
                //writer.

                writer.flush();

有谁可以看到程序为什么这样做并以这种方式编写CSV?任何帮助都会非常感激,被困在这个程序上几个星期现在无济于事,谷歌没有帮助!

感谢。

如果您需要任何信息或代码,请询问!

2 个答案:

答案 0 :(得分:2)

您在这里隐式执行两个表logcpuinfo的内部联接,您需要决定如何正确关联log中的一条记录与{{{1}中的一条记录。 1}}。您的查询有效地为cpuinfo的每个记录创建了一个结果记录,该记录与来自log的每个记录相结合,然后您的cpuinfo子句将该结果集限制为仅包含流程匹配。

这似乎不是你想要的;在我看来,您可能希望关联进程匹配的记录以及时间戳匹配。天真地看起来如下:

WHERE

但是,我相信你的解决方案实际上比天真地比较时间戳要复杂一些。看起来可能有一种方法可以将时间戳从一个表与另一个表进行匹配,但似乎相关的时间戳可能不相同。例如,SELECT * FROM log, cpuinfo WHERE log.Process = ? AND cpuinfo.Process = ? AND log.Timestamp = cpuinfo.Timestamp 中最早的时间戳看起来像26:04.2而不是log中的26:04.3。您需要根据应用程序逻辑决定将两个时间戳相互关联的方式。这会相应地影响您的cpuinfo条款。

答案 1 :(得分:0)

以下内容应该有效并删除重复的记录。

Select * FROM log, cpuinfo WHERE log.Process = cpuinfo.Process and      log.Process = ?