Mathematica 10 ships with version 3.7.2 of the Xerial SQLite JDBC driver. Let me first verify your findings.
SQLiteVersion[] := Module[{v, c = OpenSQLConnection[JDBC["SQLite(Memory)", ""]]},
v = First@First@SQLExecute[c, "SELECT sqlite_version();"];
CloseSQLConnection[c];
v
];
SQLiteVersion[]
3.6.23.1
There are a few SQLite databases in that profiles directory:
$dir = "/Users/dillont/Library/Application Support/Firefox/Profiles/2bd5ni53.default";
dbs = FileNames[{"*.sqlite"}, $dir];
dbNames = FileBaseName /@ dbs
{"addons", "content-prefs", "cookies", "extensions", "formhistory", "healthreport", "permissions", "places", "signons", "webappsstore"}
Try opening connections to each of these:
connAssoc = AssociationThread[dbNames, OpenSQLConnection[JDBC["SQLite", #]] & /@ dbs];
readable = SQLConnectionUsableQ[#, {"SELECT name FROM sqlite_master WHERE type='table';",
{{_String} ..}}] & /@ connAssoc
<|addons->True,content-prefs->True,cookies->False,extensions->True,formhistory->True,healthreport->False,permissions->True,places->False,signons->True,webappsstore->False|>
Four of them don't work (including the cookies database). Probably they were added to the application more recently. Note here I've used the two-argument form of SQLConnectionUsableQ
to supply my own test. This is because the newer database will happily answer older drivers issuing the trivial query used by the default test (typically something like SELECT 1
), but it won't actually let you look at any tables.
I'll close these connections and then try the newer driver.
CloseSQLConnection /@ Keys[connAssoc];
The procedure here will be like adding a driver for any unbundled database, like Oracle (documentation; see especially the section on JDBC Connections). The short version is, I'm going to download a jar and put it on the classpath.
A new release of the SQLite JDBC driver dropped a few hours before this writing. There are a bunch of places I could put it; a reasonable choice is $UserBaseDirectory/Applications/SQLite/Java/
. I do that.
I can now restart my Mathematica session, or just restart Java:
<< JLink`;
ReinstallJava[];
If you wear a belt and suspenders, verify that the new driver is taking precedence over the old one on the classpath:
Flatten@StringCases[JavaClassPath[], ___ ~~ "sqlite" ~~ ___]
{"/Users/dillont/Library/Mathematica/Applications/SQLite/Java/sqlite-jdbc-3.8.6.jar",
"/Applications/Mathematica.app/SystemFiles/Links/DatabaseLink/Java/sqlite-jdbc-3.7.2.jar"}
And the version should have incremented:
SQLiteVersion[]
3.8.6
The installation looks good. Try opening and testing the connections again:
connAssoc = AssociationThread[dbNames, OpenSQLConnection[JDBC["SQLite", #]] & /@ dbs];
readable = SQLConnectionUsableQ[#, {"SELECT name FROM sqlite_master WHERE type='table';",
{{_String} ..}}] & /@ connAssoc
<|addons->True,content-prefs->True,cookies->True,extensions->True,
formhistory->True,healthreport->True,permissions->True,places->True,
signons->True,webappsstore->True|>
Better. Try getting some data out of the cookies database:
SQLTables[connAssoc["cookies"]]
{SQLTable[moz_cookies, TableType->TABLE]}
SQLColumns[connAssoc["cookies"], "moz_cookies"][[All, 1]][[All, -1]]
{id,baseDomain,appId,inBrowserElement,name,value,host,path,expiry,lastAccessed,
creationTime,isSecure,isHttpOnly}
SQLSelect[connAssoc["cookies"], "moz_cookies", {"id", "baseDomain", "name", "value", "expiry"}, "MaxRows"->5, "ShowColumnHeadings"->True]
{{id,baseDomain,name,value,expiry},{95,imrworldwide.com,V5,AStfNzpEBSg7EhozMRwjIyotCRsYAVInHlJJJQ__,1424978712},{96,imrworldwide.com,IMRID,US0MGYpsGysAACYAtzc,1424978712},{100,thedailybeast.com,_lsd0,17bbb925-5480-41e3-bd6c-f402972b2903,1514834714},{102,erovinmo.com,_lsx0,3f60d7b6-804a-11e2-865d-d3726fca0c4b,1519673114},{103,wunderground.com,DT,1361906715:18788:365-v5,1577836799}}
CloseSQLConnection /@ Keys[connAssoc];
OpenSQLConnection
andSQLExecute
have been around, and documented extensively, for several versions. As for the driver issue it might be something you need to ask Wolfram tech support. $\endgroup$