android - 插入这些值后如何在数据库中查看这些值,以便以后访问它们?
问题描述
我目前正在 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);
///////////////////////////////////////
然后这是我为值和助手类创建的表
//////////////////////////////////////
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();
我一直试图获得的是从数据库中读取新数据并显示它的成功方法,以便用户可以看到他们角色的最终结果。
解决方案
这显示了一种获取值的方法,以便您可以查看它们:-
// 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 is 1 name is Character className is Fighter race is 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();
}
});
}
此示例导致:-
推荐阅读
- xcode - 迁移到 XCode12 后 UIWebview 弃用又回来了
- r - 糖尿病数据的时间序列分析
- c++ - C ++中的Opencv将图像输出到网络
- django - 如何将唯一模型列表添加到 django 模型
- python - TypeError: cannot concatenate a non-NDFrame object 只有当我在参数化函数中运行相同的脚本时才会出现
- unix - 如何 grep list.txt 打印名称与列表部分匹配的文件
- python - Django-crontab - 错误:sh:第 1 行:/usr/bin/crontab:没有这样的文件或目录
- java - 如何从堆的 ArrayList 实现中修剪每一片叶子?
- python-3.x - 在 Python 中使用 doi 自动下载
- javascript - 光滑的滑块动态内容不会调整高度