android小问题--------------------SQLiteDatabase.insert(table, nullColumnHack, values)参数

SQLiteDatabase除了可以通过execSQL()直接执行SQL语句之外,还可以通过.insert(table, nullColumnHack, values)方法直接插入操作。

第一个参数为表名,第三个参数为ContentValues实例,以键值对的形式将列和值Put进去然后放入第三个参数为就行了。

那么第二个参数是什么意思,总有人搞不明白,第二个参数的字面意思其实就是:当第三个参数传入null时,第二个参数为什么。也就是说如果第三个参数不为null,那么第二个参数是不起作用的。那这又是为什么,看源码:

因为底层Insert()方法直接调用了insertWithOnConflict()方法,那么就直接贴此方法的源码:

 acquireReference();
        try {
            StringBuilder sql = new StringBuilder();
            sql.append("INSERT");
            sql.append(CONFLICT_VALUES[conflictAlgorithm]);
            sql.append(" INTO ");
            sql.append(table);
            sql.append('(');

            Object[] bindArgs = null;
            int size = (initialValues != null && initialValues.size() > 0)
                    ? initialValues.size() : 0;
            if (size > 0) {
                bindArgs = new Object[size];
                int i = 0;
                for (String colName : initialValues.keySet()) {
                    sql.append((i > 0) ? "," : "");
                    sql.append(colName);
                    bindArgs[i++] = initialValues.get(colName);
                }
                sql.append(')');
                sql.append(" VALUES (");
                for (i = 0; i < size; i++) {
                    sql.append((i > 0) ? ",?" : "?");
                }
            } else {
                sql.append(nullColumnHack + ") VALUES (NULL");
            }
            sql.append(')');

可以看到,此方法其实在底层也是拼接了SQL串。。。所以我说不如直接去学学SQL。。要不不懂SQL的人根本不明白为什么。。其实底层逻辑是这样的,它会根据三个参数拼接出这样的sql语句 insert into tableNmae (......) values(......)  values中的值就由传入的第三个参数拼接出来的,而我们可以看到,如果第三个值传入为Null,那么去执行 

sql.append(nullColumnHack + ") VALUES (NULL");
也就是是说最后拼接出来的SQL为:insert into tableName(null)values(null),这样sql语法就错误的。。会报错。。所以。。就是这样的。


### 回答1: SQLiteDatabase类是在Android系统中用于操作SQLite数据库的类。以下是这些方法的作用和基本格式: 1. insert(String table, String nullColumnHack, ContentValues values)方法:这个方法用于向给定的表中插入一条新记录。table参数是表名,nullColumnHack参数是插入空值的列名,values参数是包含列名和值的ContentValues对象。这个方法返回新记录的行号,如果插入失败则返回-1。 2. update(String table, ContentValues values, String whereClause, String[] whereArgs)方法:这个方法用于更新表中的记录。table参数是表名,values参数是包含列名和新值的ContentValues对象,whereClause参数是用于指定更新记录的条件的SQL语句,whereArgs参数是与whereClause中的占位符对应的参数值。这个方法返回更新的记录数,如果更新失败则返回0。 3. delete(String table, String whereClause, String[] whereArgs)方法:这个方法用于删除表中的记录。table参数是表名,whereClause参数是用于指定删除记录的条件的SQL语句,whereArgs参数是与whereClause中的占位符对应的参数值。这个方法返回删除的记录数,如果删除失败则返回0。 4. execSQL(String sql)方法:这个方法用于执行给定的SQL语句。sql参数是SQL语句字符串。这个方法无返回值。 5. query(String table, String[] columns, String selection, String[] selectionArgs, String ### 回答2: insert(...... )方法:该方法用于向数据库表中插入数据。它的基本格式为:insert(String table, String nullColumnHack, ContentValues values)。其中,table参数表示要插入的表名,nullColumnHack表示插入记录中的一个可以为空的列,values参数表示要插入的数据内容。 update(...... )方法:该方法用于更新数据库表中的数据。它的基本格式为:update(String table, ContentValues values, String whereClause, String[] whereArgs)。其中,table参数表示要更新的表名,values参数表示要更新的数据内容,whereClause参数表示指定更新的条件,whereArgs参数表示whereClause中占位符的值。 delete(...... )方法:该方法用于删除数据库表中的数据。它的基本格式为:delete(String table, String whereClause, String[] whereArgs)。其中,table参数表示要删除的表名,whereClause参数表示指定删除的条件,whereArgs参数表示whereClause中占位符的值。 execSQL(...... )方法:该方法用于执行SQL语句。它的基本格式为:execSQL(String sql, Object[] bindArgs)。其中,sql参数表示要执行的SQL语句,bindArgs参数表示SQL语句中的参数值。 query(...... )方法:该方法用于查询数据库表中的数据。它的基本格式为:query(String table, String[] columns, String selection, String[] selectionArgs, String groupBy, String having, String orderBy)。其中,table参数表示要查询的表名,columns参数表示要查询的列名,selection参数表示查询的条件,selectionArgs参数表示selection中占位符的值,groupBy参数表示分组的列,having参数表示筛选分组的条件,orderBy参数表示排序的列。 以上是SQLiteDatabase类中常用的几个方法及其基本格式的介绍,通过这些方法可以方便地对数据库进行数据的插入、更新、删除、执行SQL语句和查询操作。 ### 回答3: insert(......)方法:该方法用于向数据库中插入一条新的数据记录。基本格式为:insert(String table, String nullColumnHack, ContentValues values),其中table为表名,nullColumnHack为可选的列名,values为要插入的数据。 update(......)方法:该方法用于更新数据库中已有的数据记录。基本格式为:update(String table, ContentValues values, String whereClause, String[] whereArgs),其中table为表名,values为要更新的数据,whereClause为更新条件,whereArgs为更新条件参数。 delete(......)方法:该方法用于删除数据库中的数据记录。基本格式为:delete(String table, String whereClause, String[] whereArgs),其中table为表名,whereClause为删除条件,whereArgs为删除条件参数。 execSQL(......)方法:该方法用于执行带参数的SQL语句。基本格式为:execSQL(String sql, Object[] bindArgs),其中sql为要执行的SQL语句,bindArgs为SQL语句中的参数。 query(......)方法:该方法用于查询数据库中的数据记录。基本格式为:query(String table, String[] columns, String selection, String[] selectionArgs, String groupBy, String having, String orderBy, String limit),其中table为表名,columns为要返回的列名,selection为查询条件,selectionArgs为查询条件参数,groupBy为分组条件,having为分组条件参数,orderBy为排序条件,limit为限制返回结果数量。 这些方法都是SQLiteDatabase类中的常用方法,通过调用这些方法可以方便地进行数据库操作。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值