SqliteDatabase insert(String table, String nullColumnHack, ContentValues values)

本文详细介绍了SQLite数据库中Insert()方法的使用方式,包括如何通过ContentValues存放数据,并解释了插入语句中各参数的意义及作用。

 db.insert("person", "name" , null);


第一个参数为表明,

    第二个参数为,缺省的字段的名字,如果没有值 就在数据库中存储为null    ,

       db.insert("person", "name" , null);   执行这表语句以后,该字段就会为null

然而如果执行db.insert("person", "null" , null);      就会被执行成  insert into person()  values()    这样显然回报错误


Insert()方法用于添加数据,各个字段的数据使用ContentValues进行存放。 ContentValues类似于MAP,相对于MAP,它提供了存取数据对应的put(String key, Xxx value)和getAsXxx(String key)方法,  key为字段名称,value为字段值,Xxx指的是各种常用的数据类型,如:String、Integer等。

SQLiteDatabase db = databaseHelper.getWritableDatabase();  
ContentValues values = new ContentValues();  
values.put("name", "测试数据");  
values.put("age", 4);  
long rowid = db.insert(“person”, null, values);//返回新添记录的行号,与主键id无关  

不管第三个参数是否包含数据,执行Insert()方法必然会添加一条记录,如果第三个参数为空,会添加一条除主键之外其他字段值为Null的记录。Insert()方法内部实际上通过构造insert SQL语句完成数据的添加,Insert()方法的第二个参数用于指定空值字段的名称,相信大家对该参数会感到疑惑,该参数的作用是什么?是这样的:如果第三个参数values 为Null或者元素个数为0, 由于Insert()方法要求必须添加一条除了主键之外其它字段为Null值的记录,为了满足SQL语法的需要, insert语句必须给定一个字段名,如:insert into person(name) values(NULL),倘若不给定字段名 , insert语句就成了这样: insert into person() values(),显然这不满足标准SQL的语法。对于字段名,建议使用主键之外的字段,如果使用了INTEGER类型的主键字段,执行类似insert into person(personid) values(NULL)的insert语句后,该主键字段值也不会为NULL。如果第三个参数values 不为Null并且元素的个数大于0 ,可以把第二个参数设置为null




上面转载为http://blog.youkuaiyun.com/cnmilan/article/details/39476575


package com.example.myapplication; import android.annotation.SuppressLint; import android.content.ContentValues; import android.content.Context; import android.database.Cursor; import android.database.sqlite.SQLiteDatabase; import android.database.sqlite.SQLiteOpenHelper; import androidx.annotation.Nullable; public class UserDbHelper extends SQLiteOpenHelper { private static UserDbHelper sHelper; private static final String DB_NAME = "user.db"; //数据库名 private static final int VERSION = 1; //版本号 //必须实现其中一个构方法 public UserDbHelper(@Nullable Context context, @Nullable String name, @Nullable SQLiteDatabase.CursorFactory factory, int version) { super(context, name, factory, version); } //创建单例,供使用调用该类里面的的增删改查的方法 public synchronized static UserDbHelper getInstance(Context context) { if (null == sHelper) { sHelper = new UserDbHelper(context, DB_NAME, null, VERSION); } return sHelper; } @Override public void onCreate(SQLiteDatabase db) { //创建user_table表 db.execSQL("create table user_table(user_id integer primary key autoincrement, " + "username text," + //用户名 "password text," + //密码 "nickname text" + // ")"); } @Override public void onUpgrade(SQLiteDatabase sqLiteDatabase, int i, int i1) { } /** * 登录 */ @SuppressLint("Range") public UserInfo login(String username) { //获取SQLiteDatabase实例 SQLiteDatabase db = getReadableDatabase(); UserInfo userInfo = null; String sql = "select user_id,username,password,nickname from user_table where username=?"; String[] selectionArgs = {username}; Cursor cursor = db.rawQuery(sql, selectionArgs); if (cursor.moveToNext()) { int user_id = cursor.getInt(cursor.getColumnIndex("user_id")); String name = cursor.getString(cursor.getColumnIndex("username")); String password = cursor.getString(cursor.getColumnIndex("password")); String nickname = cursor.getString(cursor.getColumnIndex("nickname")); userInfo = new UserInfo(user_id, name, password, nickname); } cursor.close(); db.close(); return userInfo; } /** * 注册 */ public int register(String username, String password, String nickname) { //获取SQLiteDatabase实例 SQLiteDatabase db = getWritableDatabase(); ContentValues values = new ContentValues(); //填充占位符 values.put("username", username); values.put("password", password); values.put("nickname", nickname); String nullColumnHack = "values(null,?,?,?)"; //执行 int insert = (int) db.insert("user_table", nullColumnHack, values); // db.close(); return insert; } public int updatePassword(String username, String newPassword) { return ; } }
06-24
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值