java - 如何使用户ID不易被猜到?

标签 java android sqlite android-room

我可以将用户添加到房间,但用户的编号很容易猜到。我可以轻松添加用户且 ID 号不易被猜到吗?

实体是

@Entity public class EntityUser {

    @PrimaryKey(autoGenerate = true)
    long userId;
    String userName;
}

道是

@Dao
public interface DaoUser {

    @Insert
    long insert(EntityUser entityUser);
}

数据库是

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

    abstract DaoUser daoUser();

}

我用

    userDatabase = Room.databaseBuilder(this,UserDatabase.class,"user.sqlite")
            .allowMainThreadQueries()
            .build();

    EntityUser user1 = new EntityUser();
    user1.userName = "Pandas";
    long user1id = userDatabase.daoUser().insert(user1);
    user1.userName = "Ellies";
    long user2id = userDatabase.daoUser().insert(user1);

我得到 1 然后 2。

我没有尝试自动生成,但出现了唯一约束错误。

最佳答案

您可以简单地使用 UUID。

@Entity public class EntityUser {
    @PrimaryKey(autoGenerate = true)
    long userId;
    String objectId;
    String userName;
}

然后当你生成一个对象时,你可以这样做:

EntityUser user1 = new EntityUser();
user1.userName = "Pandas";
user1.objectId = UUID.randomUUID().toString();

关于java - 如何使用户ID不易被猜到?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59585392/

相关文章:

java - 使用 Java 7 验证 OpenSSL 生成的 S/MIME 数字签名文件

java - 整数的最后 n 位

Android - 存储 Activity 结果返回 null

android - 在 TableLayout 的列之间添加空间

Node.js + SQLite 异步事务

python - 有没有办法将数据库中的列标题用作Python中的变量?

java - 如何在 Google Sign In 的抽屉导航中显示姓名、电子邮件和图像等用户详细信息?

android - 为 mediaPlayer setDataSource 修改 FileInputStream

ios - 计算数据库中的条目

java - 在此求一个数列