導入(SQLiteコマンド調査) … 準備編1

アプリ ソースコード家計簿アプリ

概要

 状態:学習中  閲覧数:2,262  投稿日:2013-07-08  更新日:2013-07-29
・「Androidアプリ作成日記」で、作成過程も含め、そのすべてを公開している

特徴
・全ソースコード掲載
・プロジェクトファイルを公開しているので、インポートするだけで利用可能
・データ保存にSQLite3利用

主な機能
・項目
・内訳
・金額
・カレンダー

注意事項
・制作中断した家計簿アプリのため、作りかけの部分等ではエラーも発生する

最終更新
・2011-12-17

感想
・無料でソースコード公開しているアプリとしては、「画面遷移」「DB連携」等している時点で、とても貴重
・「記事サンプルがアプリっぽくなくてがっかりしたことがある人」や「抜粋コードしか掲載されていないブログでは全体像が掴みづらい人」には最適かもしれない

導入まで

 閲覧数:367 投稿日:2013-07-08 更新日:2013-07-08

3種類


公開形式は3種類
1.ソースコード
2.apkファイル
3.プロジェクトファイル


1.ソースコード


今までのソースコードがほしい、という方がいたので、
ソースコードを公開したいと思います。javaファイルをtextファイルにしました
・おお! 素晴らしい
・早速ダウンロードしようとするも、動作させる自信がないため、一旦保留


2.apkファイル


apkファイルも公開したいと思います。
これをダウンロードすればAndroidで動くようです。
・おお! いいねー
・しかし、改めて調査したところ、「apkファイル」ではソースコード閲覧不可なことが分かり、見送り


3.プロジェクトファイル


[2011年12月17日追記]
なんかエラーが出るようですので、
プロジェクトファイルをのせます。
・おお! 神だわ
・早速、ダウンロード
・Eclipseでインポート後、起動すると、無事成功!


動作確認

 閲覧数:387 投稿日:2013-07-08 更新日:2013-07-08

謎のエラー


・早速、動作確認すると、謎のエラーに遭遇
予期せぬエラーに遭遇しました
・項目追加が出来ない
・理由は不明だが、恐らくDB連携が出来ていないのだろう、とこの時は判断
・一旦、利用を諦める

→後に原因判明(金額全角入力)
→半角へ変更したら無事動作


DB連携


・DB連携サンプルを探す
・こちらを試したところ、無事動作した
・てっきり、エミュレーターでDB連携するには、何か特別な操作が必要かな、と思っていたのだが、必ずしもそういうわけではないらしい

adb shell

 閲覧数:390 投稿日:2013-07-08 更新日:2013-07-08

adb shell


・DB連携させるために何か設定が必要ではないかと思い、ブログ全エントリーを読む
・すると「adb shell」起動させているエントリーを発見

adb とは?
・「Android Debug Bridge」の略称
・「Android SDK」 の 「platform-tools」 に含まれるツール

エミュレータをインストールしたフォルダのtoolsをPathに設定
・確認したところ、Pathは通していた
D:\Android\android-sdk\platform-tools;


エミュレータを使用している場合は、エミュレータ上の、
メニューボタンの「設定」⇒「アプリケーション」⇒「開発」で「USBデバッグ」のチェックをオンにします
・設定済だった


データベース名一覧


・「cd data/data/パッケージ名/databases」で移動後、「ls」
C:\Users\Administrator>adb shell

# cd data/data/com.fc2.blog98.andromaker.housekeepingbook/databases
cd data/data/com.fc2.blog98.andromaker.housekeepingbook/databases

# ls
ls
HousekeepingBook.db

・予想に反してDBは作成されているみたい


テーブル名表示


データベース内のテーブル名を表示
1.「sqlite3 データベース名」 … 対象DB指定
2.「.table」 … データベース内のテーブル名を表示
# sqlite3 HousekeepingBook.db
sqlite3 HousekeepingBook.db
SQLite version 3.5.9
Enter ".help" for instructions

sqlite> .table
.table
2013-7            2013-7-7          android_metadata  utiwake
2013-7-10         aaaa              item

・この時点では見方が分からなかった(横一列に見るのだとばかり思っていた)
・え? どれがテーブル名?
・「item」はカラム名?

・しばらく操作後、再度確認したら、ようやく理解できたよ
・横一列じゃなくて、全部がテーブル名なんだね
・日付を「テーブル名」にしたことなんてなかったから戸惑ったけども、日付ベースで管理していくのだから、これでいいのか
.tables
2013-7            2013-7-8          android_metadata
2013-7-10         2013-7-9          item
2013-7-7          aaaa              utiwake



テーブル内容表示


「select * from テーブル名で、テーブル内容表示
sqlite> select * from aaaa;
select * from aaaa;

sqlite> select * from item;
select * from item;
1|繝昴Ο繧キ繝」繝・
2|鬟イ鬟・

sqlite> select * from utiwake;
select * from utiwake;
1|譛・

2|繝代せ繧ソ
3|

sqlite> select * from android_metadata;
select * from android_metadata;
ja_JP

sqlite> select * from '2013-7';
select * from '2013-7';
1|繝昴Ο繧キ繝」繝л1690
2|繝昴Ο繧キ繝」繝л680
3|鬟イ鬟毫123

sqlite> select * from '2013-7-10';
select * from '2013-7-10';

sqlite> select * from '2013-7-9';
select * from '2013-7-9';

sqlite> select * from '2013-7-8';
select * from '2013-7-8';
1|繝昴Ο繧キ繝」繝л譛・
|1690

sqlite> select * from '2013-7-7';
select * from '2013-7-7';
1|繝昴Ο繧キ繝」繝л譛・
|680
2|鬟イ鬟毫繝代せ繧ソ|123


気が付いたこと
・カラム名は「''」で囲む(特に数字の場合は)
sqlite> select * from 2013-7;
select * from 2013-7;

SQL error: near "2013": syntax error

→「select * from '2013-7';」

・文字化け
・コマンドプロンプトの問題?

「adb shell」文字化け直そうとするも失敗

 閲覧数:589 投稿日:2013-07-08 更新日:2013-07-08

挫折


・文字化け対応に挑戦するも挫折
・修正を諦める
・「一度だけ表示に成功した」のだが、挙動不審すぎる。そんなの有りえないよね
・どういう条件の積み重ねで成功したのか、何度試しても再現できない
・「フォント変更」、「コマンドプロンプト再起動」「chcpで状態確認」、「バッチ試行」など、全て試してみたのに…
・もしかして「PC再起動」しなきゃダメとか?
・あるいは「Windows7」だから?
・「adb shell」?
・DBデータ自体を、「UTF-8」以外で処理してる?


明日のために


現在設定コード確認
chcp


UTF-8指定
chcp 65001

※「ラスターフォント」指定必須とされているが、文字化け解消されない

SHIFT-JIS
chcp 932


adb shell 2

 閲覧数:356 投稿日:2013-07-08 更新日:2013-07-08

テーブル設定


sqlite> .show
.show
    echo: off
 explain: off
 headers: off
    mode: list
nullvalue: ""
  output: stdout
separator: "|"
   width:



コマンド一覧


sqlite> .help
.help
.bail ON|OFF           Stop after hitting an error.  Default OFF
.databases             List names and files of attached databases
.dump ?TABLE? ...      Dump the database in an SQL text format
.echo ON|OFF           Turn command echo on or off
.exit                  Exit this program
.explain ON|OFF        Turn output mode suitable for EXPLAIN on or off.
.header(s) ON|OFF      Turn display of headers on or off
.help                  Show this message
.import FILE TABLE     Import data from FILE into TABLE
.indices TABLE         Show names of all indices on TABLE
.load FILE ?ENTRY?     Load an extension library
.mode MODE ?TABLE?     Set output mode where MODE is one of:
                        csv      Comma-separated values
                        column   Left-aligned columns.  (See .width)
                        html     HTML <table> code
                        insert   SQL insert statements for TABLE
                        line     One value per line
                        list     Values delimited by .separator string
                        tabs     Tab-separated values
                        tcl      TCL list elements
.nullvalue STRING      Print STRING in place of NULL values
.output FILENAME       Send output to FILENAME
.output stdout         Send output to the screen
.prompt MAIN CONTINUE  Replace the standard prompts
.quit                  Exit this program
.read FILENAME         Execute SQL in FILENAME
.schema ?TABLE?        Show the CREATE statements
.separator STRING      Change separator used by output mode and .import
.show                  Show the current values for various settings
.tables ?PATTERN?      List names of tables matching a LIKE pattern
.timeout MS            Try opening locked tables for MS milliseconds
.timer ON|OFF          Turn the CPU timer measurement on or off
.width NUM NUM ...     Set column widths for "column" mode



dumpデータ取得


・処理されているっぽいけど、どこに出力されるか不明
sqlite> .dump ?item?
.dump ?item?
BEGIN TRANSACTION;
COMMIT;


・違うやん。こうか
sqlite> .dump item
.dump item
BEGIN TRANSACTION;
CREATE TABLE item (_id integer primary key,Item text not null);
INSERT INTO "item" VALUES(1,'繝昴Ο繧キ繝」繝・);
INSERT INTO "item" VALUES(2,'鬟イ鬟・);
COMMIT;


・テーブル単位ではなくDB単位で取得する際は、DB名を指定するのではなく省略!
sqlite> .dump
.dump
BEGIN TRANSACTION;
CREATE TABLE android_metadata (locale TEXT);
INSERT INTO "android_metadata" VALUES('ja_JP');
CREATE TABLE aaaa (_id integer primary key,Item text not null,Utiwake text,Kingaku text);
CREATE TABLE '2013-7-7' (_id integer primary key,Item text not null,Utiwake text,Kingaku text);
INSERT INTO "2013-7-7" VALUES(1,'繝昴Ο繧キ繝」繝・,'譛・
','680');
INSERT INTO "2013-7-7" VALUES(2,'鬟イ鬟・,'繝代せ繧ソ','123');
CREATE TABLE '2013-7' (_id integer primary key,Item text not null,Kingaku text);
INSERT INTO "2013-7" VALUES(1,'繝昴Ο繧キ繝」繝・,'1690');
INSERT INTO "2013-7" VALUES(2,'繝昴Ο繧キ繝」繝・,'680');
INSERT INTO "2013-7" VALUES(3,'鬟イ鬟・,'123');
CREATE TABLE item (_id integer primary key,Item text not null);
INSERT INTO "item" VALUES(1,'繝昴Ο繧キ繝」繝・);
INSERT INTO "item" VALUES(2,'鬟イ鬟・);
CREATE TABLE utiwake (_id integer primary key,Utiwake text not null);
INSERT INTO "utiwake" VALUES(1,'譛・
');
INSERT INTO "utiwake" VALUES(2,'繝代せ繧ソ');
INSERT INTO "utiwake" VALUES(3,'');
CREATE TABLE '2013-7-10' (_id integer primary key,Item text not null,Utiwake text,Kingaku text);
CREATE TABLE '2013-7-8' (_id integer primary key,Item text not null,Utiwake text,Kingaku text);
INSERT INTO "2013-7-8" VALUES(1,'繝昴Ο繧キ繝」繝・,'譛・
','1690');
CREATE TABLE '2013-7-9' (_id integer primary key,Item text not null,Utiwake text,Kingaku text);
COMMIT;



dumpデータ出力失敗


ダンプは通常ファイルなどに対し行います。出力先を指定するオプションはありませんので、「.output」コマンドを使って出力先をstdoutからファイルに事前に変更しておき、その後でダンプを行って下さい

・ところが、実際に試すと出力先を指定できない
can't write
.output ./data/dump.txt
can't write to "./data/dump.txt"

.output c://output.txt
can't write to "c://output.txt"

.output /output.txt
can't write to "/output.txt"


指定できるが、出力先パスが不明
sqlite> .output output.txt
.output output.txt
sqlite> .dump
.dump

sqlite> .output androidoutput.txt
.output androidoutput.txt
sqlite> .dump
.dump

sqlite> .output c:dump.txt
.output c:dump.txt
sqlite> .dump
.dump

sqlite> .output C:\output.txt
.output C:\output.txt
sqlite> .dump
.dump

sqlite> .exit
.exit

# ls
ls
C:output.txt
c:dump.txt
androidoutput.txt
output.txt
HousekeepingBook.db

・コマンドプロンプトから「adb shell」遷移先の、Windows全体におけるパスがどこにあるかが不明
・「ls」でファイル存在は確認できるのが、実ファイルがどこにあるか不明
・環境によってパスが異なる?
・確認する方法?
・出力ファイル名で、Windows検索しても見つからないのは、どういうこと?
Android「adb shell」パスを知りたい
ローカルファイルの保存先について
・「C:\Users\Administrator\.android\avd\Android1.6.avd」これなの?


SQLite終了


.exit



動作確認(エラー発生箇所) … 準備編2



週間人気ページランキング / 5-12 → 5-18
順位 ページタイトル抜粋 アクセス数
アクセスが、ありませんでした! 0
2024/5/19 1:01 更新