java.lang.IllegalArgumentException:索引1处的绑定值为null

java.lang.IllegalArgumentException:索引1处的绑定值为null,java,sqlite,jquery-mobile,jdbc,Java,Sqlite,Jquery Mobile,Jdbc,我想进行查询并使用用户在edittext中输入的值,因为条件是where子句。 在database helper.java类中: 查询如下: Databasehelper.java: public Cursor patientHisto ( ) { SQLiteDatabase db = this.getWritableDatabase(); Cursor res = db.rawQuery (" select dateap,diagnostic,prestrea

我想进行查询并使用用户在edittext中输入的值,因为条件是where子句。 在database helper.java类中: 查询如下:

Databasehelper.java:

public Cursor patientHisto ( ) {
        SQLiteDatabase db = this.getWritableDatabase();
        Cursor res = db.rawQuery (" select dateap,diagnostic,prestreatment from patients_table, appointments_table, examinations_table where patients_table.id = appointments_table.idp and appointments_table.idap = examinations_table.id_ap and ID = ?  order by name, familyname asc"  , new String[] {ExaminatFragment.value} );
        return res;
    }
在examicatfragment.java中:

@Override
    public View onCreateView(LayoutInflater inflater, ViewGroup parent, Bundle savedInstanceState){
    View v = inflater.inflate(R.layout.fragment_examinat, parent, false);
    myDB = new DatabaseHelper(getActivity());

    id_p = (EditText)v.findViewById(R.id.id_p_text);

    String value = id_p.getText().toString();

    getPatHisto( );
    return v;
    }   


public void getPatHisto( ) {



    showhp.setOnClickListener(

            new View.OnClickListener() {

            @Override
            public void onClick(View v) {
              Cursor res = myDB.patientHisto();
            if (res.getCount() == 0){

            showMessage("Patient history", "No patient history found");
            return;

                    }


    StringBuffer buffer = new StringBuffer();
    while (res.moveToNext()){
                            buffer.append("Dateap:"+res.getString(0)+"\n");
                            buffer.append("Diagnostic:"+res.getString(1)+"\n");
                            buffer.append("Prestreatment:"+res.getString(2)+"\n\n");




                        }
    showMessage("Patient's history", buffer.toString());
                    }


                }
                );
                }


public void showMessage(String title, String Message){

        AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
        builder.setCancelable(true);
        builder.setTitle(title);
        builder.setMessage(Message);
        builder.show();

    }
运行应用程序并单击按钮时,会出现以下错误:

01-06 10:55:57.510: E/AndroidRuntime(1952): FATAL EXCEPTION: main
01-06 10:55:57.510: E/AndroidRuntime(1952): Process: com.example.appointapp, PID: 1952
01-06 10:55:57.510: E/AndroidRuntime(1952): java.lang.IllegalArgumentException: the bind value at index 1 is null
01-06 10:55:57.510: E/AndroidRuntime(1952):     at android.database.sqlite.SQLiteProgram.bindString(SQLiteProgram.java:164)
01-06 10:55:57.510: E/AndroidRuntime(1952):     at android.database.sqlite.SQLiteProgram.bindAllArgsAsStrings(SQLiteProgram.java:200)

请帮忙。。提前感谢您

您指定了一个局部变量
,而不是指定给类成员

 String value = id_p.getText().toString();
应该是

 value = id_p.getText().toString();
否则,SQL语句中的
examicatfragment.value
将为
null

您可能希望更改DB方法以接受参数:

public Cursor patientHisto ( String value ) {
    SQLiteDatabase db = this.getWritableDatabase();
    Cursor res = db.rawQuery (" select dateap,diagnostic,prestreatment from patients_table, appointments_table, examinations_table where patients_table.id = appointments_table.idp and appointments_table.idap = examinations_table.id_ap and ID = ?  order by name, familyname asc"  , new String[] {value} );
    return res;
}
并且不依赖静态字段来传递该值。然后,对该方法的调用将更改为

 Cursor res = myDB.patientHisto(value);

非常感谢您,查询正在运行,但呈现的数据错误。它给了我:没有为一个有病史检查的患者找到病史。你能提供帮助或建议吗?非常感谢,谢谢。。我已经使用sqlite manager检查了检查表,找到了与我输入的患者id相关的检查行,但呈现不正确。它告诉我:未找到患者历史记录!您为传递到语句中的值添加了调试输出了吗?非常感谢,这就是我所做的:我只是将db方法复制并粘贴到helpermethod.java,然后在examicatfragment.java中添加以下内容:字符串值;并将getPatHisto的第一行更改为:public void getPatHisto(){value=id_p.getText().toString();showhp.setOnClickListener(new View.OnClickListener(){@Override public void onClick(View v){Cursor res=myDB.patientThisto(value);但不幸的是,它仍然没有提供患者的病史!