java - 使用 eclipse 在 sqlite 中找不到这样的列

标签 java android eclipse sqlite

我正在学习 SQLite 数据库,当我传递两个值 DateName 时,所有数据都会从我的数据库中检索并显示在我的用户界面编辑框中。
当我将 DateName 值放入编辑框中并单击“显示”按钮时,模拟器不幸停止并出现以下错误:

Logcat Error-:08-03 23:08:06.730: E/AndroidRuntime(1099): android.database.sqlite.SQLiteException: no such column: Xyz (code 1): , while compiling: SELECT date, name, salary, allowance FROM salary WHERE name=Xyz AND date=03-08-2015

这是代码:

// MainActivity.java

Display.setOnClickListener(new View.OnClickListener() {

        @Override
        public void onClick(View v) {
            // TODO Auto-generated method stub
            String SdateTime=SDate.getText().toString();
            String SnameTime=SName.getText().toString();
            //long l=Long.parseLong(n);
            HotOrNot hon=new HotOrNot(MainActivity.this);
            hon.open();
            String returnName=hon.getName(SdateTime,SnameTime);
            String returnDate=hon.getDate(SdateTime,SnameTime);
            String returnSalary=hon.getSalary(SdateTime,SnameTime);
            String returnAllowance=hon.getAllowance(SdateTime,SnameTime);

            hon.close();
            Date.setText(returnDate);
            Name.setText(returnName);
            Salary.setText(returnSalary);
            Allowance.setText(returnAllowance);



        }
    });

// HotOrNot.java-->Database class
public class HotOrNot {
    public static final String KEY_DATE = "date";
    public static final String KEY_NAME = "name";
    public static final String KEY_SALARY = "salary";
    public static final String KEY_ALLOWANCE = "allowance";
    private static final String TAG = "DBAdapter";
    private static final String DATABASE_NAME = "MegaLight";
    private static final String TABLE_SALARY = "salary";
    private static final int DATABASE_VERSION = 2;

    private DbHelper ourHelper;
    private final Context ourContext;
    private SQLiteDatabase ourDatabase;
    /*private static final String CREATE_TABLE_SALARY =
    "create table salary (date integer not null, "
    + " name text not null, salary integer not null, allowance integer not null);";
*/
    private static class DbHelper extends SQLiteOpenHelper{



        public DbHelper(Context context) {
            super(context,DATABASE_NAME, null,DATABASE_VERSION);
            // TODO Auto-generated constructor stub
        }

        @Override
        public void onCreate(SQLiteDatabase db) {
            // TODO Auto-generated method stub
            String CREATE_TABLE_SALARY = "CREATE TABLE " + TABLE_SALARY+ "("
                    + KEY_DATE + " TEXT, "
                    + KEY_NAME + " TEXT, " 
                    + KEY_SALARY + " INTEGER, "
                    + KEY_ALLOWANCE + " INTEGER " 

                    + ");";


            db.execSQL(CREATE_TABLE_SALARY);

            Log.d(TAG,"salary Table Create Successfull");
        }

        @Override
        public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
            // TODO Auto-generated method stub
            db.execSQL("DROP TABLE IF EXISTS" + TABLE_SALARY);
            onCreate(db);
        }

    }
    public HotOrNot(Context c){
        ourContext=c;
    }
    public HotOrNot open(){
        ourHelper=new DbHelper(ourContext);
        ourDatabase=ourHelper.getWritableDatabase();
        return this;

    }
    public void close(){
        ourHelper.close();


    }
    public long createEntry(String date, String name, String salary,
            String allowance) {
        // TODO Auto-generated method stub
        ContentValues cv=new ContentValues();
        cv.put(KEY_DATE, date);
        cv.put(KEY_NAME, name);
        cv.put(KEY_SALARY, salary);
        cv.put(KEY_ALLOWANCE, allowance);
        return ourDatabase.insert(TABLE_SALARY,null,cv);
    }
    public Cursor getAllContacts() {
        /*String[] columns=new String[]{KEY_DATE, KEY_NAME,KEY_SALARY,KEY_ALLOWANCE};
        Cursor c=ourDatabase.query(TABLE_SALARY, columns, null, null, null,null,null);
        String result=" ";
        int iDate=c.getColumnIndex(KEY_DATE);
        int iName=c.getColumnIndex(KEY_NAME);
        int iSalary=c.getColumnIndex(KEY_SALARY);
        int iAllowance=c.getColumnIndex(KEY_ALLOWANCE);
        for(c.moveToFirst();!c.isAfterLast();c.moveToNext()){
            result=result+c.getString(iDate) + "" + c.getString(iName) + "" + c.getString(iSalary) + "" + c.getString(iAllowance) + "\n";

        }
        return result;
        */
        // TODO Auto-generated method stub
        return ourDatabase.query(TABLE_SALARY, new String[] {KEY_DATE, KEY_NAME,KEY_SALARY,KEY_ALLOWANCE}, null, null, null, null, null);
    }
    public String getName(String SdateTime,String SnameTime) {
        // TODO Auto-generated method stub
        String[] columns=new String[]{KEY_DATE,KEY_NAME,KEY_SALARY,KEY_ALLOWANCE};
        Cursor c=ourDatabase.query(TABLE_SALARY,columns,KEY_NAME + "=" + SnameTime + " AND " + KEY_DATE + "=" + SdateTime,null,null,null,null);
    //  Cursor c=ourDatabase.rawQuery("select*from salary where name="+ SnameTime,new String() {"AND date="+SdateTime});
        if(c!=null){
            c.moveToFirst();
            String name=c.getString(1);
            return name;
        }
        return null;
    }
    public String getDate(String SdateTime,String SnameTime) {String[] columns=new String[]{KEY_DATE,KEY_NAME,KEY_SALARY,KEY_ALLOWANCE};
    Cursor c=ourDatabase.query(TABLE_SALARY,columns,KEY_NAME + "=" + SnameTime + " and " + KEY_DATE + "=" + SdateTime,null,null,null,null);
    if(c!=null){
        c.moveToFirst();
        String date=c.getString(0);
        return date;
    }
        // TODO Auto-generated method stub
        return null;
    }
    public String getSalary(String SdateTime,String SnameTime) {
        String[] columns=new String[]{KEY_DATE,KEY_NAME,KEY_SALARY,KEY_ALLOWANCE};
        Cursor c=ourDatabase.query(TABLE_SALARY,columns,KEY_NAME + "=" + SnameTime + " and " + KEY_DATE + "=" + SdateTime,null,null,null,null);
        if(c!=null){
            c.moveToFirst();
            String salary=c.getString(2);
            return salary;
        }
        // TODO Auto-generated method stub
        return null;
    }
    public String getAllowance(String SdateTime,String SnameTime) {
        String[] columns=new String[]{KEY_DATE,KEY_NAME,KEY_SALARY,KEY_ALLOWANCE};
        Cursor c=ourDatabase.query(TABLE_SALARY,columns,KEY_NAME + "=" + SnameTime + " and " + KEY_DATE + "=" + SdateTime,null,null,null,null);
        if(c!=null){
            c.moveToFirst();
            String allowance=c.getString(3);
            return allowance;
        }
        // TODO Auto-generated method stub
        return null;
    }

}

最佳答案

您需要将 Xyz 用单引号括起来,否则 sqlite 会认为您引用的是具有该名称的列。

String selection = KEY_NAME + "= '" + name + "'";

或者,您可以在查询字符串中使用 ? 并在 selectionArgs 参数中传递 Xyz。

String selection = KEY_NAME + " = ?";
String[] selectionArgs = new String[] {name};

在这种情况下,您不需要单引号,因为参数是在准备好语句后绑定(bind)的。

关于java - 使用 eclipse 在 sqlite 中找不到这样的列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31800346/

相关文章:

java - 从 Eclipse 为 Nexus 部署典型的 Maven 插件

java - 将 Android 项目转换为 Java 项目

java - 使用 jGit 进行垃圾收集

java - 在 Android 上,垃圾收集是按进程还是系统范围进行的?

java - 使用监听器的 ANTLR 4 解释器

java - 在Android中访问内部类中的变量

android - 为什么我们将每个 Activity/Fragment 的 ViewModel 分开?

Eclipse Helios 未加载/启动,需要一些时间才能启动

java - 对谷歌驱动器实现服务器端授权的问题

java - TCP 上的对象或字符串 (xml)