Java 将android SQLite文本内容转储到textView中

Java 将android SQLite文本内容转储到textView中,java,android,sql,database,sqlite,Java,Android,Sql,Database,Sqlite,我构建了一个应用程序,目前为止,它能够将文本添加到数据库中(还无法验证,但我杀死了FC)。然而,当我试图从数据库中读取数据时,它会显示出来,因为我不确定如何使用游标对象。我读了文档,这让我更加困惑。我有一个数据库,表“记录”和单列“文本”。当我的项目设法将文本输入数据库(通过EditText)时,我试图将此“文本”列中的所有数据库条目返回到textView中,但未成功 DB Helper内部类: private class dbHelper extends SQLiteOpenHelper {

我构建了一个应用程序,目前为止,它能够将文本添加到数据库中(还无法验证,但我杀死了FC)。然而,当我试图从数据库中读取数据时,它会显示出来,因为我不确定如何使用游标对象。我读了文档,这让我更加困惑。我有一个数据库,表“记录”和单列“文本”。当我的项目设法将文本输入数据库(通过EditText)时,我试图将此“文本”列中的所有数据库条目返回到textView中,但未成功

DB Helper内部类:

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。