SQLite的insert方法参数是怎样的
创始人
2024-12-24 07:21:03
0次

看到一个API的参数不懂的时候,我们会做什么呢!Baidu,Google。很少回去看源码的吧,我也是,太懒了,批评一下。啪啪~

先看一段创建数据库的代码吧。

db.execSQL("CREATE TABLE users (" + "_id INTEGER PRIMARY KEY, " + "username TEXT, " + "realname TEXT, "
				+ "nsid TEXT, " + "buddy_icon BLOB," + "last_update INTEGER);");

我们能看到其中有一个类型是我们不常用的,BLOB,学过数据库的人肯定都知道了,但是我还是要说一下,这个表示的是二进制数据类型,比如我们可以将一个图片的数据存入其中,当然小图可以,大图就算了嘛。for example:

addUser(db, "Bob Lee", "Bob Lee", "45701389@N00", R.drawable.boblee_buddyicon);
private void addUser(SQLiteDatabase db, String userName, String realName, String nsid, int icon) {

		final ContentValues values = new ContentValues();
		values.put(COLUMN_USERNAME, userName);
		values.put(COLUMN_REALNAME, realName);
		values.put(COLUMN_NSID, nsid);
		values.put(COLUMN_LAST_UPDATE, System.currentTimeMillis());

		final Bitmap bitmap = BitmapFactory.decodeResource(mContext.getResources(), icon);
		writeBitmap(values, COLUMN_BUDDY_ICON, bitmap);

		db.insert(TABLE_USERS, COLUMN_LAST_UPDATE, values);
	}

	static void writeBitmap(ContentValues values, String name, Bitmap bitmap) {
		if (bitmap != null) {
			// Try go guesstimate how much space the icon will take when
			// serialized
			// to avoid unnecessary allocations/copies during the write.
			int size = bitmap.getWidth() * bitmap.getHeight() * 2;
			ByteArrayOutputStream out = new ByteArrayOutputStream(size);
			try {
				bitmap.compress(Bitmap.CompressFormat.PNG, 100, out);
				out.flush();
				out.close();

				values.put(name, out.toByteArray());
			} catch (IOException e) {
				// Ignore
			}
		}
	}

好了,闲话不多说了,今天要说的重点是其中的:

db.insert(TABLE_USERS, COLUMN_LAST_UPDATE, values);

参数问题,这里贴一下API说明:

public long insert (String table, String nullColumnHack, ContentValues values)

Added in API level 1
Convenience method for inserting a row into the database.

Parameters
table	the table to insert the row into
nullColumnHack	optional; may be null. SQL doesn't allow inserting a completely empty row without naming at least one column name. If your provided values is empty, no column names are known and an empty row can't be inserted. If not set to null, the nullColumnHack parameter provides the name of nullable column name to explicitly insert a NULL into in the case where your values is empty.
values	this map contains the initial column values for the row. The keys should be the column names and the values the column values
Returns
the row ID of the newly inserted row, or -1 if an error occurred

好吧,我相信英文不好的同学肯定会与我一样,对第二个参数的说明还是有点糊涂的,行吧,那就Baidu,有道orGoogle翻译,不过这些终究是翻译工具,只能让你有个一知半解,最终还是需要实践才能得出最终答案的。

这里用国语详细解释下这三个参数的意义:

table:数据的表的名称

nullColumnHack:当values参数为空或者里面没有内容的时候,我们insert是会失败的(底层数据库不允许插入一个空行),为了防止这种情况,我们要在这里指定一个列名,到时候如果发现将要插入的行为空行时,就会将你指定的这个列名的值设为null,然后再向数据库中插入。

values:ContentValues对象,差不多就是一个map.通过键值对的形式存储值,键表示的是Column,值就是对应Column的值咯。

相关内容

热门资讯

空调连续工作多久需要停机休息 空调连续工作的时间取决于多个因素,包括空调的型号、功率、使用环境和维护情况等。一般来说,空调可以连续...
空调哪个符号是除湿的 空调除湿功能通常用一个水滴形状的符号表示。不同品牌和型号的空调遥控器可能会有所差异,但一般来说,除湿...
格力空调多长时间加一次氟利昂 1、一般情况下,空调对氟利昂的使用量是非常小的,所以在空调使用了四年左右的时候再考虑加也没问题。2、...
空调用多长时间需要加氟一次 一般情况下是五年。当出现以下这几种情况时,空调才需要加氟。1、空调的室内机和室外机各有两个接口,当接...
格调生活·C标思享荟:卡萨帝在... 9月12日的郑州龙湖金融岛,夜风轻拂,灯光璀璨。“C标时刻共传奇——卡萨帝思享荟暨20周年品牌盛典郑...
品牌价值破千亿、高端份额持续领... 9月12日,“C标时刻共传奇——卡萨帝思享荟暨20周年品牌盛典郑州站”在郑州龙湖金融岛举办。2026...
空调主板坏了修800还是换新的 空调主板坏了是修还是换新,需要考虑多个因素,以下是一些建议:1. 维修成本:如果维修费用较低,比如 ...
空调开多久需要休息多长时间 问题:空调开多久需要休息多长时间回答:1、在使用空调的过程中,一般空调开7~8个小时左右需要休息2~...
中央空调多长时间清洗一次 1、一般空调开机前清洗一次即可,空调开机中间时段再清洗一次,空调关机时清洗一次,这样比较合理。2、空...
中央空调氟利昂多久加一次 看空调制热和制冷程度,很多人的观点认为氟利昂必须一年放一次,其实这个观点是错误的,理解上面有点偏差,...