Java Android studio SQLiteOpenHelper从*中选择,其中。。。没有这样的列错误

Java Android studio SQLiteOpenHelper从*中选择,其中。。。没有这样的列错误,java,android,database,sqlite,Java,Android,Database,Sqlite,我试图从一个数据库中选择密码,其中name=我在方法的参数中发送的名称。我正在写数据库的所有名称,因此名称100%在数据库中 但是我得到了以下错误:android.database.sqlite.SQLiteException:没有这样的列:kristofer(代码1):,编译时:SELECT*FROM login其中_name=kristofer public String databasePassword(String name){ String dbString = "";

我试图从一个数据库中选择密码,其中name=我在方法的参数中发送的名称。我正在写数据库的所有名称,因此名称100%在数据库中

但是我得到了以下错误:
android.database.sqlite.SQLiteException:没有这样的列:kristofer(代码1):,编译时:SELECT*FROM login其中_name=kristofer

public String databasePassword(String name){
        String dbString = "";
        SQLiteDatabase db = getWritableDatabase();
        String query = "SELECT * FROM " + TABLE_LOGIN + " WHERE "+COLUMN_NAME + " = " + name;
        //Cursor point to a location in your results
        Cursor c = db.rawQuery(query, null);
        //Move to the first row in your results
        c.moveToFirst();

        while(!c.isAfterLast()){
            if(c.getString(c.getColumnIndex("_password"))!=null){ //Loop through every row in a database
                dbString += c.getString(c.getColumnIndex("_password"));
                dbString += "\n";
            }
            c.moveToNext();
        }
        db.close();
        return dbString;
    }

这不是Android特有的问题,而是基本的SQL错误。该声明应如下所示:

SELECT * FROM login WHERE _name = "kristofer"
如果你正确地注入你的值,它将为你做到这一点

“”或“”中的值被视为值/字符串,不带括引号,它被视为要查找的列的名称

使用以下命令:

String[] vals = { name };
String query = "SELECT * FROM " + TABLE_LOGIN + " WHERE " + COLUMN_NAME + " = ?";
Cursor c = db.rawQuery(query, vals);

按如下方式编写您的查询

"SELECT * FROM " + TABLE_LOGIN + " WHERE "+COLUMN_NAME + " = '" + name+"'";

名称
值周围缺少单引号

为避免此类格式问题(以及SQL注入攻击),请始终使用字符串值的参数:

String query=“SELECT*FROM”+表\登录+”其中“+列\名称+”=?”;
游标c=db.rawQuery(查询,新字符串[]{name});
如果您只想从数据库中读取单个值,请使用管理光标的:

公共字符串数据库密码(字符串名称){
SQLiteDatabase db=getWritableDatabase();
试一试{
返回DatabaseUtils.stringForQuery(db,
“从“+表登录+”中选择密码,其中“+列名称+”=?”,
新字符串[]{name});
}最后{
db.close();
}
}
sql的基础知识:使用参数(最佳解决方案),或以正确的方式使用文字(不是一个好的解决方案)