我有一个Java脚本,它正在运行SQL查询并将输出推送到CSV文件中。我创建的另一个JAR正在获取输出文件并触发一封电子邮件。
到目前为止,一切都已排序,但我需要帮助,如果SQL查询有一天返回空数据,因为我计划每天运行JAR文件来提取每天的差异数据,那么它不应该导出任何CSV文件,因此不会触发不必要的电子邮件。
这是我的脚本:
enter code here
con = DriverManager.getConnection(url, "USERNAME", "PASSWORD");
System.out.println("Connection established");
//Creating the Statement
Statement stmt = con.createStatement();
//Query to retrieve records
String query = "SELECT * FROM usr WHERE REGEXP_LIKE (usr_udf_costcenter, '^[a-zA-Z]*$') and USR_LOGIN not like '%DELETED%' and USR_display_name not like '%DELETED%' and USR_LOGIN not like '%TEST%'";
//Executing the query
ResultSet rs = stmt.executeQuery(query);
//Instantiating the CSVWriter class
//Writer fileWriter = new FileWriter("c:\data\output.txt", false); //overwrites file
String filepath = "/app/abvidmdv/temp/suvradip/";
String filename = filepath + "Invalid_Costcenters" + new SimpleDateFormat("(d-MMMM-yyyy)").format(new Date()) + ".csv";
CSVWriter writer = new CSVWriter(new FileWriter(filename, false));
ResultSetMetaData Mdata = rs.getMetaData();
Mdata.getColumnName(1);
//Writing data to a csv file
String line1[] = {Mdata.getColumnName(20), Mdata.getColumnName(6), Mdata.getColumnName(132), Mdata.getColumnName(129), Mdata.getColumnName(99)};
writer.writeNext(line1);
String data[] = new String[5];
while(rs.next()) {
data[0] = rs.getString("usr_login");
data[1] = rs.getString("usr_display_name");
data[2] = rs.getString("usr_udf_costcenter");
data[3] = rs.getString("usr_udf_costcentername");
data[4] = rs.getString("usr_create");
writer.writeNext(data);
}
//Flushing data from writer to file
writer.flush();
System.out.println("Data entered");
} catch (SQLException | IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} finally
{
try {
con.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
此脚本将数据导出到CSV。我认为我需要在这个类中添加一些条件,因为在电子邮件触发类中没有放置任何过滤器的意义。如果当天SQL的内容为空,请提供帮助并让我知道我需要在哪里添加什么条件。
在21世纪初,我们会运行两个不同的SQL查询来确定是否需要导出数据,然后只在有可用数据时导出。
在此之前,您可以运行查询来统计符合导出条件的记录数,如果记录数>0.
例如:
SQL 1: "SELECT count(*) FROM usr WHERE REGEXP_LIKE (usr_udf_costcenter, '^[a-zA-Z]*$') and USR_LOGIN not like '%DELETED%' and USR_display_name not like '%DELETED%' and USR_LOGIN not like '%TEST%'";
如果返回的记录超过0条,则执行以上的代码