これは古い質問だと思いますが、ここでのほとんどの回答は要点を見逃しているようで、最初にオクターブ内からsqlite3クエリを実行できるかどうかではなく、正式なインターフェースを提供する特注のオクターブパッケージが存在するかどうかに焦点を当てています場所。
したがって、オクターブ経由で sqlite3にアクセスしようとしているだけの人に実用的な答えを提供すると思いました。実際、そうするのは些細なことです。私自身、何度もそうしてきました。
コマンドに対して適切なシステム コールを実行するだけですsqlite3
(明らかに、これはシステムに sqlite3 クライアントがインストールされていることを意味します)。これを行う最も便利な方法は、
sqlite3 database.sqlite < FileContainingQuery > OutputToFile
sqlite3 を呼び出すための構文。
出力を変更する sqlite3 コマンドをクエリと一緒に渡して、目的の形式で出力を取得できます。
たとえば、適切なスコアとカウントを csv 形式で返すテーブルから頻度チャートをプロットするおもちゃの例を次に示します (出力からヘッダーと実行時の統計情報が取り除かれます)。
pkg load io % required for csv2cell (used to collect results)
% Define database and Query
Database = '/absolute/path/to/database.sqlite';
Query = strcat(
% Options to sqlite3 modifying output format:
".timer off \n", % Prevents runtime stats printed at end of query
".headers off \n", % If you just want the output without headers
".mode csv \n", % Export as csv; use csv2cell to collect results
% actual query
"SELECT Scores, Counts \n",
"FROM Data; \n" % (Don't forget the semicolon!)
);
% Create temporary files to hold query and results
QueryFile = tempname() ; QueryFId = fopen( QueryFile, 'w' );
fprintf( QueryFId, Query ); fclose( QueryFId);
ResultsFile = tempname();
% Run query
Cmd = sprintf( 'sqlite3 "%s" < "%s" > "%s"', Database, QueryFile, ResultsFile );
[Status, Output] = system( Cmd );
% Confirm query succeeded and if so collect Results
% in a cell array and clean up temp files.
if Status != 0, delete( QueryFile, ResultsFile ); error("Query Failed");
else, Results = csv2cell( ResultsFile ); delete( QueryFile, ResultsFile );
end
% Process Results
Results = cell2mat( Results );
Scores = Results(:, 1); Counts = Results(:, 2);
BarChart = bar( Scores, Counts, 0.7 ); % ... etc
ほら、ほら