Android SQL查询不创建我的列?
我正在尝试创建一个健身应用程序,其中数据库保存用户名和密码。 然后输入保存到第二个表中的详细信息。这是我的助手 我得到的错误是我的“用户名列不存在” 但是当我使用db browser for sqlite查看我的表时 它显示我创建的表和表中的数据 更新:我创建了一个表来存储我所有的数据,现在它还没有被接收,我的显示方法显示为“未设置”Android SQL查询不创建我的列?,android,android-sqlite,android-database,Android,Android Sqlite,Android Database,我正在尝试创建一个健身应用程序,其中数据库保存用户名和密码。 然后输入保存到第二个表中的详细信息。这是我的助手 我得到的错误是我的“用户名列不存在” 但是当我使用db browser for sqlite查看我的表时 它显示我创建的表和表中的数据 更新:我创建了一个表来存储我所有的数据,现在它还没有被接收,我的显示方法显示为“未设置” public String DisplayData(String username,String column) { SQLiteDatabase db
public String DisplayData(String username,String column)
{
SQLiteDatabase db = this.getReadableDatabase();
Cursor cursor = db.rawQuery("SELECT * FROM "+ TABLE_NAME +" WHERE Username =?",new String[]{username});
if(cursor.moveToFirst()){
return cursor.getString(cursor.getColumnIndexOrThrow(column));
}else{
return "Not set";
}
}
更新表
// Register table
public static final String COL_1 = "ID";
public static final String COL_2 = "Username";
public static final String COL_3 = "Password";
public static final String COL_4 = "Weight";
public static final String COL_5 = "Height";
public static final String COL_6 = "TargetWeight";
public static final String COL_7 = "TargetSteps";
显示方法
public String DisplayData(String username,String column)
{
SQLiteDatabase db = this.getReadableDatabase();
Cursor cursor = db.rawQuery("SELECT * FROM "+ TABLE_NAME +" WHERE Username =?",new String[]{username});
if(cursor.moveToFirst()){
return cursor.getString(cursor.getColumnIndexOrThrow(column));
}else{
return "Not set";
}
}
用法
TABLE_NAME1
没有Username
列。更新你的方法如下
public String DisplayData(String username, String column) {
SQLiteDatabase db = this.getReadableDatabase();
Cursor cursor = db.rawQuery("SELECT * FROM "+ TABLE_NAME +" WHERE " + column + " = ? ", new String[]{username});
if (cursor != null && cursor.moveToFirst()){
return cursor.getString(cursor.getColumnIndexOrThrow(column));
} else {
return "Not set";
}
}
像这样使用它
.DisplayData("admin", "Username");
假设
Displaydata
方法的第二个参数的值为Username,问题在于您正在查询表\u NAME1(profile\u data)表,该表没有名为Username的列
相反,我认为您希望查询表名(register\u TABLETABLE)表,因此请更改:-
Cursor cursor = db.rawQuery("SELECT * FROM "+ TABLE_NAME1 +" WHERE Username = 'admin' ",null);
致:-
补充意见:-
我不再得到一个错误,但它仍然没有显示
更正信息。我的显示数据显示“未设置”
方法。从我的if ELSE
假设您已经添加了数据并获得了上面的信息,那么Username很可能不等于表中的一行。尝试使用以下版本的DisplayData
进行调试:-
// Note changed to use recommended convenience query method
// Note closes cursor thus uses intermediate variable (rv) to allow close
public String DisplayData(String username,String column)
{
String rv = "Not set";
SQLiteDatabase db = this.getReadableDatabase();
//Cursor cursor = db.rawQuery("SELECT * FROM "+ TABLE_NAME +" WHERE Username =?",new String[]{username}); //<<<<< replaced
String whereclause = COL_2 + "=?";
String[] whereargs = new String[]{username};
Cursor cursor = db.query(TABLE_NAME,null,whereclause,whereargs,null,null,null);
//<<<<<<<<<< FOLLOWING CODE ADDED TO LOG DEBUG INFO >>>>>>>>>>
Log.d("DISPLAYDATAINFO","Display was called with Username as:- " +
username +
" for Column:- " +
column +
". The Cursor contains " +
String.valueOf(cursor.getCount()) +
" ."
);
//<<<<<<<<<< END OF ADDED DEBUG CODE >>>>>>>>>>
if(cursor.moveToFirst()){
rv = cursor.getString(cursor.getColumnIndexOrThrow(column));
}
cursor.close(); //<<<< SHOULD ALWAYS CLOSE CURSOR WHEN DONE WITH IT
return rv;
}
- 注5:因为在测试新数据时,每次运行都会插入新数据,因此上述数据表示第5次运行
05-18 23:11:40.342 2926-2926/fitness.fitness D/DISPLAYDATAINFO: Display was called with Username as:- Tom for Column:- Weight. The Cursor contains 0 .
Display was called with Username as:- Tom for Column:- Height. The Cursor contains 0 .
Display was called with Username as:- Tom for Column:- TargetWeight. The Cursor contains 0 .
Display was called with Username as:- Tom for Column:- TargetSteps. The Cursor contains 0 .
- i、 e.游标包含0=给定用户名不存在任何行(本例中为Tom)
- 检查用户名是否如预期的那样(注意字母大小写必须匹配,在上面,tom的行存在,但tom的行不存在,因此光标计数为0)
- 列检索似乎是正确的,但是,仍然要检查输出中的列是否如预期的那样(看不出它们是否不正确)
onCreate
方法。注意,数据库中的任何数据都将丢失。如果这是一个问题,那么您需要这样说,并包含数据库帮助器类的完整代码(基本上可以使用altertableaddcolumn\u定义要添加的列
),谢谢。不,如果我删除数据没有问题,我现在就试试!与更新的版本。我不再得到一个错误,但它仍然没有显示更正信息。我从displayData方法中得到“未设置”。从我的if Elseh你添加了数据吗?如果是,您确定它正在添加(插入)数据。也许可以添加一个临时方法来获取cursor.getCount()中的所有数据和日志。也许可以编辑你的问题,包括你是如何添加数据的。非常感谢我今晚给你一个机会!在重新测试之前,可能也会考虑清除应用程序的数据。我该怎么做?我现在刚刚测试过,我修正了表格并尝试了您的建议,但仍然得到“Weight column not Existence”(重量列不存在)以清除数据使用adb使用此命令adb shell pm clear packageName
或从设备设置->应用程序->应用程序->清除数据。。权重列在表1中,您什么时候查询此表?如果您使用相同的方法DisplayData
查询不同的表,您必须更改方法,否则它将不起作用。谢谢,我正在尝试显示来自“admin”的数据,该数据显示在另一个表中。那么,我该如何告诉它我希望显示这些用户的详细信息呢。因此,当用户注册的用户名和密码保存在表\u name中,并且当用户输入其详细信息时,其将保存在表\u name 1中。然后我如何“告诉”我的应用程序该用户有这些详细信息
05-18 23:08:25.429 2926-2926/fitness.fitness D/DISPLAYDATAINFO: Display was called with Username as:- Fred for Column:- Weight. The Cursor contains 5 .
Display was called with Username as:- Fred for Column:- Height. The Cursor contains 5 .
Display was called with Username as:- Fred for Column:- TargetWeight. The Cursor contains 5 .
Display was called with Username as:- Fred for Column:- TargetSteps. The Cursor contains 5 .
05-18 23:11:40.342 2926-2926/fitness.fitness D/DISPLAYDATAINFO: Display was called with Username as:- Tom for Column:- Weight. The Cursor contains 0 .
Display was called with Username as:- Tom for Column:- Height. The Cursor contains 0 .
Display was called with Username as:- Tom for Column:- TargetWeight. The Cursor contains 0 .
Display was called with Username as:- Tom for Column:- TargetSteps. The Cursor contains 0 .