【发布时间】:2019-12-11 11:15:29
【问题描述】:
我目前正在调整一个 Android 应用程序,但有一个相当简单的问题我无法解决。
在“onClick”之后,我想在我的数据库中检索一个特殊数据(在这种情况下,是加密货币的名称),但是数据存在,并且名称很好,问题来自请求而不是解决方法。
原因:android.database.sqlite.SQLiteException:没有这样的列:名称(代码 1 SQLITE_ERROR):,编译时:Select * FROM COINS WHERE cryptoName = name
这是我的 sqliteDatabase.java 的源代码
package com.example.cryptoapp;
import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
import android.util.Log;
import java.util.ArrayList;
public class SqliteDatabase extends SQLiteOpenHelper {
private static final int DATABASE_VERSION = 5;
private static final String DATABASE_NAME = "cryptoBase";
private static final String TABLE_COINS = "COINS";
private static final String COLUMN_ID = "_id";
private static final String COLUMN_CRYPTONAME = "cryptoName";
private static final String COLUMN_QUANTITY = "quantity";
private static final String COLUMN_TOTALVALUE = "totalValue";
public SqliteDatabase(Context context) {
super(context, DATABASE_NAME, null, DATABASE_VERSION);
}
@Override
public void onCreate(SQLiteDatabase db) {
String CREATE_COINS_TABLE = "CREATE TABLE " + TABLE_COINS + "(" + COLUMN_ID + " INTEGER PRIMARY KEY," + COLUMN_CRYPTONAME + " TEXT," + COLUMN_QUANTITY + " TEXT," + COLUMN_TOTALVALUE + " TEXT" + ")";
db.execSQL(CREATE_COINS_TABLE);
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
db.execSQL("DROP TABLE IF EXISTS " + TABLE_COINS);
onCreate(db);
}
public ArrayList<Coins> listCoins(){
String sql = "select * from " + TABLE_COINS;
SQLiteDatabase db = this.getReadableDatabase();
ArrayList<Coins> storeCoins = new ArrayList<>();
Cursor cursor = db.rawQuery(sql, null);
if(cursor.moveToFirst()){
do{
int id = Integer.parseInt(cursor.getString(0));
String cryptoname = cursor.getString(1);
String quantity = cursor.getString(2);
String totalvalue = cursor.getString(3);
storeCoins.add(new Coins(id, cryptoname, quantity, totalvalue));
}while (cursor.moveToNext());
}
cursor.close();
return storeCoins;
}
public void addCoins(Coins coins){
Log.d("TESTINADD", coins.getCryptoName());
ContentValues values = new ContentValues();
values.put(COLUMN_CRYPTONAME, coins.getCryptoName());
values.put(COLUMN_QUANTITY, coins.getQuantity());
values.put(COLUMN_TOTALVALUE, coins.getTotalValue());
SQLiteDatabase db = this.getWritableDatabase();
db.insert(TABLE_COINS, null, values);
}
public void updateCoins(Coins coins){
ContentValues values = new ContentValues();
values.put(COLUMN_CRYPTONAME, coins.getCryptoName());
values.put(COLUMN_QUANTITY, coins.getQuantity());
values.put(COLUMN_TOTALVALUE, coins.getTotalValue());
SQLiteDatabase db = this.getWritableDatabase();
db.update(TABLE_COINS, values, COLUMN_ID + " = ?", new String[] { String.valueOf(coins.getId())});
}
public Coins findCrypto(String name){
String query = "Select * FROM " + TABLE_COINS + " WHERE " + COLUMN_CRYPTONAME + " = " + "name";
SQLiteDatabase db = this.getWritableDatabase();
Coins coins = null;
Log.d("TESTquery", query);
Cursor cursor = db.rawQuery(query, null);
if (cursor.moveToFirst()){
int id = Integer.parseInt(cursor.getString(0));
String mName = cursor.getString(1);
String mQuantity = cursor.getString(2);
String mTotalValue = cursor.getString(3);
coins = new Coins(id, mName, mQuantity, mTotalValue);
}
cursor.close();
Log.d("TEST", name);
Log.d("TEST1", coins.getCryptoName());
return coins;
}
public void deleteCoins(int id){
SQLiteDatabase db = this.getWritableDatabase();
db.delete(TABLE_COINS, COLUMN_ID + " = ?", new String[] { String.valueOf(id)});
}
}
提前谢谢你!
【问题讨论】:
标签: java android database sqlite