0

ユーザーからの入力を日付として取得しています。その日付がテーブルにあるかどうかを確認し、その日付に対応するデータをフェッチします。そうでない場合は、そのテーブルに日付を挿入します。次のコードを使用していますが、selectクエリで問題が発生しています。私のコードは以下の通りです:

package com.foursquaregame.in;

import java.sql.Date;
import java.text.ParseException;
import java.text.SimpleDateFormat;

import android.app.Activity;
import android.content.Intent;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.os.Bundle;
import android.text.Editable;
import android.text.TextUtils;
import android.util.Log;
import android.view.Gravity;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.RelativeLayout;
import android.widget.TextView;
import android.widget.Toast;

public class Astro_talk extends Activity{
    EditText dob;
    Button submit;
    SQLiteDatabase db_sunshine=null;
    String Data="";
    String Data1="";
    String TableName="tb_astro";
    String dob_var;
    String date_var;
    String quote;
    public void onCreate(Bundle savedInstanceState){
        super.onCreate(savedInstanceState);
        setContentView(R.layout.astro_talk);
        //quote="Don't worry, Be happy";
        dob=(EditText)findViewById(R.id.dob);
        final SimpleDateFormat sdf = new SimpleDateFormat("yyyy/MM/dd");
        submit=(Button)findViewById(R.id.submit);
        submit.setOnClickListener(new OnClickListener() {

            public void onClick(View v) {
                java.util.Date dateObject;

                System.out.println("submit data");
                dob_var=dob.getText().toString();
                try {
                    dateObject = sdf.parse(dob_var);
                    date_var = new SimpleDateFormat("yyyy/MM/dd").format(dateObject);

                } catch (ParseException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }

                System.out.println(dob_var);
                 try
                    {
                     db_sunshine=Astro_talk.this.openOrCreateDatabase("db_hellosunshine", MODE_PRIVATE, null);
                     db_sunshine.execSQL("CREATE TABLE IF NOT EXISTS "+ TableName + " (d_o_b NUMERIC,astro_quote DATE))");
                     Cursor c=db_sunshine.rawQuery("SELECT astro_quote FROM "+ TableName +"WHERE d_o_b='"+ date_var +"'" , null);
                     System.out.println("query executed");
                        int column1=c.getColumnIndex("d_o_b");
                        int column2=c.getColumnIndex("astro_quote");
                        c.moveToFirst();
                        if(c!=null)
                        {   

                            {
                                String date=c.getString(column1);
                                String astro =c.getString(column2);
                                Data=Data+date+"\n";
                                Data1=Data1+astro+"\n";
                                System.out.println("name"+date+" score"+astro);
                            }while(c.moveToNext());
                        }
                        if(Data.equals(dob_var)){
                            RelativeLayout rel_astro=(RelativeLayout)findViewById(R.id.rel_astro);
                            TextView tv_astro=(TextView)findViewById(R.id.tv_astro);
                            tv_astro.setText(Data);

                            setContentView(rel_astro);
                        }
                        else{
                            db_sunshine.execSQL("INSERT INTO "+TableName+"(d_o_b,astro_quote)"+" VALUES ('"+dob_var+"','"+quote+"');");
                            Toast customToast = new Toast(getBaseContext());
                            customToast = Toast.makeText(getBaseContext(), "Your quote is submit", Toast.LENGTH_SHORT);
                            customToast.setGravity(Gravity.CENTER_HORIZONTAL, 0, 0);
                            customToast.show();

                            Intent newIntent = new Intent(Astro_talk.this,selectoption.class);

                            startActivity(newIntent);
                            finishActivity(0);

                        }


                    }catch(Exception ex)
                    {
                        Log.e("ERROR","ERROR" ,ex);
                    }
                    finally
                    {
                        if(db_sunshine!=null)
                            db_sunshine.close();
                    }
            }
        });
    }

}

どこで間違っているのか教えてください。

4

2 に答える 2

1

使用してみてください:

 Cursor c=db_sunshine.rawQuery("SELECT astro_quote FROM "+ TableName +" WHERE d_o_b="+ date_var, null);

よくわかりませんが、これらが唯一の問題でしたが、クエリの WHERE の前にスペース文字を追加しなかったことが原因である可能性があります(上記で追加しました)。そして、d_o_b は数値であると思います。クエリで date_var の前後に " ' " を使用する必要はありません。

編集 :

あなたのコードから、テーブルを作成した直後にテーブルにアクセスしようとしているようです。したがって、テーブルにデータがないため、空のカーソルが表示されます。そのカーソルからデータにアクセスしようとすると、例外が発生します。

最初にテーブルにデータを入力してから、フェッチを試みます。

基本的にあなたがする必要があるのは-

 db_sunshine=Astro_talk.this.openOrCreateDatabase("db_hellosunshine", MODE_PRIVATE, null);
 db_sunshine.execSQL("CREATE TABLE IF NOT EXISTS "+ TableName + " (d_o_b NUMERIC,astro_quote DATE))");

 // call a function to add data to table ( you will have to add data here to the table created just now )

 Cursor c=db_sunshine.rawQuery("SELECT astro_quote FROM "+ TableName +" WHERE d_o_b="+ date_var, null);
 if(c.getCount()>0)
 {
    // cursor contains data ( which can never be a option for your case )
 }             
 else
 {
   // empty cursor
 }
于 2012-04-09T07:39:39.240 に答える
1
 Cursor c=db_sunshine.rawQuery("SELECT astro_quote FROM "+ TableName +"WHERE d_o_b='"+ date_var +"'" , null);
                 System.out.println("query executed");
                    int column1=c.getColumnIndex("d_o_b");
                    int column2=c.getColumnIndex("astro_quote");
                    c.moveToFirst();
                    if(c!=null)
                    {   

                        {
                            String date=c.getString(column1);
                            String astro =c.getString(column2);
                            Data=Data+date+"\n";
                            Data1=Data1+astro+"\n";
                            System.out.println("name"+date+" score"+astro);
                        }while(c.moveToNext());
                    }

ここでは、1 つの列に対してクエリを実行していますが、2 つの列を取得しようとすると、int column1=c.getColumnIndex("astro_quote"); である日付を 1 つしか取得できません。

文字列アストロ =c.getString(column1);

于 2012-04-09T05:13:49.957 に答える