やってみる

アウトプットすべく己を導くためのブログ。その試行錯誤すらたれ流す。

SQLite3のODBCドライバをインストールする

 LibreOfficeのBaseからSQLite3のDBファイルを開くために。

1. インストール

sudo apt -y install libsqlite3-dev unixodbc unixodbc-dev unixodbc-bin libsqliteodbc

2. ODBCドライバ設定

2-1. /etc/odbcinst.ini

$ sudo ODBCConfig
sudo: ODBCConfig: コマンドが見つかりません
$ cat /etc/odbcinst.ini 
[SQLite]
Description=SQLite ODBC Driver
Driver=libsqliteodbc.so
Setup=libsqliteodbc.so
UsageCount=1

[SQLite3]
Description=SQLite3 ODBC Driver
Driver=libsqlite3odbc.so
Setup=libsqlite3odbc.so
UsageCount=1

 libsqlite3odbc.soがフルパスでない。パスを調べる。

$ find /usr/lib | grep libsqliteodbc.so
(ない!)
$ find /usr/lib | grep libsqlite3odbc.so
/usr/lib/arm-linux-gnueabihf/odbc/libsqlite3odbc.so

 パスを上記のフルパスで修正する。

sudo vim /etc/odbcinst.ini
[SQLite3]
...
Driver=/usr/lib/arm-linux-gnueabihf/odbc/libsqlite3odbc.so
Setup=/usr/lib/arm-linux-gnueabihf/odbc/libsqlite3odbc.so
...

2-2. ~/odbc.ini

 ファイルがない。

$ cat ~/.odbc.ini
cat: /home/pi/.odbc.ini: そのようなファイルやディレクトリはありません

 手動で作成する。

vim ~/.odbc.ini
[mysqlitedb]
Description = mysqlitedb
Driver = SQLite3
Database = /home/pi/mytest.db
Timeout = 100000
StepAPI = No
LongNames = No
[JapaneseNames.db]
Description = mysqlitedb
Driver = SQLite3
Database = /tmp/work/JapaneseNames.db
Timeout = 100000
StepAPI = No
LongNames = No

3. テスト用DB作成

  • JapaneseNames.db
    • LastNames
    • FirstNames

create_lastnames.sql

create table LastNames(
    Id  primary key not null,
    Yomi    text not null, /* 名字の読み(ひらがな) */
    Kaki    text not null, /* 名字の表記(漢字) */
    UNIQUE(Yomi,Kaki)
);

create_firstnames.sql

create table FirstNames(
    Id  primary key not null,
    Yomi    text not null, /* 名字の読み(ひらがな) */
    Kaki    text not null, /* 名字の表記(漢字) */
    Sex     text check(Sex='m' or Sex='f' or Sex='c' or Sex='mc' or Sex='fc' or Sex='cm' or Sex='cf'), /* 性別 */
    UNIQUE(Yomi,Kaki)
);

insert_lastnames.sql

insert into LastNames(Id,Yomi,Kaki) values(1,'すずき','鈴木');
insert into LastNames(Id,Yomi,Kaki) values(2,'やまだ','山田');

insert into LastNames(Id,Yomi,Kaki) values(1,'すずき','鈴木');
insert into LastNames(Id,Yomi,Kaki) values(2,'やまだ','山田');
insert into LastNames(Id,Yomi,Kaki) values(last_insert_rowid(),'たなか','田中');

insert_firstnames.sql

insert into FirstNames(Id,Yomi,Kaki,Sex) values(1,'たろう','太郎','m');
insert into FirstNames(Id,Yomi,Kaki,Sex) values(2,'はなこ','花子','f');
sqlite3 JapaneseNames.db < create_lastnames.sql
sqlite3 JapaneseNames.db < create_firstnames.sql
sqlite3 JapaneseNames.db < insert_lastnames.sql
sqlite3 JapaneseNames.db < insert_firstnames.sql
$ sqlite3 JapaneseNames.db
sqlite> .headers on
sqlite> select * from LastNames;
Id|Yomi|Kaki
0|すずき|鈴木
1|やまだ|山田
sqlite> select * from FirstNames;
Id|Yomi|Kaki|Sex
0|たろう|太郎|m
1|はなこ|花子|f

4. LibreOffice BaseでDBファイルを開く

  1. LibreOffice Base を起動する
  2. 既存のデータベースに接続ラジオボタンをクリックする
  3. コンボボックスからODBCを選択する
    f:id:ytyaru:20200920124820p:plain
  4. 次へボタンをクリックする
  5. 参照ボタンをクリックする
    f:id:ytyaru:20200920124836p:plain
  6. JapaneseNames.dbをクリックしてOKボタンをクリックする
    f:id:ytyaru:20200920124915p:plain
  7. 接続のテストボタンをクリックする
    f:id:ytyaru:20200920124942p:plain
  8. 接続が正常に確立できました。ダイアログが出るのでOKボタンをクリックする
    f:id:ytyaru:20200920124952p:plain
  9. 次へボタンをクリックする
  10. データ登録の是非と保存後の処理を任意に指定する
  11. 完了ボタンをクリックする
    f:id:ytyaru:20200920125010p:plain
  12. 保存するファイルパスを指定して保存ボタンをクリックする
    f:id:ytyaru:20200920125117p:plain

 これでやっと開けた。長い……。

f:id:ytyaru:20200920125211p:plain

 テーブルの欄に作成した表LastNames, FirstNamesがあった。

 だが、ダブルクリックしてみるも、レコードがひとつもない……。2行ずつあるはずなのに。

f:id:ytyaru:20200920125224p:plain

f:id:ytyaru:20200920125233p:plain

 ならselect文を発行して確認してみよう。メニュー→ツールSQLをクリックする。

f:id:ytyaru:20200920125449p:plain

f:id:ytyaru:20200920125546p:plain

 あるやん。でも肝心のGUIでデータが見れないんだったら、Baseを使う意味も価値もない。

情報源

所感

 こんだけ苦労してよくわからんかった。Baseの使い方が直感的じゃないなら、いらない。さようなら。

前回まで

対象環境

$ uname -a
Linux raspberrypi 4.19.97-v7l+ #1294 SMP Thu Jan 30 13:21:14 GMT 2020 armv7l GNU/Linux