【发布时间】:2013-01-14 10:04:03
【问题描述】:
我目前正在做一个项目,我在表格中收集有关进程和 CPU 使用情况、电池使用情况等的大量信息。
例如,“日志表”包含“进程”、“Pid”、“电池”列,另一个表“CPU 表”包含“进程”、“CPU 时间”、“CPU 使用率”等列。程序同时写入所有这些表,因此每次读取在所有表中都有自己的行。
我创建了一个程序,它获取所有这些信息并为所有进程创建一个单独的 CSV 文件。在这些文件中,我希望获得所有四个表中关于该特定进程的所有信息。
我遇到的问题是,由于某种原因,当我尝试将信息带入时,其中一个表复制了另一个表中每条记录的记录。
如您所见,“日志表”中的信息写入正确,但“CPU 表”中的信息(最右侧 7 列)为“日志”的每个条目重复第一条记录,然后执行第二个和 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?任何帮助都将不胜感激,在这个程序上停留了数周无济于事,谷歌也没有提供帮助!
谢谢。
如果您需要任何信息或代码查看,请务必询问!
【问题讨论】:
-
这被标记为 PHP 有什么特别的原因吗?
-
您是否检查了数据库并查看记录是否在那里重复?
-
您应该改掉将 SQL 语句串在一起的习惯,改用准备好的语句。但这并不能解决您的问题...
-
检查您的查询是否返回您认为的内容。这可能是重复的来源,而不是 CSV。另外,我会像这样编写您的 where 子句:
log.Process = cpuinfo.Process AND log.Process = " + "'" + procs[i] + "'"这将确保您正在寻找的连接发生(更明显的是,这就是您想要做的)。然后您可以按您的输入进行过滤。 -
@JesanFafon 使用 sqlite 数据库浏览器,查询仍然混乱并重复记录,所以我认为这与 sql 语句的性质有关。重写没有帮助,但它更整洁,所以谢谢。此外,记录不会重复。