AndroidでSQLiteと接続したいです。
解決済
回答 1
投稿
- 評価
- クリップ 0
- VIEW 1,288
いろいろなサイトから、接続のコードをコピペしたり、参考書や、自分で考えるなどして、このようなコードになったのですが、エラーが多く動きそうにもありません。
やりたいこととしては、Todoリストアプリで、データベースにtitle(題名)、content(内容)、data(期限)を入力して、それを、data(期限)の新しい順にlistで表示するというものを作りたいです。
参考書や、ネットを見てもやることが多すぎて、どうすればいいのかがよく分からない状況です。このようなアプリをH2Databaseで作ったときは、こんなに手こずらなかったのですが、どなたか助けていただけないでしょうか?
どうぞよろしくお願いします。
package com.example.android.sample.memo;
import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
/**
* Created by endoutaichi on 2017/04/02.
*/
public class MemoDBHelper extends SQLiteOpenHelper {
//データベース名
private static final String DB_NAME = "memo.db";
//データベースバージョン
private static final int DB_VERSION = 1;
//テーブル名
private static final String TABLE_NAME = "memo";
//IDカラム
public static final String _ID = "_id";
//ファイル名カラム
public static final String TITLE = "title";
//内容
public static final String CONTENT = "content";
//作成日時
public static final String DATA = "date";
private SQLiteDatabase db = null;
private MemoDBHelper dbHelper = null; // DBHelper
protected Context context; // Context
public MemoDBHelper(Context context) {
super(context, DB_NAME, null, DB_VERSION);
}
public MemoDBHelper openDB() {
db = dbHelper.getWritableDatabase(); // DBの読み書き
return this;
}
/**
* DBを閉じる
* closeDB()
*/
public void closeDB() {
db.close(); // DBを閉じる
db = null;
}
@Override
public void onCreate(SQLiteDatabase db) {
String createTable = "CREATE TABLE" + TABLE_NAME + "(" +
_ID + " INTEGER PRIMARY KEY AUTOINCREMENT," +
TITLE + "TEXT," +
CONTENT + "TEXT," +
DATA + "INTEGER NOT NULL," +
")";
db.execSQL(createTable);
}
//インスタンスを作る
MemoDBHelper mDbHelper = new MemoDBHelper(getContext());
/**
* DBのレコードへ登録
* saveDB()
*
* @param title 題名
* @param content 本文
* @param data 締め切り
* @param id id
*/
public void saveDB(String id, String title, int content, int data) {
//ここには、メソッドを呼び出すときに、情報をtextから持ってきて引数で渡す。
db.beginTransaction(); // トランザクション開始
try {
ContentValues values = new ContentValues(); // ContentValuesでデータを設定していく
values.put(_ID, id);
values.put(TITLE, title);
values.put(CONTENT, content);
values.put(DATA, data);
SQLiteDatabase sdb = mDbHelper.getReadableDatabase();
// DBから取得部分
Cursor db = sdb.query("TABLE_NAME",
new String[]{"title","content","data"},
null,
null,
null,
null,
"values");
db.insert(TABLE_NAME, null, values); // レコードへ登録
db.setTransactionSuccessful(); // トランザクションへコミット
} catch (Exception e) {
e.printStackTrace();
} finally {
db.endTransaction(); // トランザクションの終了
}
}
/**
* DBのデータを取得
* getDB()
*
* @param columns String[] 取得するカラム名 nullの場合は全カラムを取得
* @return DBのデータ
*/
public Cursor cursor(String[] columns) {
// queryメソッド DBのデータを取得
// 第1引数:DBのテーブル名
// 第2引数:取得するカラム名
// 第3引数:選択条件(WHERE句)
// 第4引数:第3引数のWHERE句において?を使用した場合に使用
// 第5引数:集計条件(GROUP BY句)
// 第6引数:選択条件(HAVING句)
// 第7引数:ソート条件(ODERBY句)
while (cursor.moveToNext()) {
//対応する方のgetメソッドで取得する
//INTEGER型のカラム
long id = cursor.getLong(cursor.getColumnIndex(_ID));
//TEXT型のカラム
String content = cursor.getString(cursor.getColumnIndex(CONTENT));
String title = cursor.getString(cursor.getColumnIndex(TITLE));
String data = cursor.getString(cursor.getColumnIndex(DATA));
}
//必ずとじる
cursor.close();
return db.query(TABLE_NAME, columns, null, null, null, null, null);
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
//バージョン管理をここで行う
}
public Context getContext() {
return context;
}
}
SQLiteDatabase db = mDbHelper.getReadableDatabase();
// Define a projection that specifies which columns from the database
// you will actually use after this query.
String[] projection = {
TABLE_NAME._ID,
TABLE_NAME.TITLE,
TABLE_NAME.CONTENT,
TABLE_NAME.DATA
};
// Filter results WHERE "title" = 'My Title'
String selection = TABLE_NAME._ID + " = ?";
String[] selectionArgs = {"My Title"};
// How you want the results sorted in the resulting Cursor
String sortOrder =
TABLE_NAME.DATA + " DESC";
Cursor c = db.query(
TABLE_NAME, // The table to query// The columns to return
title, // The columns for the WHERE clause
content,
data,// The values for the WHERE clause
null, // don't group the rows
null, // don't filter by row groups
sortOrder // The sort order
);
-
気になる質問をクリップする
クリップした質問は、後からいつでもマイページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
クリップを取り消します
-
良い質問の評価を上げる
以下のような質問は評価を上げましょう
- 質問内容が明確
- 自分も答えを知りたい
- 質問者以外のユーザにも役立つ
評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。
質問の評価を上げたことを取り消します
-
評価を下げられる数の上限に達しました
評価を下げることができません
- 1日5回まで評価を下げられます
- 1日に1ユーザに対して2回まで評価を下げられます
質問の評価を下げる
teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。
- プログラミングに関係のない質問
- やってほしいことだけを記載した丸投げの質問
- 問題・課題が含まれていない質問
- 意図的に内容が抹消された質問
- 過去に投稿した質問と同じ内容の質問
- 広告と受け取られるような投稿
評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。
質問の評価を下げたことを取り消します
この機能は開放されていません
評価を下げる条件を満たしてません
質問の評価を下げる機能の利用条件
この機能を利用するためには、以下の事項を行う必要があります。
- 質問回答など一定の行動
-
メールアドレスの認証
メールアドレスの認証
-
質問評価に関するヘルプページの閲覧
質問評価に関するヘルプページの閲覧
check解決した方法
-1
あまりにも今の自分にとって解決するのが難しすぎるため、不適切な質問だと気付きました。
そのため、質問を取り消す方法がわからないため、自己解決とさせていただきます。すみません。
投稿
-
回答の評価を上げる
以下のような回答は評価を上げましょう
- 正しい回答
- わかりやすい回答
- ためになる回答
評価が高い回答ほどページの上位に表示されます。
-
回答の評価を下げる
下記のような回答は推奨されていません。
- 間違っている回答
- 質問の回答になっていない投稿
- スパムや攻撃的な表現を用いた投稿
評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。
15分調べてもわからないことは、teratailで質問しよう!
- ただいまの回答率 88.09%
- 質問をまとめることで、思考を整理して素早く解決
- テンプレート機能で、簡単に質問をまとめられる
質問への追記・修正、ベストアンサー選択の依頼
Clor
2017/04/06 09:09
>エラーが多く動きそうにもありません。 >ネットを見てもやることが多すぎて エラ―内容もわかりませんし、やることが多すぎてめんどくさいだけなら、助けようがないかと・・・
edoooooo
2017/04/06 09:11 編集
さすがにひどい質問内容でした。すみませんでした。このコードには、いろいろな機能が入っているので、手軽なサンプルコードを探してみます。