SQLITE表未插入默认值

时间:2019-01-05 01:24:12

标签: android android-studio kotlin android-sqlite

在我的项目中,我试图将数据插入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)

}

1 个答案:

答案 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: <<<<<