Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/202.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
Android SQL查询不创建我的列?_Android_Android Sqlite_Android Database - Fatal编程技术网

Android SQL查询不创建我的列?

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

我正在尝试创建一个健身应用程序,其中数据库保存用户名和密码。 然后输入保存到第二个表中的详细信息。这是我的助手

我得到的错误是我的“用户名列不存在” 但是当我使用db browser for sqlite查看我的表时 它显示我创建的表和表中的数据

更新:我创建了一个表来存储我所有的数据,现在它还没有被接收,我的显示方法显示为“未设置”

 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)

  • 列检索似乎是正确的,但是,仍然要检查输出中的列是否如预期的那样(看不出它们是否不正确)

您在DisplayData()中传递了什么?显示错误登录如果更改了数据库结构,请尝试卸载以前的版本,然后重新生成。除此之外,我建议使用。作为我的错误日志,比如logcat?我根本没有改变我的数据库结构。我想做的是让display方法获取用户名,然后显示用户输入的数据。我使用Username=admin查看为什么我的报税表“未设置”。我使用会话来保存用户名。然后得到错误/抛出“column Weight not exist”,否则以前是其中的Username=?,新字符串[]{Username});是的,我发现了那个错误并改变了它。现在,我的错误已更改为“列用户名不存在”,如果该错误与修改的表(register_table)(添加了列)有关,请尝试删除应用程序的数据或卸载应用程序,然后重新运行应用程序。只有在首次创建数据库时才会调用
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 .