简体   繁体   English

ROOM Android SQLite 数据库 - 无法创建表

[英]ROOM Android SQLite database - Cannot create table

I was trying few days to somehow successed creating the database and the table, but I just cant, and I need your help badly.我尝试了几天以某种方式成功创建数据库和表,但我不能,我非常需要你的帮助。 My database is always empty, I dont even create the table.我的数据库总是空的,我什至不创建表。 :/ :/

Here are my classses:这是我的课:

ENTITY:实体:

@Entity (tableName = "users")
class User {

    @ColumnInfo(name = "id")
    @PrimaryKey(autoGenerate = true)
    private
    long id;

    @ColumnInfo(name = "first_name")
    private
    String firstName;

    @ColumnInfo(name = "last_name")
    private
    String lastName;

    User(String firstName, String lastName){
        this.firstName = firstName;
        this.lastName = lastName;
    }

    long getId() {
        return id;
    }

    String getFirstName() {
        return firstName;
    }

    String getLastName() {
        return lastName;
    }

    public void setId(long id) {
        this.id = id;
    }

}

DAO:道:

@Dao
public interface UserDao {

    @Insert
    long insertData(User user);

    @Update
    void updateData(User user);

    @Delete
    void deleteData(User user);
}

DATABASE:数据库:

@Database(entities = {User.class}, version = 1, exportSchema = false)
public abstract class UserDatabase extends RoomDatabase {
    public abstract UserDao userDao();
}

REPOSITORY:存储库:

class UserRepository {

    private Context context;
    private String DB_NAME = "userdb.db";
    private UserDatabase userDatabase;

    UserRepository(Context context){
        this.context = context;
        userDatabase = Room.databaseBuilder(context, UserDatabase.class, DB_NAME).build();

        Toast.makeText(context, "Database created...", Toast.LENGTH_SHORT).show();
    }

    @SuppressLint("StaticFieldLeak")
    void insertTask(User user){
        new AsyncTask<Void, Void, Void>(){
            @Override
            protected Void doInBackground(Void... voids) {
                long result = userDatabase.userDao().insertData(user);
                Log.d("LOG", String.valueOf(result));
                return null;
            }

            @Override
            protected void onPostExecute(Void aVoid) {
                Toast.makeText(context, "Success", Toast.LENGTH_SHORT).show();
            }
        }.execute();
    }
}

MAINACTIVITY (I'm getting the text from two edittext and passing in to Entity class) MAINACTIVITY(我从两个编辑文本中获取文本并传递给实体类)

public class MainActivity extends AppCompatActivity {

    EditText first_Name, last_Name;
    Button save_btn;

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

        first_Name = findViewById(R.id.first_name);
        last_Name = findViewById(R.id.last_name);
        save_btn = findViewById(R.id.save_btn);
        save_btn.setOnClickListener(view -> {
            UserRepository userRepository = new UserRepository(MainActivity.this);
            User user = new User(first_Name.getText().toString().trim(),
                    last_Name.getText().toString().trim());
            userRepository.insertTask(user);
        });
    }

I dont even create the table我什至不创建表

It known working Toast seen log having D/LOG: 1它知道工作 Toast 看到日志具有D/LOG: 1

You copy database (only userdb.db file) and using tool (like DB SQLite Browser) see database empty.您复制数据库(仅 userdb.db 文件)并使用工具(如 DB SQLite Browser)查看数据库为空。

Needing to copy userdb.db and userdb.db-wal to seen in tool.需要将 userdb.db 和 userdb.db-wal 复制到工具中才能看到。

-wal having changes not checkpointed -wal有更改未检查点

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

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