Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/188.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android Java状态异常:从列col-1获取字段插槽失败_Android_Sql_Eclipse_Exception_Row - Fatal编程技术网

Android Java状态异常:从列col-1获取字段插槽失败

Android Java状态异常:从列col-1获取字段插槽失败,android,sql,eclipse,exception,row,Android,Sql,Eclipse,Exception,Row,我有一个SQL数据库,如下所示: import java.text.SimpleDateFormat; import java.util.Date; import android.content.ContentValues; import android.content.Context; import android.database.Cursor; import android.database.SQLException; import android.database.sqlite.SQL

我有一个SQL数据库,如下所示:

import java.text.SimpleDateFormat;
import java.util.Date;

import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.SQLException;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
import android.text.format.DateFormat;

public class sqlDatabase {

public static final String KEY_ROWID = "_id";
public static final String KEY_PURCHASEREFUND = "_purchaserefund";  
public static final String KEY_LOCATION = "_location";
public static final String KEY_SHOPTYPE = "_shoptype";
public static final String KEY_PRICE = "_price";
public static final String KEY_DATE = "_datevalue";
public static final String KEY_CARDUSED = "_cardused";
public static final String KEY_DATEVALUE = "_carddate";

private static final String DATABASE_NAME = "receiptdb";
private static final String DATABASE_TABLE = "receipttable";
private static final int DATABASE_VERSION = 1;  

private receiptDBhelper receiptHelper;
private final Context receiptContext;
private SQLiteDatabase receiptDatabase;


private static class receiptDBhelper extends SQLiteOpenHelper{

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

    @Override
    public void onCreate(SQLiteDatabase rdb) {
        // TODO Auto-generated method stub
        rdb.execSQL("CREATE TABLE " + DATABASE_TABLE + " (" +
                KEY_ROWID + " INTEGER PRIMARY KEY AUTOINCREMENT, " +
                KEY_PURCHASEREFUND + " TEXT NOT NULL, " +
                KEY_DATEVALUE + " TEXT NOT NULL, " +
                KEY_DATE + " TEXT NOT NULL, " +
                KEY_CARDUSED + " TEXT NOT NULL, " +
                KEY_LOCATION + " TEXT NOT NULL, " +
                KEY_SHOPTYPE + " TEXT NOT NULL, " +
                KEY_PRICE + " TEXT NOT NULL);"          
        );
    }

    @Override
    public void onUpgrade(SQLiteDatabase rdb, int oldVersion, int newVersion) {
        // TODO Auto-generated method stub
        rdb.execSQL("DROP_TABLE_IF_EXISTS " + DATABASE_TABLE);
        onCreate(rdb);
    }

}

public sqlDatabase(Context c){
    receiptContext = c;
}

public sqlDatabase open() throws SQLException {
    receiptHelper = new receiptDBhelper(receiptContext);
    receiptDatabase = receiptHelper.getWritableDatabase();
    return this;        
}

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

public long createEntry(String purchaserefund, String shoptype,
        String location, String price, String cardused) {
    // TODO Auto-generated method stub

    ContentValues dbcv = new ContentValues();

    long saveddatevalue = new Date().getTime();

    SimpleDateFormat dateformat = new SimpleDateFormat("dd-MM-yyyy");
    Date date = new Date();


    dbcv.put(KEY_PURCHASEREFUND, purchaserefund);
    dbcv.put(KEY_SHOPTYPE, shoptype);
    dbcv.put(KEY_LOCATION, location);
    dbcv.put(KEY_PRICE, price);
    dbcv.put(KEY_CARDUSED, cardused);
    dbcv.put(KEY_DATE, dateformat.format(date));
    dbcv.put(KEY_DATEVALUE, saveddatevalue);

    return receiptDatabase.insert(DATABASE_TABLE, null, dbcv);
}

public String getDate(String cardused) {
    // TODO Auto-generated method stub
    String[] receiptDBcolumns = { KEY_DATE, KEY_LOCATION, KEY_SHOPTYPE, KEY_PRICE, KEY_DATEVALUE, KEY_CARDUSED };
    Cursor receiptcursor = receiptDatabase.query(DATABASE_TABLE, receiptDBcolumns, null, null, null, null, null);
    String receiptdate = "";

    String outputcardcheck = cardused;

    long datevalue = new Date().getTime();

    long millisIn32Days = 32 * 24 * 60 * 60 * 1000; 

    long daysBeforeLong = (datevalue - millisIn32Days);     

    int iDate = receiptcursor.getColumnIndex(KEY_DATE);
    int iDateValue = receiptcursor.getColumnIndex(KEY_DATEVALUE);
    int iCardUsed = receiptcursor.getColumnIndex(KEY_CARDUSED);

    for (receiptcursor.moveToFirst(); !receiptcursor.isAfterLast(); receiptcursor.moveToNext()) {

        long inputDateValue = receiptcursor.getLong(iDateValue);

        String outputCardUsed = receiptcursor.getString(iCardUsed);

        if (outputCardUsed == outputcardcheck) { 
            if (inputDateValue < daysBeforeLong) {
                receiptdate = receiptdate + receiptcursor.getString(iDate) + "\n";
            }       
        }
    }

    return receiptdate;
}

public String getLocation(String cardused) {
    // TODO Auto-generated method stub
    String[] receiptDBcolumns = { KEY_DATE, KEY_LOCATION, KEY_SHOPTYPE, KEY_PRICE, KEY_DATEVALUE };
    Cursor receiptcursor = receiptDatabase.query(DATABASE_TABLE, receiptDBcolumns, null, null, null, null, null);
    String receiptlocation = "";

    String outputcardcheck = cardused;

    long datevalue = new Date().getTime();

    long millisIn32Days = 32 * 24 * 60 * 60 * 1000; 

    long daysBeforeLong = (datevalue - millisIn32Days); 

    int iLocation = receiptcursor.getColumnIndex(KEY_LOCATION);
    int iDateValue = receiptcursor.getColumnIndex(KEY_DATEVALUE);
    int iCardUsed = receiptcursor.getColumnIndex(KEY_CARDUSED);

    for (receiptcursor.moveToFirst(); !receiptcursor.isAfterLast(); receiptcursor.moveToNext()) {

        long inputDateValue = receiptcursor.getLong(iDateValue);

        String outputCardUsed = receiptcursor.getString(iCardUsed);

        if (outputCardUsed == outputcardcheck) {
            if (inputDateValue < daysBeforeLong) {
                receiptlocation = receiptlocation + receiptcursor.getString(iLocation) + "\n";
            }       
        }
    }

    return receiptlocation;
}

public String getShopType(String cardused) {
    // TODO Auto-generated method stub
    String[] receiptDBcolumns = { KEY_DATE, KEY_LOCATION, KEY_SHOPTYPE, KEY_PRICE, KEY_DATEVALUE };
    Cursor receiptcursor = receiptDatabase.query(DATABASE_TABLE, receiptDBcolumns, null, null, null, null, null);
    String receiptshoptype = "";

    String outputcardcheck = cardused;

    long datevalue = new Date().getTime();

    long millisIn32Days = 32 * 24 * 60 * 60 * 1000; 

    long daysBeforeLong = (datevalue - millisIn32Days);     

    int iShopType = receiptcursor.getColumnIndex(KEY_SHOPTYPE);
    int iDateValue = receiptcursor.getColumnIndex(KEY_DATEVALUE);
    int iCardUsed = receiptcursor.getColumnIndex(KEY_CARDUSED);

    for (receiptcursor.moveToFirst(); !receiptcursor.isAfterLast(); receiptcursor.moveToNext()) {

        long inputDateValue = receiptcursor.getLong(iDateValue);

        String outputCardUsed = receiptcursor.getString(iCardUsed);

        if (outputCardUsed == outputcardcheck) {
            if (inputDateValue < daysBeforeLong) {
                receiptshoptype = receiptshoptype + receiptcursor.getString(iShopType) + "\n";
            }       
        }
    }

    return receiptshoptype;
}

public String getPrice(String cardused) {
    // TODO Auto-generated method stub
    String[] receiptDBcolumns = { KEY_DATE, KEY_LOCATION, KEY_SHOPTYPE, KEY_PRICE, KEY_DATEVALUE };
    Cursor receiptcursor = receiptDatabase.query(DATABASE_TABLE, receiptDBcolumns, null, null, null, null, null);
    String receiptprice = "";

    String outputcardcheck = cardused;

    long datevalue = new Date().getTime();

    long millisIn32Days = 32 * 24 * 60 * 60 * 1000; 

    long daysBeforeLong = (datevalue - millisIn32Days);     

    int iPrice = receiptcursor.getColumnIndex(KEY_PRICE);
    int iDateValue = receiptcursor.getColumnIndex(KEY_DATEVALUE);
    int iCardUsed = receiptcursor.getColumnIndex(KEY_CARDUSED);

    for (receiptcursor.moveToFirst(); !receiptcursor.isAfterLast(); receiptcursor.moveToNext()) {

        long inputDateValue = receiptcursor.getLong(iDateValue);

        String outputCardUsed = receiptcursor.getString(iCardUsed);

            if (outputCardUsed == outputcardcheck) {
                if (inputDateValue < daysBeforeLong) {
                    receiptprice = receiptprice + receiptcursor.getString(iPrice) + "\n";
                }       
            }
    }

    return receiptprice;
}
我刚刚在“get”方法中添加了(String cardused)参数,整个数据库以前工作得很好,但现在出现了这个错误

在输出结果时,是否有其他方法将字符串的值传递到SQL数据库进行比较,或者我的代码中是否出现了错误

谢谢

    receiptdb.open();

    String receiptdate = receiptdb.getDate(cardused);
    String receiptlocation = receiptdb.getLocation(cardused);
    String receiptshoptype = receiptdb.getShopType(cardused);
    String receiptprice = receiptdb.getPrice(cardused);

    receiptdb.close();