Java 将android SQLite文本内容转储到textView中
我构建了一个应用程序,目前为止,它能够将文本添加到数据库中(还无法验证,但我杀死了FC)。然而,当我试图从数据库中读取数据时,它会显示出来,因为我不确定如何使用游标对象。我读了文档,这让我更加困惑。我有一个数据库,表“记录”和单列“文本”。当我的项目设法将文本输入数据库(通过EditText)时,我试图将此“文本”列中的所有数据库条目返回到textView中,但未成功 DB Helper内部类:Java 将android SQLite文本内容转储到textView中,java,android,sql,database,sqlite,Java,Android,Sql,Database,Sqlite,我构建了一个应用程序,目前为止,它能够将文本添加到数据库中(还无法验证,但我杀死了FC)。然而,当我试图从数据库中读取数据时,它会显示出来,因为我不确定如何使用游标对象。我读了文档,这让我更加困惑。我有一个数据库,表“记录”和单列“文本”。当我的项目设法将文本输入数据库(通过EditText)时,我试图将此“文本”列中的所有数据库条目返回到textView中,但未成功 DB Helper内部类: private class dbHelper extends SQLiteOpenHelper {
private class dbHelper extends SQLiteOpenHelper {
public dbHelper(Context context) {
super(context, DATABASE_NAME, null, DATABASE_VERSION);
}
@Override
public void onCreate(SQLiteDatabase db) {
System.out.println("create statement"+SQL_CREATE_ENTRIES);
try
{
db.execSQL(SQL_CREATE_ENTRIES);
}catch(SQLiteException sql)
{
sql.printStackTrace();
}
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
db.execSQL("DROP TABLE IF EXISTS records");
onCreate(db);
}
public void addRecord(String t) {
ContentValues values = new ContentValues(1);
values.put(RECORDS_COLUMN_TEXTS,t);
getWritableDatabase().insert(TABLE_NAME, RECORDS_COLUMN_TEXTS, values);
}
public Cursor getRecords() {
return getWritableDatabase().rawQuery("select * from " + TABLE_NAME, null);
}
}
在主类中:
private static final int DATABASE_VERSION = 1;
private static final String DATABASE_NAME = "CSCI598";
private static final String TABLE_NAME = "records";
public static final String RECORDS_COLUMN_TEXTS = "texts";
private dbHelper openHelper;
private static final String SQL_CREATE_ENTRIES = "CREATE TABLE " + TABLE_NAME + "(" + RECORDS_COLUMN_TEXTS + " TEXT PRIMARY KEY AUTOINCREMENT" + ");";
public void onClick(View v) {
TextView tv=(TextView)findViewById(R.id.textView1);
EditText et=(EditText)findViewById(R.id.editText1);
openHelper = new dbHelper(this);
switch(v.getId()) {
case R.id.fetch1:
Cursor cursor = openHelper.getRecords();
StringBuffer sb = new StringBuffer();
cursor.moveToFirst();
while(cursor.moveToNext()) {
sb.append(cursor.getString(0) + "\n");
}
tv.setText(sb.toString());
break;
case R.id.append1:
String txt=et.getText().toString();
openHelper.addRecord(txt);
break;
}
日志:
正如您所看到的,我可能正在尝试一些非常愚蠢的操作来单击fetch按钮,例如,
“openHelper.getRecords().toString()”
尝试将所有光标
返回到字符串。如何以最简单的方式交替执行此操作?好的,首先通过执行此操作可以从光标获取字符串
Cursor cursor = openHelper.getRecords();
StringBuffer sb = new StringBuffer();
while(cursor.moveToNext()) {
sb.append(cursor.getString(0) + "\n");
}
然后可以将其设置为文本视图
tv.setText(sb.toString);
这实际上应该是可行的
.替换这部分代码
case R.id.fetch1:
tv.setText(openHelper.getRecords().toString());
break;
用这个
case R.id.fetch1:
Cursor cursor = openHelper.getRecords();
StringBuffer sb = new StringBuffer();
while(cursor.moveToNext()) {
sb.append(cursor.getString(0) + "\n");
}
tv.setText(sb.toString);
break;
创建表格时,还将删除文本的自动增量
替换此项:
private static final String SQL_CREATE_ENTRIES = "CREATE TABLE " + TABLE_NAME + "(" + RECORDS_COLUMN_TEXTS + " TEXT PRIMARY KEY AUTOINCREMENT" + ");";
为此:
private static final String SQL_CREATE_ENTRIES = "CREATE TABLE " + TABLE_NAME + "(" + RECORDS_COLUMN_TEXTS + " TEXT" + ")";
还要在构造函数中添加表名,而不是数据库名。更改此项:
public dbHelper(Context context) {
super(context, DATABASE_NAME, null, DATABASE_VERSION);
}
为此:
public dbHelper(Context context) {
super(context, TABLE_NAME, null, DATABASE_VERSION);
}
能否添加LogCat的输出?是否要在文本视图中显示列中的所有值?为什么添加LogCat?我对从数据库打印文本的定义是否非常非法?我在寻找代码中的更正。。请阅读我的最后一段。@Peshal是的,我想在多行文本视图中每行显示“文本”列中的所有值。单击“附加”时,注意到logcat说没有这样的表:记录和错误插入文本:我在OP上的注释中添加了logcat错误。此外,此代码仍然提供FCs。不确定数据库是否已创建/工作?我更新了答案您是否更改为logcat中的“没有这样的表:编译时记录选择*从…”,然后是FC。为什么要对文本使用自动增量?我想这就是问题所在。你必须把它去掉。它主要用于数字签名的ID,是的。已删除自动增量,仍然存在相同问题,logcat。