简体   繁体   English

数据库查询在SQLite会议室中不起作用

[英]Database query is not working in SQLite room

I am new to android. 我是Android新手。 I am trying to learn Android and faced a problem. 我正在尝试学习Android,但遇到了问题。 While working with SQLite, my insert operation is being executed. 在使用SQLite时,正在执行我的插入操作。 My loadAll User is also being executed. 我的loadAll用户也正在执行。 But while using parameters for retrieve user, the operation is not being executed. 但是在使用参数检索用户时,该操作未执行。 I am sharing the codes in the following.Thanks in advance for helping me out. 我在下面共享代码。在此先感谢您的帮助。

AppHome.java AppHome.java

package com.impresscapital.iclapp;

import android.content.Intent;
import android.graphics.Color;
import android.graphics.drawable.ColorDrawable;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.TextView;

import com.impresscapital.iclapp.dbobj.User;
import com.impresscapital.iclapp.util.ToastMessage;
import com.impresscapital.iclapp.util.UserSigninAuthentication;

public class AppHome extends AppCompatActivity {

    private TextView mUsernameTextView;
    private TextView mPasswordTextView;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_app_home);

        initiateUI();
    }

    private void initiateUI(){
        mUsernameTextView=findViewById(R.id.editTextUsername);
        mPasswordTextView=findViewById(R.id.editTextPassword);
    }

    public void signUpPageLoader(View view){
        Intent registrationPageIntent=new Intent(AppHome.this,RegistrationPage.class);
        startActivity(registrationPageIntent);

    }

    @Override
    protected void onResume() {
        super.onResume();
    }

    public void signInUser(View view){
        try {
            String username=mUsernameTextView.getText().toString();
            String password=mPasswordTextView.getText().toString();
            UserSigninAuthentication userSigninAuthentication=new UserSigninAuthentication();
            if (userSigninAuthentication.authenticate(username, password, getApplicationContext())) {
                Intent userHomePageIntent = new Intent(AppHome.this, UserHome.class);
                startActivity(userHomePageIntent);
            } else {
                mPasswordTextView.setBackground(new ColorDrawable(Color.RED));
                mUsernameTextView.setBackground(new ColorDrawable(Color.RED));
                ToastMessage.toastMessage(this, "Username or password do not match");
                onResume();
            }
        }catch (NullPointerException e){
            mPasswordTextView.setBackground(new ColorDrawable(Color.RED));
            mUsernameTextView.setBackground(new ColorDrawable(Color.RED));
            ToastMessage.toastMessage(this, "Username or password do not match");

        }
    }
}

UserSigninAuthentication.java UserSigninAuthentication.java

package com.impresscapital.iclapp.util;

import android.content.Context;
import android.util.Log;

import com.impresscapital.iclapp.database.AppDatabase;
import com.impresscapital.iclapp.database.AppExecutors;
import com.impresscapital.iclapp.dbobj.User;

public class UserSigninAuthentication {

    private AppDatabase mDb;
    private Boolean isAuthenticate=false;

    public boolean authenticate(final String username, final String password,Context context){
        dataBaseOperation(username,password,context);
        return isAuthenticate;
    }

    public void dataBaseOperation(final String username, final String password, final Context context){
        AppExecutors.getsInstance().getDiskIO().execute(new Runnable() {
            @Override
            public void run() {
                try {
                    Log.d("DB","Inside db opt");
                    User user = mDb.userDao().loadUser(username, password);
                    if (user != null){
                        Log.d("DB","user found");
                        //ToastMessage.toastMessage(context,user.getUserID()+user.getEmail());
                        isAuthenticate = true;
                    }
                }catch (NullPointerException n){
                    isAuthenticate=false;
                }
            }
        });
    }
}

UserDao.java UserDao.java

package com.impresscapital.iclapp.dao;

import android.arch.persistence.room.Dao;
import android.arch.persistence.room.Delete;
import android.arch.persistence.room.Insert;
import android.arch.persistence.room.Query;
import android.arch.persistence.room.Update;

import com.impresscapital.iclapp.dbobj.User;

import java.util.List;

@Dao
public interface UserDao {


    @Query("Select * from user_table where username=:username and password=:password")
    User loadUser(String username,String password);

    @Query("Select * from user_table")
    List<User> retrieveAllUser();
    @Insert
    void registerUser(User user);

    @Update
    void updateUser(User user);

    @Delete
    void deleteUser(User user);
}

I have retrieved all the users in another class. 我已经检索了另一个类中的所有用户。 The log code is 日志代码是

List<User> users=mDb.userDao().retrieveAllUser();
                for(User user1:users){
                    Log.d("Db working",user1.getUsername()+" "+user1.getPassword());
                }
                finish();

And the log message: 和日志消息:

2018-10-29 13:11:47.210 11488-13813/com.impresscapital.iclapp D/Db working: y y
2018-10-29 13:11:47.210 11488-13813/com.impresscapital.iclapp D/Db working: g 1

The AppDatabase Class is uploaded for your convenience: 为方便起见,上传了AppDatabase类:

AppDatabase.claa AppDatabase.claa

 package com.impresscapital.iclapp.database; import android.arch.persistence.room.Database; import android.arch.persistence.room.Room; import android.arch.persistence.room.RoomDatabase; import android.arch.persistence.room.TypeConverter; import android.arch.persistence.room.TypeConverters; import android.content.Context; import android.util.Log; import com.impresscapital.iclapp.dao.UserDao; import com.impresscapital.iclapp.dbobj.User; import com.impresscapital.iclapp.util.DateConverter; @Database(entities = {User.class},version = 1, exportSchema = false) @TypeConverters({DateConverter.class}) public abstract class AppDatabase extends RoomDatabase { private static final String LOG_CAT=AppDatabase.class.getSimpleName(); private static final Object LOCK=new Object(); private static final String DATABASE_NAME="db_icl_app"; private static AppDatabase sInstance; public static AppDatabase getInstance(Context context){ if(sInstance==null){ synchronized (LOCK){ Log.d(LOG_CAT,"Creating new Database"); sInstance=Room.databaseBuilder(context.getApplicationContext(), AppDatabase.class,AppDatabase.DATABASE_NAME).build(); } } Log.d(LOG_CAT,"Getting the database instance"); return sInstance; } public abstract UserDao userDao(); } 

UserSigninAuthentication.class UserSigninAuthentication.class

 package com.impresscapital.iclapp.util; import android.content.Context; import android.util.Log; import com.impresscapital.iclapp.database.AppDatabase; import com.impresscapital.iclapp.database.AppExecutors; import com.impresscapital.iclapp.dbobj.User; import java.util.List; public class UserSigninAuthentication { private AppDatabase mDb; private Boolean isAuthenticate=false; public boolean authenticate(final String username, final String password,Context context){ dataBaseOperation(username.trim(),password.trim(),context); return isAuthenticate; } public void dataBaseOperation(final String username, final String password, final Context context){ Log.d("Username","username: "+username); Log.d("Username","username length: "+username.length()); Log.d("Password","password:"+password); Log.d("Password","password length:"+password.length()); AppExecutors.getsInstance().getDiskIO().execute(new Runnable() { @Override public void run() { try { List<User> users=mDb.userDao().retrieveAllUser(); for(User user1:users){ Log.d("Db working","Username:"+user1.getUsername()+" Password:"+user1.getPassword()); } Log.d("DB","Inside db opt"); List<User> user1 = mDb.userDao().loadUser(username, password); Log.d("Total Users after query","Tot"+ user1.size()); //ToastMessage.toastMessage(context,user.getUserID()+user.getEmail()); isAuthenticate = true; }catch (NullPointerException n){ isAuthenticate=false; } Log.d("isAuthenticate Variable", isAuthenticate.toString()); } }); } } 

try following query with your code. 请尝试使用您的代码进行以下查询。

SELECT * FROM user_table WHERE username like :username and password like :password

as mentioned in comments initializing mDb before querying db worked. 如在查询db之前初始化mDb注释中所述。

请尝试使用' '代替。

@Query("Select * from user_table where username='username' and password= 'password'")

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM