久しぶりにブログを書いてみようと思い立ちました。

 タイトルどおりのことについて書いていこうと思います。

 最近のエディタは、sublime textです。

 初めに『配列』についてです。Javaプログラミングで配列を作成する方法について説明していきます。

① さて、クラスの宣言に立ち返ってみましょう。

  クラスの宣言は下記のようにしましたね。

  (クラスの型) (変数) = new (コンストラクタ);

   ex)   String txt = new String();

  ただし、変数の宣言と、値の代入を合わせてやってしまうことが多いのでこれをわすれてしまっているかもしれないのでここであえて書いてみました。

 配列変数の宣言は、クラスの宣言と少し似ています。いわば、配列とは、変数とクラスの間に位置するイメージです。

  (配列型) (配列変数名) = new (配列型)[要素数];

 

データベースからデータを取得し、出力する方法についてです。
cursorの取り扱いを学ぶ必要があります。
データベースのクラスであるdbのqueryメソッドを使用すると、その返り値がCursorインターフェースで返ってきます。
取得されるデータは一つではないところが、出力をどうするかが難しい点です。
そこで、ここでは、StringBuilderクラスを使用して、このクラスのappend()メソッドを使用して、テキストを追加していけるようにしておきます。
そして、while文を使用し、moveToNext()メソッド(Cursorを次の行へ移動させる;Cursorが既に末尾行を過ぎている状態で呼び出すとfalseを返す)を使用します。while文では、条件式でfalseでなければ、その後に記載される繰り返し処理を実行します。条件式がfalseとなれば、繰り返し処理を実行せず終了となります。
 onClickButton()メソッドの最後に下記の記載が重要です。
        cursor.close();


また、下記の命令文の位置にも留意して下さい。
  TextView tv =(TextView)findViewById(R.id.textView);
変数宣言の下にあるとダメです。




[MainActivity.java]
package android.example.may4;

import android.content.ContentValues;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.TextView;

public class MainActivity extends AppCompatActivity {
    DBOpenHelper helper;
    SQLiteDatabase db;
    String str;


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        helper = new DBOpenHelper(getApplicationContext());

        db= helper.getWritableDatabase();

        ContentValues val1 = new ContentValues();
        val1.put("name", "やまだたろう");
        val1.put("money", "200");
        long id1 = db.insert(helper.TABLE, null, val1);
        Log.d("MainActivity", "insert data:" + id1);

        ContentValues val2 = new ContentValues();
        val2.put("name", "たなかじろう");
        val2.put("money", "300");
        long id2 = db.insert(helper.TABLE, null, val2);
        Log.d("MainActivity", "insert data:" + id2);
    }

    public void onButtonClick(View view) {

        TextView tv =(TextView)findViewById(R.id.textView);

           Cursor cursor = db.query(helper.TABLE, new String[]{"_id", "name", "money"}, null, null, null, null, "_id DESC");

           StringBuilder text = new StringBuilder();
            while (cursor.moveToNext()) {
                str = "" + cursor.getString(cursor.getColumnIndex("name"));
                text.append(str);
            }

        tv.setText(text.toString());
        cursor.close();
        db.close();
        helper.close();
    }

}

 

[DBOpenHelper.java]

package android.example.may4;

import android.content.ContentValues;
import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
import android.util.Log;

public class DBOpenHelper extends SQLiteOpenHelper {

    static final String TAG = "DBOpenHelper";

    static final String DATABASE_NAME ="contact.db";
    static final int DATABASE_VERSION = 1;
    static final String TABLE ="account";
    public static final String CREATE_TABLE =
            "create table "+TABLE+"("
                    +"_id integer primary key autoincrement,"
                    +"name text not null,"
                    +"money integer"+");";

    public DBOpenHelper(Context context){
        super(context,DATABASE_NAME,null,DATABASE_VERSION);
        Log.d(TAG, "DBOpenHelperが開かれました。");
    }



    @Override
    public void onCreate(SQLiteDatabase db) {
        Log.d(TAG, "DBOpenHelper.onCreateが開かれました。");
        db.execSQL(CREATE_TABLE);

    }

    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {

    }
}

 

[activity_main.xml]

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent"
    android:layout_height="match_parent" android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    android:paddingBottom="@dimen/activity_vertical_margin" tools:context=".MainActivity">

    <TextView android:text="Hello World!" android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:id="@+id/textView" />

    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="New Button"
        android:id="@+id/button"
        android:layout_below="@+id/textView"
        android:layout_alignParentLeft="true"
        android:layout_alignParentStart="true"
        android:layout_marginTop="31dp"
        android:onClick="onButtonClick"/>
</RelativeLayout>

データベースプログラミングで苦労するのが出力先をどう作るかである。

 

データベース作成して、データの入れ方を学び、その次にデータ取得の仕方を学び、その後出力について学ぶ。すべて完璧でないとうまくいかない。

 

これを乗り越えるためには、前回説明したタグを使うとそれぞれの段階でうまくいっているか確認ができる。

 

データベース作成して、データの入れ方を学び、というところまではMayプロジェクトでやったので、今度は、データの取得の仕方についてMay2プロジェクトでやります。その後の出力で、単数はMay3、複数データ出力はMay4プロジェクトということになります。

 

May2プロジェクトは、

前回と同様、

コードは、MainActivity. javaとDBOpenHelper. javaで構成され、

デザインは、activity_main.xmlで行います。

DBOpenHelper.javaです。ほとんど前回とおなじですが、一部変更あります。(後述)

***************************************************************************

*************************************************************************

7行目だけ 頭の privateがpublicに変更してます。

 

次にMainActivity.javaです。

activity.xmlで追加したボタンを押すと、

データベース内にある、カラム名 moneyのデータをすべてlog_catに出力してくれるプログラムです。

**************************************************************************

***************************************************************************

package android.example.may2;

import android.content.ContentValues;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;

public class MainActivity extends AppCompatActivity {

DBOpenHelper helper;
SQLiteDatabase db;

@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);

helper = new DBOpenHelper(getApplicationContext());

db= helper.getWritableDatabase();
}

public void onButtonClick(View view){

Cursor cursor = db.query(helper.TABLE,new String[]{"_id","name","money"},null,null,null,null,"_id DESC");

while(cursor.moveToNext()){
Log.d(helper.TAG,""+cursor.getInt(cursor.getColumnIndex("money")));
}
cursor.close();
}

}

*************************************************************************

 

activity.xmlです。

*************************************************************************

 

 

*********************************************************************

 

※AndroStudio1.4で、作成時、android 4.0.3(IceCreamSandwich)を選択して作成。

スマホは htc HTV31で動作確認しています。