插入它们后如何在数据库中查看这些值,以便以后可以访问它们?

时间:2019-04-21 23:17:07

标签: android database android-sqlite

我目前正在android studio中设置dungeons&Dragons移动应用程序,并且希望能够查看当前保存到数据库“ CharacterDB”中的角色的值。如何以一种可以让我找到值以将其拉出以供以后使用的方式实现呢? 任何帮助或建议都将走很长一段路,谢谢。

我已经尝试过使用查询方法来遍历当前行中的项目选择,但无济于事。每当我尝试使用游标设置正确的查询时,它都会说,当我尝试遍历游标时,游标将为NULL。

////////////////////// 我目前有什么 ////////////////////

CharacterBaseHelper helper = new CharacterBaseHelper(getContext()); 

SQLiteDatabase Character = helper.getReadableDatabase();

ContentValues values = new ContentValues();

//Inserting test values into the Database

values.put(CharacterDB.CharacterTable.CharactersColumns.NAME, 
"Character");

values.put(CharacterDB.CharacterTable.CharactersColumns.CLASS_NAME, 
"Fighter"  );

values.put(CharacterDB.CharacterTable.CharactersColumns.RACE, "Human"  );

//saving the row ID for late use

Long newCharacterRowId = 
Character.insert(CharacterDB.CharacterTable.TABLE_NAME, null , values);

/////////////////////////////////////////////////

然后这就是我要为值和帮助程序类创建的表

////////////////////////////////////////////// < / p>

 public final class CharacterTable
{
    public static final String TABLE_NAME = "character";

    public  final class CharactersColumns implements BaseColumns
    {
        public static final String NAME = "name";
        public static final String CLASS_NAME = "className";
        public static final String RACE = "race";


}

//////////////////

助手类

//////////////////

public class CharacterBaseHelper extends SQLiteOpenHelper {

private static final int VERSION = 1;

private static final String DATABASE_NAME = "characterDB.db";


public CharacterBaseHelper(Context context){

 super(context, DATABASE_NAME, null, VERSION);

 }

@Override

public void onCreate(SQLiteDatabase db)
{

db.execSQL(
 "create table " + CharacterTable.TABLE_NAME + "(" + " _id integer primary 
key autoincrement, "
            + CharacterTable.CharactersColumns.NAME
            + "," + CharacterTable.CharactersColumns.CLASS_NAME
            + "," + CharacterTable.CharactersColumns.RACE + ")");

////////////////////

最后,我之前尝试过的

///////////////////

String[] projection = {
                                BaseColumns._ID,

CharacterDB.CharacterTable.CharactersColumns.NAME,

CharacterDB.CharacterTable.CharactersColumns.HIT_DICE,
                        };

                    String selection = CharacterDB.CharacterTable.CharactersColumns.NAME + " = ?";
                    String[] selectionArgs = { "Character" };

                    String sortOrder =
                            CharacterDB.CharacterTable.CharactersColumns.HIT_DICE + " DESC";

                    Cursor cursor = Character.query(
                            CharacterDB.CharacterTable.TABLE_NAME,   // The table to query
                            projection,             // The array of columns to return (pass null to get all)
                            selection,              // The columns for the WHERE clause
                            selectionArgs,          // The values for the WHERE clause
                            null,                   // don't group the rows
                            null,                   // don't filter by row groups
                            sortOrder               // The sort order
                    );
                    List item = new ArrayList<>();
                    while(cursor.moveToNext()) {
                        long itemId = cursor.getLong(
                                cursor.getColumnIndexOrThrow(CharacterDB.CharacterTable.CharactersColumns._ID));
                        item.add(itemId);
                    }
                    cursor.close();

我一直试图获得的成功方法是从数据库读取并显示新数据,以便用户可以看到其角色的最终结果。

1 个答案:

答案 0 :(得分:3)

这显示了一种获取值的方法,因此您可以查看它们:-

    // all rows are gotten
    Cursor AllCharacter = Character.query(CharacterTable.TABLE_NAME,null,null,null,null,null,null);
    while (AllCharacter.moveToNext()) {
        Log.v("ALLCHARACTER", BaseColumns._ID + " is " + AllCharacter.getLong(AllCharacter.getColumnIndex(BaseColumns._ID))
                + " " + CharacterTable.CharactersColumns.NAME + " is " + AllCharacter.getString(AllCharacter.getColumnIndex(CharacterTable.CharactersColumns.NAME))
                + " " + CharacterTable.CharactersColumns.CLASS_NAME + " is " + AllCharacter.getString(AllCharacter.getColumnIndex(CharacterTable.CharactersColumns.CLASS_NAME))
                + " " + CharacterTable.CharactersColumns.RACE + " is " + AllCharacter.getString(AllCharacter.getColumnIndex(CharacterTable.CharactersColumns.RACE))
        );
    }

日志将有一行

  

ALLCHARACTER:_id是1名称是Character className是Fighter race是Human

想要查找您可以使用的特定示例:-

    // getting a specific row examle using the _id column
    Cursor OneCharacter = Character.query(CharacterTable.TABLE_NAME,

            // Pramater 2 columns specific null all columns
            new String[]{
                    CharacterTable.CharactersColumns.NAME,
                    CharacterTable.CharactersColumns.CLASS_NAME,
                    CharacterTable.CharactersColumns.RACE,
                    BaseColumns._ID
            },
            BaseColumns._ID + "=?", // WHERE bit no WHERE writting use ? for no SQL injectioning with 4th paramter
            new String[]{"1"}, // 1th ? changes 1st ? 3rd parameter and soing on
            null,null,null
    );

您可以使用ListView通过SimpleCursorAdapter查看很多行。例如

    //Add another row the ListView
    values.clear();
    values.put(CharacterTable.CharactersColumns.NAME,"CharacaterMore");
    values.put(CharacterTable.CharactersColumns.CLASS_NAME,"Defencer");
    values.put(CharacterTable.CharactersColumns.RACE,"Maceman");
    Character.insert(CharacterTable.TABLE_NAME,null,values);

    // all rows
    // Using final is not good but for ease has been used
    final Cursor AllCharacter = Character.query(CharacterTable.TABLE_NAME,null,null,null,null,null,null);
    while (AllCharacter.moveToNext()) {
        Log.v("ALLCHARACTER", BaseColumns._ID + " is " + AllCharacter.getLong(AllCharacter.getColumnIndex(BaseColumns._ID))
                + " " + CharacterTable.CharactersColumns.NAME + " is " + AllCharacter.getString(AllCharacter.getColumnIndex(CharacterTable.CharactersColumns.NAME))
                + " " + CharacterTable.CharactersColumns.CLASS_NAME + " is " + AllCharacter.getString(AllCharacter.getColumnIndex(CharacterTable.CharactersColumns.CLASS_NAME))
                + " " + CharacterTable.CharactersColumns.RACE + " is " + AllCharacter.getString(AllCharacter.getColumnIndex(CharacterTable.CharactersColumns.RACE))
        );
    }


    // ListView example
    ListView AllCharacterListView = (ListView) findViewById(R.id.allcharacter);
    SimpleCursorAdapter AllCharacterListAdapter = new SimpleCursorAdapter(this, // getContext if fragment
            android.R.layout.simple_list_item_2,
            AllCharacter,
            new String[]{CharacterTable.CharactersColumns.NAME, CharacterTable.CharactersColumns.RACE},
            new int[]{android.R.id.text1,android.R.id.text2},
            0
    );
    AllCharacterListView.setAdapter(AllCharacterListAdapter);
    // Adding onItemClick listener to show a Toast for the clicked item
    AllCharacterListView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
        @Override
        public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
            Toast.makeText(view.getContext(),
                    "Item clicking sees " + String.valueOf(id)
                            + AllCharacter.getString(AllCharacter.getColumnIndex(CharacterTable.CharactersColumns.NAME)) ,
                    Toast.LENGTH_LONG).show();
        }
    });
}

此示例导致:-

enter image description here