Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/315.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
Java android.database.sqlite.SQLiteException:没有这样的列:name(代码1 sqlite\u错误)_Java_Android_Database_Sqlite - Fatal编程技术网

Java android.database.sqlite.SQLiteException:没有这样的列:name(代码1 sqlite\u错误)

Java android.database.sqlite.SQLiteException:没有这样的列:name(代码1 sqlite\u错误),java,android,database,sqlite,Java,Android,Database,Sqlite,我目前正在调整一个Android应用程序,我有一个相当简单的问题,我无法解决 在“onClick”之后,我想在我的数据库中检索一个特殊的数据(在本例中,是加密货币的名称),但是数据存在,并且名称良好,问题来自请求,而不是解决方法 原因:android.database.sqlite.SQLiteException:没有这样的列:name(代码1 sqlite_错误):,编译时:从cryptoName=name的硬币中选择* 下面是我的sqliteDatabase.java的源代码 package

我目前正在调整一个Android应用程序,我有一个相当简单的问题,我无法解决

在“onClick”之后,我想在我的数据库中检索一个特殊的数据(在本例中,是加密货币的名称),但是数据存在,并且名称良好,问题来自请求,而不是解决方法

原因:android.database.sqlite.SQLiteException:没有这样的列:name(代码1 sqlite_错误):,编译时:从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)});
    }
}
package com.example.cryptoapp;
导入android.content.ContentValues;
导入android.content.Context;
导入android.database.Cursor;
导入android.database.sqlite.SQLiteDatabase;
导入android.database.sqlite.SQLiteOpenHelper;
导入android.util.Log;
导入java.util.ArrayList;
公共类SqliteDatabase扩展了SQLiteOpenHelper{
私有静态最终int数据库_VERSION=5;
私有静态最终字符串数据库\u NAME=“cryptoBase”;
私有静态最终字符串表\u COINS=“COINS”;
私有静态最终字符串列_ID=“_ID”;
私有静态最终字符串列\u CRYPTONAME=“CRYPTONAME”;
私有静态最终字符串列\u QUANTITY=“QUANTITY”;
私有静态最终字符串列\u TOTALVALUE=“TOTALVALUE”;
公共SqliteDatabase(上下文){
super(上下文、数据库名称、null、数据库版本);
}
@凌驾
public void onCreate(SQLiteDatabase db){
字符串CREATE_COINS_TABLE=“CREATE TABLE”+TABLE_COINS+”(“+COLUMN_ID+”整数主键,“+COLUMN_CRYPTONAME+”文本,“+COLUMN_QUANTITY+”文本,“+COLUMN_TOTALVALUE+”文本“+”);
execSQL(创建表);
}
@凌驾
public void onUpgrade(SQLiteDatabase db,int-oldVersion,int-newVersion){
db.execSQL(“如果存在删除表”+表_);
onCreate(db);
}
公共ArrayList listCoins(){
String sql=“select*from”+表格;
SQLiteDatabase db=this.getReadableDatabase();
ArrayList storeCoins=新的ArrayList();
Cursor=db.rawQuery(sql,null);
if(cursor.moveToFirst()){
做{
intid=Integer.parseInt(cursor.getString(0));
String cryptoname=cursor.getString(1);
字符串数量=cursor.getString(2);
String totalvalue=cursor.getString(3);
添加(新硬币(id、加密名称、数量、总值));
}while(cursor.moveToNext());
}
cursor.close();
归还硬币;
}
公共无效添加硬币(硬币){
Log.d(“TESTINADD”,coins.getCryptoName());
ContentValues=新的ContentValues();
value.put(COLUMN_CRYPTONAME,coins.getCryptoName());
value.put(COLUMN_QUANTITY,coins.getQuantity());
value.put(COLUMN_TOTALVALUE,coins.getTotalValue());
SQLiteDatabase db=this.getWritableDatabase();
db.插入(表1,空,值);
}
公共作废更新密码(硬币){
ContentValues=新的ContentValues();
value.put(COLUMN_CRYPTONAME,coins.getCryptoName());
value.put(COLUMN_QUANTITY,coins.getQuantity());
value.put(COLUMN_TOTALVALUE,coins.getTotalValue());
SQLiteDatabase db=this.getWritableDatabase();
更新(表COINS,value,列ID+“=?”,新字符串[]{String.valueOf(COINS.getId())});
}
公共硬币findCrypto(字符串名称){
String query=“从“+表”+中选择*,其中“+列”\u CRYPTONAME+”=“+”名称”;
SQLiteDatabase db=this.getWritableDatabase();
硬币=零;
Log.d(“TESTquery”,query);
Cursor Cursor=db.rawQuery(查询,空);
if(cursor.moveToFirst()){
intid=Integer.parseInt(cursor.getString(0));
String mName=cursor.getString(1);
字符串mQuantity=cursor.getString(2);
字符串mTotalValue=cursor.getString(3);
硬币=新硬币(id、mName、mQuantity、mTotalValue);
}
cursor.close();
Log.d(“测试”,名称);
Log.d(“TEST1”,coins.getCryptoName());
归还硬币;
}
公共货币(内部id){
SQLiteDatabase db=this.getWritableDatabase();
db.delete(表_COINS,列_ID+“=?”,新字符串[]{String.valueOf(ID)});
}
}
提前谢谢你

String query = "Select * FROM " + TABLE_COINS + " WHERE " + COLUMN_CRYPTONAME + " = " + "name";
这里应该是:

String query = "Select * FROM " + TABLE_COINS + " WHERE " + COLUMN_CRYPTONAME + " LIKE " + "'" + name + "'";

您将名称作为字符串而不是变量传递,因此它是硬编码的,因此数据库中没有名为name的表,因此您得到了此异常以解决此问题,使查询如下所示

String query = "Select * FROM " + TABLE_COINS + " WHERE " + COLUMN_CRYPTONAME + " = " + name;

@SkypeDogg的答案是正确的