diff --git a/Core/src/org/sleuthkit/autopsy/datamodel/AbstractAbstractFileNode.java b/Core/src/org/sleuthkit/autopsy/datamodel/AbstractAbstractFileNode.java index 1538f6ebb3..a6b5ca57a1 100644 --- a/Core/src/org/sleuthkit/autopsy/datamodel/AbstractAbstractFileNode.java +++ b/Core/src/org/sleuthkit/autopsy/datamodel/AbstractAbstractFileNode.java @@ -28,6 +28,7 @@ import org.sleuthkit.datamodel.AbstractFile; import org.sleuthkit.datamodel.BlackboardArtifact; import org.sleuthkit.datamodel.BlackboardAttribute; import org.sleuthkit.datamodel.SleuthkitCase; +import org.sleuthkit.datamodel.SleuthkitCase.CaseDbQuery; import org.sleuthkit.datamodel.TskCoreException; /** @@ -228,40 +229,33 @@ public abstract class AbstractAbstractFileNode extends A } @SuppressWarnings("deprecation") private static String getHashSetHitsForFile(AbstractFile content) { - ResultSet rs = null; String strList = ""; SleuthkitCase skCase = content.getSleuthkitCase(); long objId = content.getId(); - try { - int setNameId = BlackboardAttribute.ATTRIBUTE_TYPE.TSK_SET_NAME.getTypeID(); - int artId = BlackboardArtifact.ARTIFACT_TYPE.TSK_HASHSET_HIT.getTypeID(); + int setNameId = BlackboardAttribute.ATTRIBUTE_TYPE.TSK_SET_NAME.getTypeID(); + int artId = BlackboardArtifact.ARTIFACT_TYPE.TSK_HASHSET_HIT.getTypeID(); - String query = "SELECT value_text,blackboard_attributes.artifact_id,attribute_type_id " //NON-NLS - + "FROM blackboard_attributes,blackboard_artifacts WHERE " //NON-NLS - + "attribute_type_id=" + setNameId //NON-NLS - + " AND blackboard_attributes.artifact_id=blackboard_artifacts.artifact_id" //NON-NLS - + " AND blackboard_artifacts.artifact_type_id=" + artId //NON-NLS - + " AND blackboard_artifacts.obj_id=" + objId; //NON-NLS - rs = skCase.runQuery(query); + String query = "SELECT value_text,blackboard_attributes.artifact_id,attribute_type_id " //NON-NLS + + "FROM blackboard_attributes,blackboard_artifacts WHERE " //NON-NLS + + "attribute_type_id=" + setNameId //NON-NLS + + " AND blackboard_attributes.artifact_id=blackboard_artifacts.artifact_id" //NON-NLS + + " AND blackboard_artifacts.artifact_type_id=" + artId //NON-NLS + + " AND blackboard_artifacts.obj_id=" + objId; //NON-NLS + + try (CaseDbQuery dbQuery = skCase.executeQuery(query)) { + ResultSet resultSet = dbQuery.getResultSet(); int i = 0; - while (rs.next()) { + while (resultSet.next()) { if (i++ > 0) { strList += ", "; } - strList += rs.getString("value_text"); //NON-NLS - } - } catch (SQLException ex) { - logger.log(Level.WARNING, "SQL Exception occurred: ", ex); //NON-NLS - } finally { - if (rs != null) { - try { - skCase.closeRunQuery(rs); - } catch (SQLException ex) { - logger.log(Level.WARNING, "Error closing result set after getting hashset hits", ex); //NON-NLS - } + strList += resultSet.getString("value_text"); //NON-NLS } + } catch (TskCoreException | SQLException ex) { + logger.log(Level.WARNING, "Error getting hashset hits: ", ex); //NON-NLS } + return strList; } diff --git a/Core/src/org/sleuthkit/autopsy/datamodel/EmailExtracted.java b/Core/src/org/sleuthkit/autopsy/datamodel/EmailExtracted.java index 3d8df28987..4f59c3a52b 100644 --- a/Core/src/org/sleuthkit/autopsy/datamodel/EmailExtracted.java +++ b/Core/src/org/sleuthkit/autopsy/datamodel/EmailExtracted.java @@ -44,6 +44,8 @@ import org.sleuthkit.autopsy.ingest.ModuleDataEvent; import org.sleuthkit.datamodel.BlackboardArtifact; import org.sleuthkit.datamodel.BlackboardAttribute; import org.sleuthkit.datamodel.SleuthkitCase; +import org.sleuthkit.datamodel.SleuthkitCase.CaseDbQuery; +import org.sleuthkit.datamodel.TskCoreException; import org.sleuthkit.datamodel.TskException; /** @@ -95,18 +97,19 @@ public class EmailExtracted implements AutopsyVisitableItem { return; } - try { - int artId = BlackboardArtifact.ARTIFACT_TYPE.TSK_EMAIL_MSG.getTypeID(); - int pathAttrId = BlackboardAttribute.ATTRIBUTE_TYPE.TSK_PATH.getTypeID(); - String query = "SELECT value_text,blackboard_attributes.artifact_id,attribute_type_id " //NON-NLS - + "FROM blackboard_attributes,blackboard_artifacts WHERE " //NON-NLS - + "attribute_type_id=" + pathAttrId //NON-NLS - + " AND blackboard_attributes.artifact_id=blackboard_artifacts.artifact_id" //NON-NLS - + " AND blackboard_artifacts.artifact_type_id=" + artId; //NON-NLS - ResultSet rs = skCase.runQuery(query); - while (rs.next()) { - final String path = rs.getString("value_text"); //NON-NLS - final long artifactId = rs.getLong("artifact_id"); //NON-NLS + int artId = BlackboardArtifact.ARTIFACT_TYPE.TSK_EMAIL_MSG.getTypeID(); + int pathAttrId = BlackboardAttribute.ATTRIBUTE_TYPE.TSK_PATH.getTypeID(); + String query = "SELECT value_text,blackboard_attributes.artifact_id,attribute_type_id " //NON-NLS + + "FROM blackboard_attributes,blackboard_artifacts WHERE " //NON-NLS + + "attribute_type_id=" + pathAttrId //NON-NLS + + " AND blackboard_attributes.artifact_id=blackboard_artifacts.artifact_id" //NON-NLS + + " AND blackboard_artifacts.artifact_type_id=" + artId; //NON-NLS + + try (CaseDbQuery dbQuery = skCase.executeQuery(query)) { + ResultSet resultSet = dbQuery.getResultSet(); + while (resultSet.next()) { + final String path = resultSet.getString("value_text"); //NON-NLS + final long artifactId = resultSet.getLong("artifact_id"); //NON-NLS final Map parsedPath = parsePath(path); final String account = parsedPath.get(MAIL_ACCOUNT); final String folder = parsedPath.get(MAIL_FOLDER); @@ -123,10 +126,8 @@ public class EmailExtracted implements AutopsyVisitableItem { } messages.add(artifactId); } - skCase.closeRunQuery(rs); - - } catch (SQLException ex) { - logger.log(Level.WARNING, "Cannot initialize email extraction", ex); //NON-NLS + } catch (TskCoreException | SQLException ex) { + logger.log(Level.WARNING, "Cannot initialize email extraction: ", ex); //NON-NLS } } diff --git a/Core/src/org/sleuthkit/autopsy/datamodel/HashsetHits.java b/Core/src/org/sleuthkit/autopsy/datamodel/HashsetHits.java index ce3d5ba144..f893c1e5b3 100644 --- a/Core/src/org/sleuthkit/autopsy/datamodel/HashsetHits.java +++ b/Core/src/org/sleuthkit/autopsy/datamodel/HashsetHits.java @@ -46,6 +46,8 @@ import org.sleuthkit.datamodel.BlackboardArtifact; import org.sleuthkit.datamodel.BlackboardArtifact.ARTIFACT_TYPE; import org.sleuthkit.datamodel.BlackboardAttribute.ATTRIBUTE_TYPE; import org.sleuthkit.datamodel.SleuthkitCase; +import org.sleuthkit.datamodel.SleuthkitCase.CaseDbQuery; +import org.sleuthkit.datamodel.TskCoreException; import org.sleuthkit.datamodel.TskException; /** @@ -99,35 +101,28 @@ public class HashsetHits implements AutopsyVisitableItem { return; } - ResultSet rs = null; - try { - int setNameId = ATTRIBUTE_TYPE.TSK_SET_NAME.getTypeID(); - int artId = ARTIFACT_TYPE.TSK_HASHSET_HIT.getTypeID(); - String query = "SELECT value_text,blackboard_attributes.artifact_id,attribute_type_id " //NON-NLS - + "FROM blackboard_attributes,blackboard_artifacts WHERE " //NON-NLS - + "attribute_type_id=" + setNameId //NON-NLS - + " AND blackboard_attributes.artifact_id=blackboard_artifacts.artifact_id" //NON-NLS - + " AND blackboard_artifacts.artifact_type_id=" + artId; //NON-NLS - rs = skCase.runQuery(query); - while (rs.next()) { - String setName = rs.getString("value_text"); //NON-NLS - long artifactId = rs.getLong("artifact_id"); //NON-NLS + int setNameId = ATTRIBUTE_TYPE.TSK_SET_NAME.getTypeID(); + int artId = ARTIFACT_TYPE.TSK_HASHSET_HIT.getTypeID(); + String query = "SELECT value_text,blackboard_attributes.artifact_id,attribute_type_id " //NON-NLS + + "FROM blackboard_attributes,blackboard_artifacts WHERE " //NON-NLS + + "attribute_type_id=" + setNameId //NON-NLS + + " AND blackboard_attributes.artifact_id=blackboard_artifacts.artifact_id" //NON-NLS + + " AND blackboard_artifacts.artifact_type_id=" + artId; //NON-NLS + + try (CaseDbQuery dbQuery = skCase.executeQuery(query)) { + ResultSet resultSet = dbQuery.getResultSet(); + while (resultSet.next()) { + String setName = resultSet.getString("value_text"); //NON-NLS + long artifactId = resultSet.getLong("artifact_id"); //NON-NLS if (!hashSetHitsMap.containsKey(setName)) { hashSetHitsMap.put(setName, new HashSet()); } hashSetHitsMap.get(setName).add(artifactId); } - } catch (SQLException ex) { + } catch (TskCoreException | SQLException ex) { logger.log(Level.WARNING, "SQL Exception occurred: ", ex); //NON-NLS - } finally { - if (rs != null) { - try { - skCase.closeRunQuery(rs); - } catch (SQLException ex) { - logger.log(Level.WARNING, "Error closing result set after getting hashset hits", ex); //NON-NLS - } - } - } + } + setChanged(); notifyObservers(); } diff --git a/Core/src/org/sleuthkit/autopsy/datamodel/InterestingHits.java b/Core/src/org/sleuthkit/autopsy/datamodel/InterestingHits.java index db59b49004..76e9c1c836 100644 --- a/Core/src/org/sleuthkit/autopsy/datamodel/InterestingHits.java +++ b/Core/src/org/sleuthkit/autopsy/datamodel/InterestingHits.java @@ -47,6 +47,7 @@ import org.sleuthkit.autopsy.ingest.ModuleDataEvent; import org.sleuthkit.datamodel.BlackboardArtifact; import org.sleuthkit.datamodel.BlackboardAttribute; import org.sleuthkit.datamodel.SleuthkitCase; +import org.sleuthkit.datamodel.SleuthkitCase.CaseDbQuery; import org.sleuthkit.datamodel.TskCoreException; @@ -94,36 +95,27 @@ public class InterestingHits implements AutopsyVisitableItem { return; } - ResultSet rs = null; - try { - int setNameId = BlackboardAttribute.ATTRIBUTE_TYPE.TSK_SET_NAME.getTypeID(); - int artId = artType.getTypeID(); - String query = "SELECT value_text,blackboard_attributes.artifact_id,attribute_type_id " //NON-NLS - + "FROM blackboard_attributes,blackboard_artifacts WHERE " //NON-NLS - + "attribute_type_id=" + setNameId //NON-NLS - + " AND blackboard_attributes.artifact_id=blackboard_artifacts.artifact_id" //NON-NLS - + " AND blackboard_artifacts.artifact_type_id=" + artId; //NON-NLS - rs = skCase.runQuery(query); - while (rs.next()) { - String value = rs.getString("value_text"); //NON-NLS - long artifactId = rs.getLong("artifact_id"); //NON-NLS + int setNameId = BlackboardAttribute.ATTRIBUTE_TYPE.TSK_SET_NAME.getTypeID(); + int artId = artType.getTypeID(); + String query = "SELECT value_text,blackboard_attributes.artifact_id,attribute_type_id " //NON-NLS + + "FROM blackboard_attributes,blackboard_artifacts WHERE " //NON-NLS + + "attribute_type_id=" + setNameId //NON-NLS + + " AND blackboard_attributes.artifact_id=blackboard_artifacts.artifact_id" //NON-NLS + + " AND blackboard_artifacts.artifact_type_id=" + artId; //NON-NLS + + try (CaseDbQuery dbQuery = skCase.executeQuery(query)) { + ResultSet resultSet = dbQuery.getResultSet(); + while (resultSet.next()) { + String value = resultSet.getString("value_text"); //NON-NLS + long artifactId = resultSet.getLong("artifact_id"); //NON-NLS if (!interestingItemsMap.containsKey(value)) { interestingItemsMap.put(value, new HashSet<>()); } interestingItemsMap.get(value).add(artifactId); } - } catch (SQLException ex) { + } catch (TskCoreException | SQLException ex) { logger.log(Level.WARNING, "SQL Exception occurred: ", ex); //NON-NLS } - finally { - if (rs != null) { - try { - skCase.closeRunQuery(rs); - } catch (SQLException ex) { - logger.log(Level.WARNING, "Error closing result set after getting artifacts", ex); //NON-NLS - } - } - } } } diff --git a/Core/src/org/sleuthkit/autopsy/datamodel/KeywordHits.java b/Core/src/org/sleuthkit/autopsy/datamodel/KeywordHits.java index 310a109c7b..d1e7bce138 100644 --- a/Core/src/org/sleuthkit/autopsy/datamodel/KeywordHits.java +++ b/Core/src/org/sleuthkit/autopsy/datamodel/KeywordHits.java @@ -46,6 +46,7 @@ import org.sleuthkit.datamodel.AbstractFile; import org.sleuthkit.datamodel.BlackboardArtifact; import org.sleuthkit.datamodel.BlackboardAttribute; import org.sleuthkit.datamodel.SleuthkitCase; +import org.sleuthkit.datamodel.SleuthkitCase.CaseDbQuery; import org.sleuthkit.datamodel.TskCoreException; import org.sleuthkit.datamodel.TskException; @@ -163,24 +164,24 @@ public class KeywordHits implements AutopsyVisitableItem { return; } - ResultSet rs = null; - try { - int setId = BlackboardAttribute.ATTRIBUTE_TYPE.TSK_SET_NAME.getTypeID(); - int wordId = BlackboardAttribute.ATTRIBUTE_TYPE.TSK_KEYWORD.getTypeID(); - int regexId = BlackboardAttribute.ATTRIBUTE_TYPE.TSK_KEYWORD_REGEXP.getTypeID(); - int artId = BlackboardArtifact.ARTIFACT_TYPE.TSK_KEYWORD_HIT.getTypeID(); - String query = "SELECT blackboard_attributes.value_text,blackboard_attributes.artifact_id," //NON-NLS - + "blackboard_attributes.attribute_type_id FROM blackboard_attributes,blackboard_artifacts WHERE " //NON-NLS - + "(blackboard_attributes.artifact_id=blackboard_artifacts.artifact_id AND " //NON-NLS - + "blackboard_artifacts.artifact_type_id=" + artId //NON-NLS - + ") AND (attribute_type_id=" + setId + " OR " //NON-NLS - + "attribute_type_id=" + wordId + " OR " //NON-NLS - + "attribute_type_id=" + regexId + ")"; //NON-NLS - rs = skCase.runQuery(query); - while (rs.next()) { - String value = rs.getString("value_text"); //NON-NLS - long artifactId = rs.getLong("artifact_id"); //NON-NLS - long typeId = rs.getLong("attribute_type_id"); //NON-NLS + int setId = BlackboardAttribute.ATTRIBUTE_TYPE.TSK_SET_NAME.getTypeID(); + int wordId = BlackboardAttribute.ATTRIBUTE_TYPE.TSK_KEYWORD.getTypeID(); + int regexId = BlackboardAttribute.ATTRIBUTE_TYPE.TSK_KEYWORD_REGEXP.getTypeID(); + int artId = BlackboardArtifact.ARTIFACT_TYPE.TSK_KEYWORD_HIT.getTypeID(); + String query = "SELECT blackboard_attributes.value_text,blackboard_attributes.artifact_id," //NON-NLS + + "blackboard_attributes.attribute_type_id FROM blackboard_attributes,blackboard_artifacts WHERE " //NON-NLS + + "(blackboard_attributes.artifact_id=blackboard_artifacts.artifact_id AND " //NON-NLS + + "blackboard_artifacts.artifact_type_id=" + artId //NON-NLS + + ") AND (attribute_type_id=" + setId + " OR " //NON-NLS + + "attribute_type_id=" + wordId + " OR " //NON-NLS + + "attribute_type_id=" + regexId + ")"; //NON-NLS + + try (CaseDbQuery dbQuery = skCase.executeQuery(query)) { + ResultSet resultSet = dbQuery.getResultSet(); + while (resultSet.next()) { + String value = resultSet.getString("value_text"); //NON-NLS + long artifactId = resultSet.getLong("artifact_id"); //NON-NLS + long typeId = resultSet.getLong("attribute_type_id"); //NON-NLS if (!artifactIds.containsKey(artifactId)) { artifactIds.put(artifactId, new LinkedHashMap()); } @@ -188,17 +189,10 @@ public class KeywordHits implements AutopsyVisitableItem { artifactIds.get(artifactId).put(typeId, value); } } - } catch (SQLException ex) { + } catch (TskCoreException | SQLException ex) { logger.log(Level.WARNING, "SQL Exception occurred: ", ex); //NON-NLS - } finally { - if (rs != null) { - try { - skCase.closeRunQuery(rs); - } catch (SQLException ex) { - logger.log(Level.WARNING, "Error closing result set after getting keyword hits", ex); //NON-NLS - } - } } + populateMaps(artifactIds); } } diff --git a/Core/src/org/sleuthkit/autopsy/datamodel/RecentFilesChildren.java b/Core/src/org/sleuthkit/autopsy/datamodel/RecentFilesChildren.java index ae07221d04..c57aef6bd0 100644 --- a/Core/src/org/sleuthkit/autopsy/datamodel/RecentFilesChildren.java +++ b/Core/src/org/sleuthkit/autopsy/datamodel/RecentFilesChildren.java @@ -29,6 +29,8 @@ import org.sleuthkit.autopsy.coreutils.Logger; import org.openide.nodes.ChildFactory; import org.openide.nodes.Node; import org.sleuthkit.datamodel.SleuthkitCase; +import org.sleuthkit.datamodel.SleuthkitCase.CaseDbQuery; +import org.sleuthkit.datamodel.TskCoreException; /** * @@ -82,21 +84,14 @@ import org.sleuthkit.datamodel.SleuthkitCase; @SuppressWarnings("deprecation") private long runTimeQuery(String query) { long result = 0; - ResultSet rs = null; - try { - rs = skCase.runQuery(query); - result = rs.getLong(1); - } catch (SQLException ex) { - logger.log(Level.WARNING, "Couldn't get recent files results", ex); //NON-NLS - } finally { - if (rs != null) { - try { - skCase.closeRunQuery(rs); - } catch (SQLException ex) { - logger.log(Level.WARNING, "Error closing result set after getting recent files results", ex); //NON-NLS - } - } + + try (CaseDbQuery dbQuery = skCase.executeQuery(query)) { + ResultSet resultSet = dbQuery.getResultSet(); + result = resultSet.getLong(1); + } catch (TskCoreException | SQLException ex) { + logger.log(Level.WARNING, "Couldn't get recent files results: ", ex); //NON-NLS } + return result; } } diff --git a/Core/src/org/sleuthkit/autopsy/report/ReportGenerator.java b/Core/src/org/sleuthkit/autopsy/report/ReportGenerator.java index df1d41b6e7..44f9707b2a 100644 --- a/Core/src/org/sleuthkit/autopsy/report/ReportGenerator.java +++ b/Core/src/org/sleuthkit/autopsy/report/ReportGenerator.java @@ -63,6 +63,7 @@ import org.sleuthkit.datamodel.BlackboardAttribute.ATTRIBUTE_TYPE; import org.sleuthkit.datamodel.Content; import org.sleuthkit.datamodel.ContentTag; import org.sleuthkit.datamodel.SleuthkitCase; +import org.sleuthkit.datamodel.SleuthkitCase.CaseDbQuery; import org.sleuthkit.datamodel.TskCoreException; import org.sleuthkit.datamodel.TskData; @@ -888,19 +889,22 @@ import org.sleuthkit.datamodel.TskData; */ @SuppressWarnings("deprecation") private void writeKeywordHits(List tableModules, String comment, HashSet tagNamesFilter) { - ResultSet listsRs = null; - try { - // Query for keyword lists-only so that we can tell modules what lists - // will exist for their index. - // @@@ There is a bug in here. We should use the tags in the below code - // so that we only report the lists that we will later provide with real - // hits. If no keyord hits are tagged, then we make the page for nothing. - listsRs = skCase.runQuery("SELECT att.value_text AS list " + //NON-NLS - "FROM blackboard_attributes AS att, blackboard_artifacts AS art " + //NON-NLS - "WHERE att.attribute_type_id = " + ATTRIBUTE_TYPE.TSK_SET_NAME.getTypeID() + " " + //NON-NLS - "AND art.artifact_type_id = " + ARTIFACT_TYPE.TSK_KEYWORD_HIT.getTypeID() + " " + //NON-NLS - "AND att.artifact_id = art.artifact_id " + //NON-NLS - "GROUP BY list"); //NON-NLS + + // Query for keyword lists-only so that we can tell modules what lists + // will exist for their index. + // @@@ There is a bug in here. We should use the tags in the below code + // so that we only report the lists that we will later provide with real + // hits. If no keyord hits are tagged, then we make the page for nothing. + String keywordListQuery = + "SELECT att.value_text AS list " + //NON-NLS + "FROM blackboard_attributes AS att, blackboard_artifacts AS art " + //NON-NLS + "WHERE att.attribute_type_id = " + ATTRIBUTE_TYPE.TSK_SET_NAME.getTypeID() + " " + //NON-NLS + "AND art.artifact_type_id = " + ARTIFACT_TYPE.TSK_KEYWORD_HIT.getTypeID() + " " + //NON-NLS + "AND att.artifact_id = art.artifact_id " + //NON-NLS + "GROUP BY list"; //NON-NLS + + try (CaseDbQuery dbQuery = skCase.executeQuery(keywordListQuery)) { + ResultSet listsRs = dbQuery.getResultSet(); List lists = new ArrayList<>(); while(listsRs.next()) { String list = listsRs.getString("list"); //NON-NLS @@ -919,36 +923,32 @@ import org.sleuthkit.datamodel.TskData; ARTIFACT_TYPE.TSK_KEYWORD_HIT.getDisplayName())); } } - catch (SQLException ex) { + catch (TskCoreException | SQLException ex) { errorList.add(NbBundle.getMessage(this.getClass(), "ReportGenerator.errList.failedQueryKWLists")); - logger.log(Level.SEVERE, "Failed to query keyword lists.", ex); //NON-NLS + logger.log(Level.SEVERE, "Failed to query keyword lists: ", ex); //NON-NLS return; - } finally { - if (listsRs != null) { - try { - skCase.closeRunQuery(listsRs); - } catch (SQLException ex) { - } - } } - ResultSet rs = null; - try { - // Query for keywords, grouped by list - rs = skCase.runQuery("SELECT art.artifact_id, art.obj_id, att1.value_text AS keyword, att2.value_text AS preview, att3.value_text AS list, f.name AS name, f.parent_path AS parent_path " + //NON-NLS - "FROM blackboard_artifacts AS art, blackboard_attributes AS att1, blackboard_attributes AS att2, blackboard_attributes AS att3, tsk_files AS f " + //NON-NLS - "WHERE (att1.artifact_id = art.artifact_id) " + //NON-NLS - "AND (att2.artifact_id = art.artifact_id) " + //NON-NLS - "AND (att3.artifact_id = art.artifact_id) " + //NON-NLS - "AND (f.obj_id = art.obj_id) " + //NON-NLS - "AND (att1.attribute_type_id = " + ATTRIBUTE_TYPE.TSK_KEYWORD.getTypeID() + ") " + //NON-NLS - "AND (att2.attribute_type_id = " + ATTRIBUTE_TYPE.TSK_KEYWORD_PREVIEW.getTypeID() + ") " + //NON-NLS - "AND (att3.attribute_type_id = " + ATTRIBUTE_TYPE.TSK_SET_NAME.getTypeID() + ") " + //NON-NLS - "AND (art.artifact_type_id = " + ARTIFACT_TYPE.TSK_KEYWORD_HIT.getTypeID() + ") " + //NON-NLS - "ORDER BY list, keyword, parent_path, name"); //NON-NLS + // Query for keywords, grouped by list + String keywordsQuery = + "SELECT art.artifact_id, art.obj_id, att1.value_text AS keyword, att2.value_text AS preview, att3.value_text AS list, f.name AS name, f.parent_path AS parent_path " + //NON-NLS + "FROM blackboard_artifacts AS art, blackboard_attributes AS att1, blackboard_attributes AS att2, blackboard_attributes AS att3, tsk_files AS f " + //NON-NLS + "WHERE (att1.artifact_id = art.artifact_id) " + //NON-NLS + "AND (att2.artifact_id = art.artifact_id) " + //NON-NLS + "AND (att3.artifact_id = art.artifact_id) " + //NON-NLS + "AND (f.obj_id = art.obj_id) " + //NON-NLS + "AND (att1.attribute_type_id = " + ATTRIBUTE_TYPE.TSK_KEYWORD.getTypeID() + ") " + //NON-NLS + "AND (att2.attribute_type_id = " + ATTRIBUTE_TYPE.TSK_KEYWORD_PREVIEW.getTypeID() + ") " + //NON-NLS + "AND (att3.attribute_type_id = " + ATTRIBUTE_TYPE.TSK_SET_NAME.getTypeID() + ") " + //NON-NLS + "AND (art.artifact_type_id = " + ARTIFACT_TYPE.TSK_KEYWORD_HIT.getTypeID() + ") " + //NON-NLS + "ORDER BY list, keyword, parent_path, name"; //NON-NLS + + try (CaseDbQuery dbQuery = skCase.executeQuery(keywordsQuery)) { + ResultSet resultSet = dbQuery.getResultSet(); + String currentKeyword = ""; String currentList = ""; - while (rs.next()) { + while (resultSet.next()) { // Check to see if all the TableReportModules have been canceled if (tableModules.isEmpty()) { break; @@ -962,16 +962,16 @@ import org.sleuthkit.datamodel.TskData; } // Get any tags that associated with this artifact and apply the tag filter. - HashSet uniqueTagNames = getUniqueTagNames(rs.getLong("artifact_id")); //NON-NLS + HashSet uniqueTagNames = getUniqueTagNames(resultSet.getLong("artifact_id")); //NON-NLS if(failsTagFilter(uniqueTagNames, tagNamesFilter)) { continue; } String tagsList = makeCommaSeparatedList(uniqueTagNames); - Long objId = rs.getLong("obj_id"); //NON-NLS - String keyword = rs.getString("keyword"); //NON-NLS - String preview = rs.getString("preview"); //NON-NLS - String list = rs.getString("list"); //NON-NLS + Long objId = resultSet.getLong("obj_id"); //NON-NLS + String keyword = resultSet.getString("keyword"); //NON-NLS + String preview = resultSet.getString("preview"); //NON-NLS + String list = resultSet.getString("list"); //NON-NLS String uniquePath = ""; try { @@ -1025,16 +1025,9 @@ import org.sleuthkit.datamodel.TskData; tableProgress.get(module).increment(); module.endDataType(); } - } catch (SQLException ex) { + } catch (TskCoreException | SQLException ex) { errorList.add(NbBundle.getMessage(this.getClass(), "ReportGenerator.errList.failedQueryKWs")); - logger.log(Level.SEVERE, "Failed to query keywords.", ex); //NON-NLS - } finally { - if (rs != null) { - try { - skCase.closeRunQuery(rs); - } catch (SQLException ex) { - } - } + logger.log(Level.SEVERE, "Failed to query keywords: ", ex); //NON-NLS } } @@ -1044,15 +1037,17 @@ import org.sleuthkit.datamodel.TskData; */ @SuppressWarnings("deprecation") private void writeHashsetHits(List tableModules, String comment, HashSet tagNamesFilter) { - ResultSet listsRs = null; - try { + String hashsetsQuery = + "SELECT att.value_text AS list " + //NON-NLS + "FROM blackboard_attributes AS att, blackboard_artifacts AS art " + //NON-NLS + "WHERE att.attribute_type_id = " + ATTRIBUTE_TYPE.TSK_SET_NAME.getTypeID() + " " + //NON-NLS + "AND art.artifact_type_id = " + ARTIFACT_TYPE.TSK_HASHSET_HIT.getTypeID() + " " + //NON-NLS + "AND att.artifact_id = art.artifact_id " + //NON-NLS + "GROUP BY list"; //NON-NLS + + try (CaseDbQuery dbQuery = skCase.executeQuery(hashsetsQuery)) { // Query for hashsets - listsRs = skCase.runQuery("SELECT att.value_text AS list " + //NON-NLS - "FROM blackboard_attributes AS att, blackboard_artifacts AS art " + //NON-NLS - "WHERE att.attribute_type_id = " + ATTRIBUTE_TYPE.TSK_SET_NAME.getTypeID() + " " + //NON-NLS - "AND art.artifact_type_id = " + ARTIFACT_TYPE.TSK_HASHSET_HIT.getTypeID() + " " + //NON-NLS - "AND att.artifact_id = art.artifact_id " + //NON-NLS - "GROUP BY list"); //NON-NLS + ResultSet listsRs = dbQuery.getResultSet(); List lists = new ArrayList<>(); while(listsRs.next()) { lists.add(listsRs.getString("list")); //NON-NLS @@ -1065,31 +1060,26 @@ import org.sleuthkit.datamodel.TskData; NbBundle.getMessage(this.getClass(), "ReportGenerator.progress.processing", ARTIFACT_TYPE.TSK_HASHSET_HIT.getDisplayName())); } - } catch (SQLException ex) { + } catch (TskCoreException | SQLException ex) { errorList.add(NbBundle.getMessage(this.getClass(), "ReportGenerator.errList.failedQueryHashsetLists")); - logger.log(Level.SEVERE, "Failed to query hashset lists.", ex); //NON-NLS + logger.log(Level.SEVERE, "Failed to query hashset lists: ", ex); //NON-NLS return; - } finally { - if (listsRs != null) { - try { - skCase.closeRunQuery(listsRs); - } catch (SQLException ex) { - } - } } - ResultSet rs = null; - try { + String hashsetHitsQuery = + "SELECT art.artifact_id, art.obj_id, att.value_text AS setname, f.name AS name, f.size AS size, f.parent_path AS parent_path " + //NON-NLS + "FROM blackboard_artifacts AS art, blackboard_attributes AS att, tsk_files AS f " + //NON-NLS + "WHERE (att.artifact_id = art.artifact_id) " + //NON-NLS + "AND (f.obj_id = art.obj_id) " + //NON-NLS + "AND (att.attribute_type_id = " + ATTRIBUTE_TYPE.TSK_SET_NAME.getTypeID() + ") " + //NON-NLS + "AND (art.artifact_type_id = " + ARTIFACT_TYPE.TSK_HASHSET_HIT.getTypeID() + ") " + //NON-NLS + "ORDER BY setname, parent_path, name, size"; //NON-NLS + + try (CaseDbQuery dbQuery = skCase.executeQuery(hashsetHitsQuery)) { // Query for hashset hits - rs = skCase.runQuery("SELECT art.artifact_id, art.obj_id, att.value_text AS setname, f.name AS name, f.size AS size, f.parent_path AS parent_path " + //NON-NLS - "FROM blackboard_artifacts AS art, blackboard_attributes AS att, tsk_files AS f " + //NON-NLS - "WHERE (att.artifact_id = art.artifact_id) " + //NON-NLS - "AND (f.obj_id = art.obj_id) " + //NON-NLS - "AND (att.attribute_type_id = " + ATTRIBUTE_TYPE.TSK_SET_NAME.getTypeID() + ") " + //NON-NLS - "AND (art.artifact_type_id = " + ARTIFACT_TYPE.TSK_HASHSET_HIT.getTypeID() + ") " + //NON-NLS - "ORDER BY setname, parent_path, name, size"); //NON-NLS + ResultSet resultSet = dbQuery.getResultSet(); String currentSet = ""; - while (rs.next()) { + while (resultSet.next()) { // Check to see if all the TableReportModules have been canceled if (tableModules.isEmpty()) { break; @@ -1103,15 +1093,15 @@ import org.sleuthkit.datamodel.TskData; } // Get any tags that associated with this artifact and apply the tag filter. - HashSet uniqueTagNames = getUniqueTagNames(rs.getLong("artifact_id")); //NON-NLS + HashSet uniqueTagNames = getUniqueTagNames(resultSet.getLong("artifact_id")); //NON-NLS if(failsTagFilter(uniqueTagNames, tagNamesFilter)) { continue; } String tagsList = makeCommaSeparatedList(uniqueTagNames); - Long objId = rs.getLong("obj_id"); //NON-NLS - String set = rs.getString("setname"); //NON-NLS - String size = rs.getString("size"); //NON-NLS + Long objId = resultSet.getLong("obj_id"); //NON-NLS + String set = resultSet.getString("setname"); //NON-NLS + String size = resultSet.getString("size"); //NON-NLS String uniquePath = ""; try { @@ -1152,16 +1142,9 @@ import org.sleuthkit.datamodel.TskData; tableProgress.get(module).increment(); module.endDataType(); } - } catch (SQLException ex) { + } catch (TskCoreException | SQLException ex) { errorList.add(NbBundle.getMessage(this.getClass(), "ReportGenerator.errList.failedQueryHashsetHits")); - logger.log(Level.SEVERE, "Failed to query hashsets hits.", ex); //NON-NLS - } finally { - if (rs != null) { - try { - skCase.closeRunQuery(rs); - } catch (SQLException ex) { - } - } + logger.log(Level.SEVERE, "Failed to query hashsets hits: ", ex); //NON-NLS } } @@ -1874,14 +1857,22 @@ import org.sleuthkit.datamodel.TskData; * @throws SQLException */ @SuppressWarnings("deprecation") - private HashSet getUniqueTagNames(long artifactId) throws SQLException { + private HashSet getUniqueTagNames(long artifactId) throws TskCoreException { HashSet uniqueTagNames = new HashSet<>(); - ResultSet tagNameRows = skCase.runQuery("SELECT display_name, artifact_id FROM tag_names AS tn, blackboard_artifact_tags AS bat " + //NON-NLS - "WHERE tn.tag_name_id = bat.tag_name_id AND bat.artifact_id = " + artifactId); //NON-NLS - while (tagNameRows.next()) { - uniqueTagNames.add(tagNameRows.getString("display_name")); //NON-NLS + + String query = "SELECT display_name, artifact_id FROM tag_names AS tn, blackboard_artifact_tags AS bat " + //NON-NLS + "WHERE tn.tag_name_id = bat.tag_name_id AND bat.artifact_id = " + artifactId; //NON-NLS + + try (CaseDbQuery dbQuery = skCase.executeQuery(query)) { + ResultSet tagNameRows = dbQuery.getResultSet(); + while (tagNameRows.next()) { + uniqueTagNames.add(tagNameRows.getString("display_name")); //NON-NLS + } } - skCase.closeRunQuery(tagNameRows); + catch (TskCoreException | SQLException ex) { + throw new TskCoreException("Error getting tag names for artifact: ", ex); + } + return uniqueTagNames; } diff --git a/Core/src/org/sleuthkit/autopsy/timeline/TimeLineController.java b/Core/src/org/sleuthkit/autopsy/timeline/TimeLineController.java index 91da1a556b..4cf3b20713 100644 --- a/Core/src/org/sleuthkit/autopsy/timeline/TimeLineController.java +++ b/Core/src/org/sleuthkit/autopsy/timeline/TimeLineController.java @@ -78,6 +78,7 @@ import org.sleuthkit.autopsy.timeline.zooming.DescriptionLOD; import org.sleuthkit.autopsy.timeline.zooming.EventTypeZoomLevel; import org.sleuthkit.autopsy.timeline.zooming.ZoomParams; import org.sleuthkit.datamodel.SleuthkitCase; +import org.sleuthkit.datamodel.SleuthkitCase.CaseDbQuery; import org.sleuthkit.datamodel.TskCoreException; /** Controller in the MVC design along with model = {@link FilteredEventsModel} @@ -357,13 +358,15 @@ public class TimeLineController { @SuppressWarnings("deprecation") private long getCaseLastArtifactID(final SleuthkitCase sleuthkitCase) { long caseLastArtfId = -1; - try (ResultSet runQuery = sleuthkitCase.runQuery("select Max(artifact_id) as max_id from blackboard_artifacts")) { // NON-NLS - while (runQuery.next()) { - caseLastArtfId = runQuery.getLong("max_id"); // NON-NLS + String query = "select Max(artifact_id) as max_id from blackboard_artifacts"; // NON-NLS + + try (CaseDbQuery dbQuery = sleuthkitCase.executeQuery(query)) { + ResultSet resultSet = dbQuery.getResultSet(); + while (resultSet.next()) { + caseLastArtfId = resultSet.getLong("max_id"); // NON-NLS } - sleuthkitCase.closeRunQuery(runQuery); - } catch (SQLException ex) { - Exceptions.printStackTrace(ex); + } catch (TskCoreException | SQLException ex) { + LOGGER.log(Level.SEVERE, "Error getting last artifact id: ", ex); // NON-NLS } return caseLastArtfId; }