たぼさんの部屋

いちょぼとのんびり

T102 SQLite

f:id:donsuka_kk:20121205020827p:plainf:id:donsuka_kk:20121204235102p:plain

Main.java

package com.example.t101_mysql;

import java.util.ArrayList;

import android.app.Activity;
import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.graphics.Canvas;
import android.graphics.Paint;
import android.os.Bundle;
import android.text.InputType;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.LinearLayout;
import android.widget.LinearLayout.LayoutParams;

/**
 * 入力値 double MySQLに格納
 * 
 * @author kamogashiratsuyoshi
 * 
 */
public class Main extends Activity {
	Context context;
	LinearLayout base;
	LinearLayout lInput;
	View mView;
	Paint paint;
	ArrayList<String> list = new ArrayList<String>();
	EditText et0, et1;
	// DB関連
	DatabaseHelper dbHelper;
	CharSequence[] dbCursor;

	@Override
	public void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);

		context = getApplicationContext();
		base = new LinearLayout(context);
		setContentView(base);
		base.setOrientation(LinearLayout.VERTICAL);

		// Layout
		lInput = new LinearLayout(context);
		mView = new View(context) {

			@Override
			public void onDraw(Canvas canvas) {
				// ArrayListからデータを抽出
				canvas.drawText("ArrayListから", 10, 20, paint);
				for (int i = 0; i < list.size(); i++) {
					canvas.drawText(list.get(i), 10, 40 + 12 * i, paint);
				}
				// dbからデータを抽出して配列へ格納する
				SQLiteDatabase db = dbHelper.getReadableDatabase();
				String sql = "select * from LatLngTable where del_flg = 0;";
				Cursor c = db.rawQuery(sql,null);
				c.moveToFirst();
				Double[][] list = new Double[c.getCount()][2];
				for(int i=0;i<list.length;i++){
					list[i][0] = c.getDouble(1);	//lat
					list[i][1] = c.getDouble(2);	//lng
					c.moveToNext();
				}
				c.close();
				db.close();
				
				//配列からデータを抽出して表示する
				canvas.drawText("DBから", 200, 20, paint);
				for(int i=0;i<list.length;i++){
					String str = "lat="+list[i][0]+",lng="+list[i][1];
					canvas.drawText(str, 200, 40 + 12*i, paint);
				}

			}
		};
		// base.addView
		base.addView(lInput);
		base.addView(mView, new LinearLayout.LayoutParams(
				LayoutParams.FILL_PARENT, 0, 1.0f));

		// paint
		paint = new Paint();
		paint.setAntiAlias(true);
		paint.setTextSize(12);

		// controller
		et0 = new EditText(context);
		et1 = new EditText(context);
		// 入力を数字だけに
		et0.setInputType(InputType.TYPE_CLASS_NUMBER);
		et1.setInputType(InputType.TYPE_CLASS_NUMBER);
		Button btn = new Button(context);
		btn.setText("SQLへ追加");

		lInput.addView(et0);
		lInput.addView(et1);
		lInput.addView(btn);

		/*
		 * DatabaseHelper インスタンス
		 */
		// データベースヘルパーのインスタンスを作成する(まだデータベースはできない)
		dbHelper = new DatabaseHelper(context, "MyDb", null, 1);
		
		// listener
		btn.setOnClickListener(new OnClickListener() {

			@Override
			public void onClick(View v) {
				// データを格納して、格納してあるデータをすべて表示する
				//データ取得
				String strData0 = et0.getText().toString();
				String strData1 = et1.getText().toString();
				Double doubleData0 = Double.parseDouble(strData0);
				Double doubleData1 = Double.parseDouble(strData1);
				/*
				 * 直接、ArrayListに格納する
				 */
				addInfo(doubleData0 , doubleData1);

				/*
				 * sqliteに格納する
				 */
				dbInsert(doubleData0 , doubleData1);

				// Viewを再描画
				// この再描画で、データを抽出して表示する
				mView.invalidate();
			}
		});

	}

	private void addInfo(Double lat , Double lng) {
		list.add("lag="+lat+",lng="+lng);
	}

	private void dbInsert(Double lat , Double lng) {

		// データベースオブジェクトを取得する(データベースにアクセスすると作成される。)
		SQLiteDatabase db = dbHelper.getWritableDatabase();

		// data insert
		String sql = "";
		sql += "insert into LatLngTable ";
		sql += "(lat , lng ) values ";
		sql += "(" + lat + "," + lng + ");";
		db.execSQL(sql);
		
		// データベースを閉じる
		db.close();
	}
	
}

DatabaseHelper.java

package com.example.t101_mysql;

import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteDatabase.CursorFactory;
import android.database.sqlite.SQLiteOpenHelper;

/*
 SQLiteのデータ型は下記の5種類のみ
 INTEGER・・・符号付整数
 REAL・・・浮動小数点
 TEXT・・・テキスト
 BLOB・・・バイナリデータ
 NULL・・・NULL
 */
public class DatabaseHelper extends SQLiteOpenHelper {

	public DatabaseHelper(Context context, String fileName, CursorFactory factory,
			int version) {
		super(context, fileName, factory, version);
		//fileName
		/*
		 * nullならメモリ上に、ファイル名を指定した場合は
		 * 「/data/data/<パッケージ名>/database/<ファイル名>」に、
		 * という具合にデータベースファイルが作成されます。
		 */
	}

	@Override
	public void onCreate(SQLiteDatabase db) {
		// onCreate()メソッドはデータベースが作成された時に呼ばれます。
		// テーブルの作成などを行います。

		String sql = "";
		sql += "create table LatLngTable (";
		sql += " no INTEGER primary key autoincrement";
		sql += ",lat REAL not null";
		sql += ",lng REAL not null";
		sql += ",del_flg integer DEFAULT 0";
		sql += ")";
		db.execSQL(sql);

	}

	@Override
	public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
		// onUpgrade()メソッドはデータベースをバージョンアップした時に呼ばれます。
		// 現在のレコードを退避し、テーブルを再作成した後、退避したレコードを戻すなどの処理を行います。

	}
	


}