Android Room框架中如何设置数据库列的长度?
在Room中设置数据库列长度的方法
Room默认将String类型映射为SQLite的TEXT类型,无长度限制。如果要实现类似SQL中varchar(n)的列长度指定,有两种实用方式:
- 通过@ColumnInfo指定类型
在实体类字段上使用@ColumnInfo的typeAffinity属性直接定义SQL列类型:
@Entity(tableName = "Persons") data class Person( @PrimaryKey val PersonID: Int, @ColumnInfo(typeAffinity = "VARCHAR(255)") val LastName: String, @ColumnInfo(typeAffinity = "VARCHAR(255)") val FirstName: String, @ColumnInfo(typeAffinity = "VARCHAR(255)") val Address: String, @ColumnInfo(typeAffinity = "VARCHAR(255)") val City: String )
Room生成的建表语句会自动对应生成VARCHAR(255)的列定义。
- 手动编写建表SQL
若需完全自定义建表逻辑,可通过Dao的@Query注解执行原生建表语句(不推荐,会丢失Room实体映射的便利性):
@Dao interface PersonDao { @Query("CREATE TABLE Persons (" + "PersonID int," + "LastName varchar(255)," + "FirstName varchar(255)," + "Address varchar(255)," + "City varchar(255)" + ")") fun createPersonsTable() }
注意:SQLite的VARCHAR(n)仅为提示性约束,不会主动截断超长字符串。若需严格限制长度,可添加CHECK约束配合:
@ColumnInfo(typeAffinity = "VARCHAR(255)") @Check("length(LastName) <= 255") val LastName: String
内容的提问来源于stack exchange,提问作者Edito Tech
相关产品推荐
相关产品推荐

