Java SQLiteDatabase找不到字符串

Java SQLiteDatabase找不到字符串,java,android,database,sqlite,Java,Android,Database,Sqlite,我正在android设备上做一些非常初级的数据库编程。在下面的代码中,我尝试使用一些过滤器查询数据库。如果我选择基于行的ID进行筛选,那么它将正确返回,但是如果我改为按其他列进行筛选,则无法在数据库中找到任何条目。谁能看出我犯了什么样的错误 *请注意,我已经对我所询问的特定部分发表了评论 import java.util.ArrayList; import android.content.ContentValues; import android.content.Context; import

我正在android设备上做一些非常初级的数据库编程。在下面的代码中,我尝试使用一些过滤器查询数据库。如果我选择基于行的ID进行筛选,那么它将正确返回,但是如果我改为按其他列进行筛选,则无法在数据库中找到任何条目。谁能看出我犯了什么样的错误

*请注意,我已经对我所询问的特定部分发表了评论

import java.util.ArrayList;
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;

public class DataBaseManager {

Context context;
private SQLiteDatabase db;
private final String DB_NAME = "database_name";
private final int DB_VERSION = 1;

private final String TABLE_NAME = "database_table";
private final String TABLE_COLUMN_ID = "id";
private final String TABLE_COLUMN_ONE = "user_name";
private final String TABLE_COLUMN_TWO = "pass_word";

public DataBaseManager(Context context) {
    this.context = context;
    CustomSQLiteOpenHelper helper = new CustomSQLiteOpenHelper(context);
    this.db = helper.getWritableDatabase();
}

private class CustomSQLiteOpenHelper extends SQLiteOpenHelper {

    public CustomSQLiteOpenHelper(Context context) {
        super(context, DB_NAME, null, DB_VERSION);
    }

    public void onCreate(SQLiteDatabase db) {
        String newTableQueryString =
            "create table " +
            TABLE_NAME +
            " (" +
            TABLE_COLUMN_ID + " integer primary key autoincrement not null," +
            TABLE_COLUMN_ONE + " text," +
            TABLE_COLUMN_TWO + " text" +
            ");";
        db.execSQL(newTableQueryString);
    }

    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
    }

}

public void addRow(String username, String password) {
    ContentValues values = new ContentValues();
    values.put(TABLE_COLUMN_ONE, username);
    values.put(TABLE_COLUMN_TWO, password);
    try {
        db.insert(TABLE_NAME, null, values);
    } catch (Exception e) {
        Log.e("DB ERROR", e.toString());
        e.printStackTrace();
    }
}

public void deleteRow(long rowID) {
    try {
        db.delete(TABLE_NAME, TABLE_COLUMN_ID + "=" + rowID, null);
    } catch (Exception e) {
        Log.e("DB ERROR", e.toString());
        e.printStackTrace();
    }
}

public void updateRow(long rowID, String username, String password) {
    ContentValues values = new ContentValues();
    values.put(TABLE_COLUMN_ONE, username);
    values.put(TABLE_COLUMN_TWO, password);
    try {
        db.update(TABLE_NAME, values, TABLE_COLUMN_ID + "=" + rowID, null);
    } catch (Exception e) {
        Log.e("DB Error", e.toString());
        e.printStackTrace();
    }
}

public ArrayList<Object> getRowAsArray(long rowID) {
    ArrayList<Object> rowArray = new ArrayList<Object>();
    Cursor cursor = null;
    try {
        cursor = db.query(
                TABLE_NAME,
                new String[] { TABLE_COLUMN_ID, TABLE_COLUMN_ONE, TABLE_COLUMN_TWO },
                TABLE_COLUMN_ID + "=" + rowID,
                null, null, null, null, null
        );
        cursor.moveToFirst();
        if (!cursor.isAfterLast()) {
            do {
                ArrayList<Object> dataList = new ArrayList<Object>();
                dataList.add(cursor.getLong(0));
                dataList.add(cursor.getString(1));
                dataList.add(cursor.getString(2));
                rowArray.add(dataList);
            } while(cursor.moveToNext());
        }
        cursor.close();
    } catch (Exception e) {
        Log.e("DB ERROR", e.toString());
        e.printStackTrace();

    }
    return rowArray;
}

//THIS IS THE METHOD I AM ASKING ABOUT
//
//
public ArrayList<ArrayList<Object>> getAllRowsAsArrays() {
    ArrayList<ArrayList<Object>> dataArrays = new ArrayList<ArrayList<Object>>();
    Cursor cursor;

    try {
        /* If I have TABLE_COLUMN_ID + "=" + 1, for example, the sql query will return
           the correct value, but this returns nothing, even though i am 100% sure
           that "teharris" is in the database
        */
        cursor = db.query(
                TABLE_NAME,
                new String[]{TABLE_COLUMN_ID, TABLE_COLUMN_ONE, TABLE_COLUMN_TWO},
                TABLE_COLUMN_ONE + "=" + "teharris", null, null, null, null
        );
        cursor.moveToFirst();
        if (!cursor.isAfterLast()) {
            do {
                ArrayList<Object> dataList = new ArrayList<Object>();

                dataList.add(cursor.getLong(0));
                dataList.add(cursor.getString(1));
                dataList.add(cursor.getString(2));

                dataArrays.add(dataList);
            } while (cursor.moveToNext());
        }
    }
    catch (Exception e) {
        Log.e("DB Error", e.toString());
        e.printStackTrace();
    }

    // return the ArrayList that holds the data collected from
    // the database.
    return dataArrays;
}

public boolean loginVerify(String username, String password) {
    Cursor cursor = null;
    boolean matches = false;
    try {
        cursor = db.query(
                TABLE_NAME,
                new String[] { TABLE_COLUMN_ID, TABLE_COLUMN_ONE, TABLE_COLUMN_TWO },
                TABLE_COLUMN_ONE + "=" + username, 
                null, null, null, null, null
        );
        cursor.moveToFirst();
        if (!cursor.isAfterLast()) {
            do {
                if (username.equals(cursor.getString(1).toString()) && 
                        password.equals(cursor.getString(2).toString())) {
                    matches = true;
                }
            } while(cursor.moveToNext() && !matches);
        }
        cursor.close();
    } catch (Exception e) {
        Log.e("DB ERROR", e.toString());
        e.printStackTrace();

    }
    return matches;
}
import java.util.ArrayList;
导入android.content.ContentValues;
导入android.content.Context;
导入android.database.Cursor;
导入android.database.sqlite.SQLiteDatabase;
导入android.database.sqlite.SQLiteOpenHelper;
导入android.util.Log;
公共类数据库管理器{
语境;
专用数据库数据库;
私有最终字符串DB_NAME=“database_NAME”;
私有最终int DB_版本=1;
私有最终字符串表\u NAME=“数据库\u表”;
私有最终字符串表\u列\u ID=“ID”;
私有最终字符串表\u COLUMN\u ONE=“user\u name”;
私有最终字符串表\u COLUMN\u TWO=“pass\u word”;
公共数据库管理器(上下文){
this.context=上下文;
CustomSQLiteOpenHelper=新的CustomSQLiteOpenHelper(上下文);
this.db=helper.getWritableDatabase();
}
私有类CustomSQLiteOpenHelper扩展SQLiteOpenHelper{
公共CustomSQLiteOpenHelper(上下文){
super(上下文,数据库名称,空,数据库版本);
}
public void onCreate(SQLiteDatabase db){
字符串newTableQueryString=
“创建表”+
表名称+
" (" +
表\u列\u ID+“整型主键自动递增不为null,”+
表列+文本+
表2第2列+文本+
");";
execSQL(newTableQueryString);
}
public void onUpgrade(SQLiteDatabase db,int-oldVersion,int-newVersion){
}
}
public void addRow(字符串用户名、字符串密码){
ContentValues=新的ContentValues();
value.put(表\列\一,用户名);
value.put(表\列\二,密码);
试一试{
db.insert(表名称,空,值);
}捕获(例外e){
Log.e(“DB ERROR”,e.toString());
e、 printStackTrace();
}
}
public void deleteRow(长rowID){
试一试{
db.delete(表名称,表列ID+“=”+行ID,空);
}捕获(例外e){
Log.e(“DB ERROR”,e.toString());
e、 printStackTrace();
}
}
public void updateRow(长rowID、字符串用户名、字符串密码){
ContentValues=新的ContentValues();
value.put(表\列\一,用户名);
value.put(表\列\二,密码);
试一试{
更新(表名称、值、表列ID+“=”+rowID、null);
}捕获(例外e){
Log.e(“DB Error”,e.toString());
e、 printStackTrace();
}
}
公共阵列列表getRowAsArray(长rowID){
ArrayList rowArray=新的ArrayList();
游标=空;
试一试{
cursor=db.query(
表格名称,
新字符串[]{TABLE_COLUMN_ID,TABLE_COLUMN_ONE,TABLE_COLUMN_TWO},
表_列_ID+“=”+rowID,
空,空,空,空,空,空
);
cursor.moveToFirst();
如果(!cursor.isAfterLast()){
做{
ArrayList dataList=新的ArrayList();
dataList.add(cursor.getLong(0));
add(cursor.getString(1));
add(cursor.getString(2));
添加(数据列表);
}while(cursor.moveToNext());
}
cursor.close();
}捕获(例外e){
Log.e(“DB ERROR”,e.toString());
e、 printStackTrace();
}
返回行数组;
}
//这就是我要问的方法
//
//
公共ArrayList getAllRowsAsArrays(){
ArrayList dataArrays=新的ArrayList();
光标;
试一试{
/*例如,如果我有TABLE_COLUMN_ID+“=”+1,那么sql查询将返回
正确的值,但这不会返回任何内容,即使我100%确定
“teharris”在数据库里
*/
cursor=db.query(
表格名称,
新字符串[]{TABLE_COLUMN_ID,TABLE_COLUMN_ONE,TABLE_COLUMN_TWO},
表列一+“=”+“teharris”,null,null,null,null
);
cursor.moveToFirst();
如果(!cursor.isAfterLast()){
做{
ArrayList dataList=新的ArrayList();
dataList.add(cursor.getLong(0));
add(cursor.getString(1));
add(cursor.getString(2));
添加(dataList);
}while(cursor.moveToNext());
}
}
捕获(例外e){
Log.e(“DB Error”,e.toString());
e、 printStackTrace();
}
//返回保存从中收集的数据的ArrayList
//数据库。
返回数据数组;
}
公共布尔登录验证(字符串用户名、字符串密码){
游标=空;
布尔匹配=假;
试一试{
cursor=db.query(
表格名称,
新字符串[]{TABLE_COLUMN_ID,TABLE_COLUMN_ONE,TABLE_COLUMN_TWO},
表_列_ONE+“=”+用户名,
空,空,空,空,空,空
);
cursor.moveToFirst();
如果(!cursor.isAfterLast()){
做{
if(username.equals(cursor.getString(1.toString())&&
password.equals(cursor.getString(2.toString())){
匹配=真;
}
}while(cursor.moveToNext()&&!matches);
}
cursor.close();
}捕获(例外e){
Log.e(“DB ERROR”,e.toString());
e、 printStackTrace();
}
返回比赛;
}

}

您需要引用
字符串
文字:

cursor = db.query(
            TABLE_NAME,
            new String[]{TABLE_COLUMN_ID, TABLE_COLUMN_ONE, TABLE_COLUMN_TWO},
            TABLE_COLUMN_ONE + "=" + "'teharris'", null, null, null, null
);
完美的如果说,我有