在我的项目中,我试图将数据插入SQLITE表。插入工作正常,但如果我未从活动中传递任何值,则可以在表中看到空值,而不是默认值。任何帮助表示赞赏。
语言
Kotlin
代码
var CREATE_NOTE_TABLE="CREATE TABLE " + TABLE_NAME + "(" + KEY_ID + " INTEGER PRIMARY KEY," +
KEY_NAME + " TEXT," +
KEY_QUANTITY + " INTEGER DEFAULT 1," +
KEY_NOTE + " TEXT DEFAULT GOOD," +
KEY_PRICE + " DOUBLE" +
")"
fun insertData(name: String, quantity: String, note: String, price:Double)
{
val db=this.writableDatabase
var cv=ContentValues()
cv.put(KEY_NAME,name.trim())
cv.put(KEY_QUANTITY,quantity.trim())
cv.put(KEY_NOTE,note)
cv.put(KEY_PRICE,price)
val result=db.insert(TABLE_NAME,null,cv)
}
答案 0 :(得分:1)
我相信以下方法会起作用:-
fun insertData(name: String, quantity: String, note: String, price:Double)
{
val db=this.writableDatabase
var cv=ContentValues()
cv.put(KEY_NAME,name.trim())
if (quantity.trim().length > 0) {
cv.put(KEY_QUANTITY,quantity.trim())
}
cv.put(KEY_NOTE,note)
cv.put(KEY_PRICE,price)
val result=db.insert(TABLE_NAME,null,cv)
}
因此,如果在trim()后有一个空字符串,即“”,则长度将为0,因此行cv.put(KEY_QUANTITY,quantity.trim())
将不会执行。
细微的差别是,如果在数量为“”“等时使用cv.put(KEY_QUANTITY,quantity.trim())
,则基础生成的SQL将包括数量列(KEY_QUANTITY)并分配一个值。像
INSERT INTO your_table (name,quantity,note,price) VALUES(?,?,?,?);
但是,如果没有该行,则INSERT为:-
INSERT INTO your_table (name,note,price) VALUES(?,?,?);
因此,由于没有尝试为数量列分配值,因此默认值将用于数量列。
使用下面的代码,以上内容按预期工作:-
MainActivity.kt :-
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
var dbhlpr = DBHelper(this);
dbhlpr.insertData("Test","","test",10.34)
dbhlpr.insertData("Test2","100","test2", 34.67)
var csr = dbhlpr.writableDatabase.query(DBHelper.TABLE_NAME, null,null,null,null,null,null)
DatabaseUtils.dumpCursor(csr)
}
DBHelper.kt :-
internal class DBHelper(context: Context) :
SQLiteOpenHelper(context, DBNAME, null, DBVERSION) {
override fun onCreate(db: SQLiteDatabase) {
val crt_sql = "CREATE TABLE IF NOT EXISTS " + TABLE_NAME + "(" +
KEY_ID + " INTEGER PRIMARY KEY," +
KEY_NAME + " TEXT," +
KEY_QUANTITY + " INTEGER DEFAULT 1," +
KEY_NOTE + " TEXT, " +
KEY_PRICE + " REAL" +
")"
db.execSQL(crt_sql);
}
override fun onUpgrade(db: SQLiteDatabase, i: Int, i1: Int) {
}
fun insertData(name: String, quantity: String, note: String, price:Double)
{
val db=this.writableDatabase
var cv= ContentValues()
cv.put(KEY_NAME,name.trim())
if (quantity.trim().length > 0) {
cv.put(KEY_QUANTITY,quantity.trim())
}
cv.put(KEY_NOTE,note)
cv.put(KEY_PRICE,price)
val result=db.insert(TABLE_NAME,null,cv)
}
companion object {
val DBNAME = "mydb"
val DBVERSION = 1
val TABLE_NAME = "mytable"
val KEY_ID = BaseColumns._ID
val KEY_NAME = "name"
val KEY_QUANTITY = "quantity"
val KEY_NOTE = "note"
val KEY_PRICE = "price"
}
}
2019-01-05 13:43:04.486 1952-1952/so54048348.kotlinso54048348 I/System.out: >>>>> Dumping cursor android.database.sqlite.SQLiteCursor@268ba35
2019-01-05 13:43:04.486 1952-1952/so54048348.kotlinso54048348 I/System.out: 0 {
2019-01-05 13:43:04.486 1952-1952/so54048348.kotlinso54048348 I/System.out: _id=1
2019-01-05 13:43:04.486 1952-1952/so54048348.kotlinso54048348 I/System.out: name=Test
2019-01-05 13:43:04.486 1952-1952/so54048348.kotlinso54048348 I/System.out: quantity=1
2019-01-05 13:43:04.486 1952-1952/so54048348.kotlinso54048348 I/System.out: note=test
2019-01-05 13:43:04.486 1952-1952/so54048348.kotlinso54048348 I/System.out: price=10.34
2019-01-05 13:43:04.486 1952-1952/so54048348.kotlinso54048348 I/System.out: }
2019-01-05 13:43:04.486 1952-1952/so54048348.kotlinso54048348 I/System.out: 1 {
2019-01-05 13:43:04.486 1952-1952/so54048348.kotlinso54048348 I/System.out: _id=2
2019-01-05 13:43:04.486 1952-1952/so54048348.kotlinso54048348 I/System.out: name=Test2
2019-01-05 13:43:04.486 1952-1952/so54048348.kotlinso54048348 I/System.out: quantity=100
2019-01-05 13:43:04.486 1952-1952/so54048348.kotlinso54048348 I/System.out: note=test2
2019-01-05 13:43:04.486 1952-1952/so54048348.kotlinso54048348 I/System.out: price=34.67
2019-01-05 13:43:04.486 1952-1952/so54048348.kotlinso54048348 I/System.out: }
2019-01-05 13:43:04.486 1952-1952/so54048348.kotlinso54048348 I/System.out: <<<<<