【问题标题】:Android Studio, how to retrieve data from Sqlite database and display it into textview?Android Studio,如何从 Sqlite 数据库中检索数据并将其显示到 textview 中?
【发布时间】:2017-07-03 01:11:31
【问题描述】:

我在我的应用程序中创建了一个 SQLite 数据库,并将数据插入其中。现在我想从中检索数据,但我只想插入一个数据并检索它,然后将其显示到 TextView 中。

public class Db_sqlit extends SQLiteOpenHelper{

    String TABLE_NAME = "BallsTable";

    public final static String name = "db_data";

    public Db_sqlit(Context context) {
        super(context, name, null, 1);
    }

    @Override
    public void onCreate(SQLiteDatabase db) {
        db.execSQL("create table "+TABLE_NAME+" (id INTEGER PRIMARY KEY AUTOINCREMENT, ball TEXT)");

    }

    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
        db.execSQL("DROP TABLE IF EXISTS "+TABLE_NAME);
        onCreate(db);
    }

    public boolean insertData(String balls){
      SQLiteDatabase db = this.getWritableDatabase();
      ContentValues contentValues = new ContentValues();

      contentValues.put("ball",balls);

      long result = db.insert(TABLE_NAME,null,contentValues);
      if(result == -1){
          return false;
      }
      else
          return true;
    }

    public void list_balls(TextView textView) {

        Cursor res = this.getReadableDatabase().rawQuery("select ball from "+TABLE_NAME+"",null);
        textView.setText("");
        while (res.moveToNext()){
            textView.append(res.getString(1));
        }  
    }
}

【问题讨论】:

  • 有什么问题?
  • 我没有问题,但我不知道如何从 Sqlite 数据库中检索数据,我只想从 Sqlite 数据库中检索一个数据并将其显示到 Textview 中,您能帮帮我吗?
  • 好的,但是您刚刚发布了您的SQLiteOpenHelper 课程,您从哪里调用insertData
  • 我想将数据插入到 SQliteIpenHelper 中,然后调用一个方法来获取这些数据。像我想在 SQliteOpenHelper 中设置默认数据可以吗?
  • 我明白这个问题.. 是的,你可以

标签: java android database sqlite


【解决方案1】:

这是我如何实现这一目标的示例。

在本例中,我将 storeretrieveupdatedelete 学生姓名和年龄。


先创建一个类,我叫我的

DBManager.java

public class DBManager {
    private Context context;
    private SQLiteDatabase database;
    private SQLiteHelper dbHelper;

    public DBManager(Context c) {
        this.context = c;
    }

    public DBManager open() throws SQLException {
        this.dbHelper = new SQLiteHelper(this.context);
        this.database = this.dbHelper.getWritableDatabase();
        return this;
    }

    public void close() {
        this.dbHelper.close();
    }

    public void insert(String name, String desc) {
        ContentValues contentValue = new ContentValues();
        contentValue.put(SQLiteHelper.NAME, name);
        contentValue.put(SQLiteHelper.AGE, desc);
        this.database.insert(SQLiteHelper.TABLE_NAME_STUDENT, null, contentValue);
    }


    public Cursor fetch() {
        Cursor cursor = this.database.query(SQLiteHelper.TABLE_NAME_STUDENT, new String[]{SQLiteHelper._ID, SQLiteHelper.NAME, SQLiteHelper.AGE}, null, null, null, null, null);
        if (cursor != null) {
            cursor.moveToFirst();
        }
        return cursor;
    }

    public int update(long _id, String name, String desc) {
        ContentValues contentValues = new ContentValues();
        contentValues.put(SQLiteHelper.NAME, name);
        contentValues.put(SQLiteHelper.AGE, desc);
        return this.database.update(SQLiteHelper.TABLE_NAME_STUDENT, contentValues, "_id = " + _id, null);
    }

    public void delete(long _id) {
        this.database.delete(SQLiteHelper.TABLE_NAME_STUDENT, "_id=" + _id, null);
    }
}

然后创建一个SQLiteOpenHelper我叫我的

SQLiteHelper.java

public class SQLiteHelper extends SQLiteOpenHelper {
    public static final String AGE = "age";
    private static final String CREATE_TABLE_STUDENT = " create table STUDENTS ( _id INTEGER PRIMARY KEY AUTOINCREMENT, name TEXT NOT NULL , age TEXT );";
    private static final String DB_NAME = "STUDENTS.DB";
    private static final int DB_VERSION = 1;
    public static final String NAME = "name";
    public static final String TABLE_NAME_STUDENT = "STUDENTS";
    public static final String _ID = "_id";

    public SQLiteHelper(Context context) {
        super(context, DB_NAME, null, 1);
    }

    public void onCreate(SQLiteDatabase db) {
        db.execSQL(CREATE_TABLE_STUDENT);
    }

    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
        db.execSQL("DROP TABLE IF EXISTS STUDENTS");
        onCreate(db);
    }   
}

添加:

在此示例中,我从EditText 获取文本,当单击按钮时,我检查EditText 是否为空。如果它不为空并且学生不存在,我将学生姓名和年龄插入数据库。我显示一个Toast,让用户知道状态:

btnAdd.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View view) {
        if (edtName.getText().toString().trim().length() == 0) {
            Toast.makeText(getApplicationContext(), "Please provide your students name", Toast.LENGTH_SHORT).show();
        } else{
            try {
                if (edtAge.getText().toString().trim().length() != 0) {
                    String name = edtName.getText().toString().trim();
                    String age = edtAge.getText().toString().trim();
                    String query = "Select * From STUDENTS where name = '"+name+"'";
                    if(dbManager.fetch().getCount()>0){
                        Toast.makeText(getApplicationContext(), "Already Exist!", Toast.LENGTH_SHORT).show();
                    }else{
                        dbManager.insert(name, age);
                        Toast.makeText(getApplicationContext(), "Added successfully!", Toast.LENGTH_SHORT).show();                           
                    }

                } else {
                    Toast.makeText(getApplicationContext(), "please provide student age!", Toast.LENGTH_SHORT).show();                           
                }
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    }  
});

更新:

在这里,我在EditText 中获取文本,并在单击按钮时更新学生。您也可以将以下内容放在try/catch 中,以确保更新成功。

btnupdate.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View view) {
        String name = nameText.getText().toString();
        String age = ageText.getText().toString();
        dbManager.update(_id, name, age);
        Toast.makeText(getApplicationContext(), "Updated successfully!", Toast.LENGTH_SHORT).show();
    }
});

删除:

dbManager.delete(_id);
Toast.makeText(getApplicationContext(), "Deleted successfully!", Toast.LENGTH_SHORT).show();

获取:

我在这里获取学生的姓名并将其显示在TextView

DBManager dbManager = new DBManager(getActivity());
dbManager.open();

Cursor cursor = dbManager.fetch();
cursor.moveToFirst();
final TextView studentName = (TextView) getActivity().findViewById(R.id.nameOfStudent);
studentName.settext(cursor.getString(0));

【讨论】:

  • 非常感谢您的努力,但我不想从 textview 获取数据并将其插入数据。我想从 db_sqlit 检索数据,当我检索它时,我会将其设置在 textview 中
  • 是的,我想检索它,但我只插入一个字符串,我想检索它而不是检索所有数据,当我检索它时,我想将它设置到 textview 中
  • 我看到了你的更新,但很抱歉我不知道怎么写。我没有找到方法 openDatabase() 和 myDatabaseHelper 对象,请问你可以用另一种方法吗?
  • 我会更新我是怎么做的,然后你可以决定你想怎么做
  • 你好@HB。你能帮我解决一下这个stackoverflow.com/questions/61927770/fetch-text-from-sq-lite吗?
【解决方案2】:

然后我已经在我想使用 cursor.moveToNext() 显示的主 java 类中实现代码

searchButton.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            Cursor result = databaseSQLite2.searchData(searchET.getText().toString());
            while (result.moveToNext()){
                searchresultTV.setText(result.getString(2));
            }
        }
    });

【讨论】:

    【解决方案3】:

    为了从 sqlite 获取数据,我在 DatabaseHelper 类中完成了这个方法

    public Cursor searchData(String id){
        SQLiteDatabase sqLiteDatabase = this.getWritableDatabase();
        //String qry = "SELECT * FROM "+TABLE_NAME+" WHERE ID="+id;
        Cursor cursor = sqLiteDatabase.rawQuery("SELECT * FROM "+TABLE_NAME+" WHERE ID="+id,null);
        return cursor;
    }
    

    【讨论】:

    • 这没关系,但问题来了
    • 当你提供答案时,不要只提供一段代码。请详细说明代码的作用以及为什么它会解决问题。
    猜你喜欢
    • 2018-02-26
    • 2012-08-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-12-28
    • 2020-03-29
    • 2020-09-18
    相关资源
    最近更新 更多