-1

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();
    }

  }
4

1 に答える 1

0

次のようにしてみてください。

public int cdata()
{
    cursor = sampleDB.rawQuery("SELECT COUNT(*) FROM " +
            SAMPLE_TABLE_NAME, null);
     if (cursor != null)
     {
         cursor.moveToFirst();
         c=cursor.getInt(0);
         cursor.close();
     }
    return c;
}
于 2013-03-26T15:21:52.347 に答える