[英]How to write the result of a query in SQLite to a variable
我得到了一個代碼:我得到了一個帶有一個表的 SQLite 數據庫。:
package com.example.kanlane;
import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
import androidx.annotation.Nullable;
public class SQLite extends SQLiteOpenHelper {
public static final int DATABASE_VERSION = 1;
public static final String DATABASE_NAME = "sosDB";
public static final String TABLE_CONTACTS = "contacts";
public static final String KEY_ID = "_id";
public static final String KEY_EMAIL = "email";
public static final String KEY_USERBINDER = "user_binder";
public SQLite(Context context) {
super(context, DATABASE_NAME, null, DATABASE_VERSION);
}
@Override
public void onCreate(SQLiteDatabase db) {
db.execSQL("create table " + TABLE_CONTACTS + "(" + KEY_ID + " integer primary key," + KEY_EMAIL +
" text," + KEY_EMAIL + " text" + ")");
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
db.execSQL("drop table if exists " + TABLE_CONTACTS);
onCreate(db);
}
}
注冊將數據插入 SQLite 的活動,它插入電子郵件和 user_binder 字符串:
public class Register extends AppCompatActivity {
//Variables
EditText mName, mEmail, mPassword, mUser_binder;
SQLite sqLite;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_register);
mName = findViewById(R.id.Name);
mEmail = findViewById(R.id.Email);
mPassword = findViewById(R.id.Password);
mUser_binder = findViewById(R.id.user_bind);
mLoginbtn = findViewById(R.id.login_mainscreen);
mRegisterBtn = findViewById(R.id.register_btn);
sqLite = new SQLite(this);
mRegisterBtn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
String id = mDataBase.getKey();
String name = mName.getText().toString().trim();
String email = mEmail.getText().toString().trim();
String password = mPassword.getText().toString().trim();
String user_binder = mUser_binder.getText().toString().trim();
SQLiteDatabase database = sqLite.getWritableDatabase();
ContentValues contentValues = new ContentValues();
contentValues.put(SQLite.KEY_EMAIL, email);
contentValues.put(SQLite.KEY_USERBINDER, user_binder);
database.insert(SQLite.TABLE_CONTACTS, null, contentValues);
User newUser = new User(id, name, email, password, user_binder);
mDataBase.push().setValue(newUser);
if(TextUtils.isEmpty(email)){
mEmail.setError("Введите почту...");
return;
}
if(TextUtils.isEmpty(password)){
mEmail.setError("Введите пароль...");
return;
}
if(password.length() < 8 ){
mPassword.setError("Пароль должен состоять из 8-ми символов.");
return;
}
fAuth.createUserWithEmailAndPassword(email, password).addOnCompleteListener(new OnCompleteListener<AuthResult>() {
@Override
public void onComplete(@NonNull Task<AuthResult> task) {
if(task.isSuccessful()){
Toast.makeText(Register.this, "Пользователь зарегистрирован.",Toast.LENGTH_LONG).show();
startActivity(new Intent(getApplicationContext(), MainActivity.class));
}else{
Toast.makeText(Register.this, "Произошла ошибка. Повторите." +
task.getException().getMessage(),Toast.LENGTH_LONG).show();
}
}
});
}
});
}
}
而 MainActivity 需要從 SQLite 讀取數據並將其放入變量中(String emailfrom,emailto;)
public class MainActivity extends AppCompatActivity {
Button mAccountBtn;
Button mSosButton;
DatabaseReference databaseReference;
SQLite sqLite;
//EmailTo это Email
//EmailFrom это UserBinder
@Override
protected void onCreate (Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mAccountBtn = findViewById(R.id.account_btn);
mSosButton = findViewById(R.id.sos_button);
sqLite = new SQLite(this);
SQLiteDatabase database = sqLite.getWritableDatabase();
}
我只需要讀取注冊活動插入的數據並將其放入字符串中。 怎么做?
我只需要讀取注冊活動插入的數據並將其放入字符串中。 怎么做?
您可以通過返回Cursor的合適SQLiteDatabase方法使用查詢選擇適當的數據將數據提取到Cursor中。 然后就是使用Cursor的方法遍歷返回的Cursor的問題。
兩個適合查詢的 SQLiteDatabase 方法是query方法和rawQuery 。 前者是一種基於傳遞給方法的參數(其中有四個)構建底層 SQL 的便捷方法。 后者傳遞 SQL 字符串。
例如,假設您想獲取所提供電子郵件的數據,您可以使用:-
Cursor csr = database.query(TABLE_CONTACTS,null,"KEY_EMAIL=?",new String[]{"the_email_address"},null,null,null);
或者
Cursor csr = database.rawQuery("SELECT * FROM " + TABLE_CONTACTS + " WHERE " + KEY_EMAIL + "=?",new String[]{"the_email_address"});
您通常使用move...
方法遍歷光標。 需要注意的是,Cursor 最初會定位在第一行之前的位置。 所以你必須移動到合適的行。 在上述情況下,您將只尋找一行; 因此,您可能想要使用moveToFirst
方法。 請注意,如果可以進行移動(有一行),則返回 true;如果無法進行移動(沒有行),則返回 false。
所以你可能想要
if (csr.moveToFirst()) {
....
}
csr.close();
您使用get...
方法從 Cursor 中提取數據以從列中獲取值。
因此,要獲取所有數據....( if
語句的主體)可能是:-
String id = csr.getString(0);
String email = csr.getString(1);
String user_binder = csr.getString(2);
這使用 Cursor 的get....
方法
見https://developer.android.com/reference/android/database/Cursor
請注意,這假定表創建已更正,因為根據您的代碼,您有兩個名為 email 的列(這將導致錯誤),而它看起來應該是 email 列和 user_binder 列。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.