Я считаю, что будет работать следующее: -
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 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: <<<<<