Android アプリケーションに sqlite db(データベース) を実装しています。アプリを開くとデータベースにデータが挿入され、アプリケーションが終了します。アプリを 2 回目に開いてデータを取得しようとすると、挿入したところをクリックした後にアプリがクラッシュします。データベースからデータを取得するためのボタンをクリックします。アプリを開くたびにデータベースがリセットされますか、それともデータベースの実装方法に問題があります。これは私のコードです:
//テーブルを作成する場合:
private static String SAMPLE_TABLE_NAME = "PERSONS_TABLE";
プライベート SQLiteDatabase sampleDB;
private void createTable()
{
sampleDB.execSQL("CREATE TABLE IF NOT EXISTS " +
SAMPLE_TABLE_NAME +
" (COUNT INT(3),PERSON_NAME VARCHAR); ");
}
//挿入中
private void insertData()
{
sampleDB.execSQL("INSERT INTO " + SAMPLE_TABLE_NAME + " Values ('"+c+"','"+pass+"');");
}
// 1 列目だけを取得する場合
public int cdata()
{
cursor = sampleDB.rawQuery("SELECT COUNT FROM " +
SAMPLE_TABLE_NAME, null);
if (cursor != null)
{
cursor.moveToFirst();
c=cursor.getInt(cursor.getColumnIndex("COUNT"));
cursor.close();
}
return c;
}
次に、このcを使用して、ボタンを使用してテキストビューをデータベースの値に設定し、ボタンをクリックすると、データベースにその列のデータがあるかどうかを確認しますが、2回目にアプリを開きます。というわけで今回はクラッシュ。
ユーザーが「はい」という名前のボタンをクリックした後に音声認識された単語をデータベースに保存するためのコード//これを使用して音声認識された単語を保存します
@Override public void onActivityResult(int requestCode, int resultCode, Intent data) {
if (requestCode == REQUEST_CODE && resultCode == RESULT_OK)
{
// Populate the wordsList with the String values the recognition engine thought it heard
ArrayList<String> matches = data.getStringArrayListExtra(
RecognizerIntent.EXTRA_RESULTS);
pass = matches.get(0);
ボタン はい = (ボタン) findViewById(R.id.button1);
yes.setOnClickListener(new View.OnClickListener(){
public void onClick(View view)
{
try
{
c=1;
sampleDB = openOrCreateDatabase("NAME", MODE_PRIVATE, null);
createTable();
insertData();
seeData();
}
catch (SQLiteException se)
{
Log.e(getClass().getSimpleName(), "Could not create or Open the database");
}
finally
{
if (sampleDB != null)
sampleDB.execSQL("DELETE FROM " + SAMPLE_TABLE_NAME);
sampleDB.close();
}
}} );
private void seeData()
{
TextView txts=(TextView)findViewById(R.id.textView2);
cursor = sampleDB.rawQuery("SELECT COUNT,PERSON_NAME FROM " +
SAMPLE_TABLE_NAME, null);
if (cursor != null)
{
cursor.moveToFirst();
String personName = cursor.getString(cursor.getColumnIndex("PERSON_NAME"));
c=cursor.getInt(cursor.getColumnIndex("COUNT"));
//String country = cursor.getString(cursor.getColumnIndex("COUNTRY"));
//int age = cursor.getInt(cursor.getColumnIndex("AGE"));
txts.setText(personName);
if ( pass.equals(personName))
{
Toast.makeText(getApplicationContext(), "Device is unlocked", Toast.LENGTH_SHORT).show();
finish();
}
else
{
Toast.makeText(getApplicationContext(), "WRONG PASSWORD", Toast.LENGTH_SHORT).show();
}
cursor.close();
}
}