从 Android Studio 中的 SQLite 数据库中以字符串形式检索数据
Posted
技术标签:
【中文标题】从 Android Studio 中的 SQLite 数据库中以字符串形式检索数据【英文标题】:Retrieve Data As String From SQLite Database in Android Studio 【发布时间】:2019-05-27 17:41:00 【问题描述】:我想将名称保存在 SQLite 数据库中,稍后在另一个活动中我想将该名称作为字符串值检索。但我无法从数据库中获取数据。请帮帮我。我的代码如下,
数据库助手:
private static final String TAG = "DatabaseHelper";
private static final String TABLE_NAME = "user";
private static final String COL1 = "ID";
private static final String COL2 = "name";
public void onCreate(SQLiteDatabase db) String createTable =
"CREATE TABLE " + TABLE_NAME + " (ID INTEGER PRIMARY KEY
AUTOINCREMENT, " + COL2 +" TEXT)";
db.execSQL(createTable);
public boolean addData(String item)
SQLiteDatabase db = this.getWritableDatabase();
ContentValues contentValues = new ContentValues();
contentValues.put(COL2, item);
Log.d(TAG, "addData: Adding " + item + " to " + TABLE_NAME);
long result = db.insert(TABLE_NAME, null, contentValues);
if (result == -1)
return false;
else
return true;
主活动:
mDatabaseHelper=new DatabaseHelper(this);
Username=(EditText)findViewById(R.id.user);
saveBtn=(Button)findViewById(R.id.button);
saveBtn.setOnClickListener(new View.OnClickListener()
@Override
public void onClick(View view)
String newEntry = Username.getText().toString();
AddData(newEntry);
Username.setText("");
Intent intent = new Intent(MainActivity.this, HomeActivity.class);
startActivity(intent);
);
public void AddData(String newEntry)
boolean insertData = mDatabaseHelper.addData(newEntry);
家庭活动:
public class HomeActivity extends AppCompatActivity
DatabaseHelper mDatabaseHelper;
String Username;
@Override
protected void onCreate(Bundle savedInstanceState)
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_home);
mDatabaseHelper = new DatabaseHelper(this);
在这里,在这个家庭活动中,我想将用户名作为字符串获取,但我不知道该怎么做。请帮帮我...
【问题讨论】:
请修正代码,使其成为有效的 Java 代码(奇怪的颜色编码是一种提示),并请修正代码格式,即缩进,以便人类可读。 【参考方案1】:要检索数据,请运行将数据提取到光标中的查询。游标将由 0-n 行组成,并且将具有查询中定义的尽可能多的列。然后您移动行并使用适当的光标get?????方法获取实际数据。
例如,您可以将以下方法添加到 DatabaseHelper 中:-
public String getName(long id)
String rv = "not found";
SqliteDatabase db = this.getWritableDatabase();
String whereclause = "ID=?";
String[] whereargs = new String[]String.valueOf(id);
Cursor csr = db.query(TABLE_NAME,null,whereclause,whereargs,null,null,null);
if (csr.moveToFirst())
rv = csr.getString(csr.getColumnIndex(COL2));
return rv;
String name = mDatabaseHelper.getName(1);
可以使用上述内容。
【讨论】:
我是按照你的代码做到的。我在我的数据库助手中添加了这个 getname 方法,然后在我的 HomeActivity 中我只是将它称为字符串。字符串名称=mdatabasehelper.getName(1);非常感谢@MikeT @RehanSarwar 很好,如果您认为其中一个答案回答了您的问题,您现在应该勾选其中一个作为答案。【参考方案2】:您的数据库助手:
private static final String TAG = "DatabaseHelper";
private static final String TABLE_NAME = "user";
private static final String COL1 = "ID";
private static final String COL2 = "name";
private static final String createTable = "CREATE TABLE " + TABLE_NAME + " (" + COL1 +" INTEGER PRIMARY KEY AUTOINCREMENT, " + COL2 +" TEXT)"; // You have written ID inplace of COL1
public DatabaseHelper(Context context)
super(context,DB_NAME,null,1);
public void onCreate(SQLiteDatabase db)
db.execSQL(createTable);
public boolean insertData(String name)
SQLiteDatabase sqLiteDatabase = this.getWritableDatabase();
ContentValues contentValues1 = new ContentValues();
contentValues1.put(COL2,name);
long result1 = sqLiteDatabase.insert(TABLE_NAME,null,contentValues1);
return result1 != -1;
public Cursor viewData()
SQLiteDatabase sqLiteDatabase = this.getReadableDatabase();
Cursor cursor ;
String query = "Select * from " +TABLE_NAME;
cursor= sqLiteDatabase.rawQuery(query, null);
return cursor;
您的主要活动:
mDatabaseHelper=new DatabaseHelper(this);
Username=(EditText)findViewById(R.id.user);
saveBtn=(Button)findViewById(R.id.button);
saveBtn.setOnClickListener(new View.OnClickListener()
@Override
public void onClick(View view)
String newEntry = Username.getText().toString();
mDatabaseHelper.insertData(newEntry);
Username.setText("");
Intent intent = new Intent(MainActivity.this, HomeActivity.class);
startActivity(intent);
);
您的家庭活动:
public class HomeActivity extends AppCompatActivity
DatabaseHelper mDatabaseHelper;
String Username;
ArrayList<String> listItem;
ArrayAdapter adapter;
ListView listView;
@Override
protected void onCreate(Bundle savedInstanceState)
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_home);
mDatabaseHelper = new DatabaseHelper(this);
listView = (ListView) findViewById(R.id.listView);
listItem = new ArrayList<>();
viewData1();
private void viewData1()
Cursor cursor = mDatabaseHelper.viewData();
if (cursor.getCount() == 0)
Toast.makeText(this, "No data to show", Toast.LENGTH_SHORT).show();
else
while (cursor.moveToNext())
Log.i("message","Data got");
listItem.add(cursor.getString(1)); // Adding data received to a Listview
adapter = new ArrayAdapter<>(this, android.R.layout.simple_list_item_1, listItem);
listView.setAdapter(adapter);
【讨论】:
【参考方案3】:看看这个库
很容易实现
https://github.com/wisdomrider/SqliteClosedHelper
【讨论】:
谢谢你的建议,我会检查的。以上是关于从 Android Studio 中的 SQLite 数据库中以字符串形式检索数据的主要内容,如果未能解决你的问题,请参考以下文章
从 Android Studio 中的片段将数据写入 Firebase
从 Android Studio 中的 URL 解析 XML
使用 Android Studio 从 Firebase 中的某个位置检索数据
尝试从 Android Studio 中的 json 对象中检索 json 值