簡體   English   中英

如何將 SQLite 中的查詢結果寫入變量

[英]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);
  • 第三個和第四個參數用於構建 WHERE 子句。 第一個是實際的子句在哪里? 使用第四個參數替換(綁定)。 這是在查詢中處理可變數據的推薦方法,因為它可以防止 SQL 注入。

或者

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....方法

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM