android 의 SQLite 데이터베이스 insert 작업
8920 단어 android
원형:
long android.database.sqlite.SQLiteDatabase.insert(String table, String nullColumnHack, ContentValues values)
매개 변수 소개:
table:데 이 터 를 삽입 할 표 의 이름
nullColumnHack:values 매개 변수 가 비어 있 거나 내용 이 없 을 때 insert 는 실패 합 니 다.(바 텀 데이터 베 이 스 는 빈 줄 을 삽입 할 수 없습니다)이러한 상황 을 방지 하기 위해 서 우 리 는 여기에 열 이름 을 지정 해 야 합 니 다.그 때 삽입 할 행동 이 비어 있 는 것 을 발견 하면 지정 한 이 열 이름 의 값 을 null 로 설정 합 니 다.그리고 데이터베이스 에 삽입 합 니 다.
values:하나의 ContentValues 대상 으로 맵 과 유사 합 니 다.키 값 을 통 해 값 을 저장 합 니 다.
여 기 는 많은 사람들 이 현혹 되 는데,nullColumnHack 은 도대체 무엇 에 쓰 이 는 지,왜 나타 나 는 지.우리 가 열 을 설정 하지 않 을 때,모두 데이터베이스 가 기본 값 으로 설정 되 어 있 지 않 습 니까?많은 필드 설정 의 기본 값 도 null 입 니 다.여기 표 시 된 설정 도 null 입 니 다.어떤 차이 가 있 습 니까?어떻게 설정 을 표시 한 후에 삽입 을 허용 합 니까?
사실 밑바닥 에서 각종 insert 방법 은 마지막 에 insert With OnConflict 방법 을 호출 합 니 다.여기에 이 방법의 부분 을 붙 여 넣 습 니 다.
1 [java] view plaincopy/**
2 * General method for inserting a row into the database.
3 *
4 * @param table the table to insert the row into
5 * @param nullColumnHack SQL doesn't allow inserting a completely empty row,
6 * so if initialValues is empty this column will explicitly be
7 * assigned a NULL value
8 * @param initialValues this map contains the initial column values for the
9 * row. The keys should be the column names and the values the
10 * column values
11 * @param conflictAlgorithm for insert conflict resolver
12 * @return the row ID of the newly inserted row
13 * OR the primary key of the existing row if the input param 'conflictAlgorithm' =
14 * {@link #CONFLICT_IGNORE}
15 * OR -1 if any error
16 */
17 public long insertWithOnConflict(String table, String nullColumnHack,
18 ContentValues initialValues, int conflictAlgorithm) {
19 if (!isOpen()) {
20 throw new IllegalStateException("database not open");
21 }
22
23 // Measurements show most sql lengths <= 152
24 StringBuilder sql = new StringBuilder(152);
25 sql.append("INSERT");
26 sql.append(CONFLICT_VALUES[conflictAlgorithm]);
27 sql.append(" INTO ");
28 sql.append(table);
29 // Measurements show most values lengths < 40
30 StringBuilder values = new StringBuilder(40);
31
32 Set<Map.Entry<String, Object>> entrySet = null;
33 if (initialValues != null && initialValues.size() > 0) {
34 entrySet = initialValues.valueSet();
35 Iterator<Map.Entry<String, Object>> entriesIter = entrySet.iterator();
36 sql.append('(');
37
38 boolean needSeparator = false;
39 while (entriesIter.hasNext()) {
40 if (needSeparator) {
41 sql.append(", ");
42 values.append(", ");
43 }
44 needSeparator = true;
45 Map.Entry<String, Object> entry = entriesIter.next();
46 sql.append(entry.getKey());
47 values.append('?');
48 }
49
50 sql.append(')');
51 } else {
52 sql.append("(" + nullColumnHack + ") ");
53 values.append("NULL");
54 }
여기 서 우리 의 ContentValues 형식의 데이터 initialValues 가 null 이거 나 size<=0 일 때 sql 구문 에 nullColumnHack 설정 을 추가 하 는 것 을 볼 수 있 습 니 다.만약 우리 가 nullColumnHack 을 추가 하지 않 는 다 면,우리 의 sql 문장의 최종 결 과 는 insert into tableName()values()와 유사 할 것 이 라 고 상상 할 수 있 습 니 다.이것 은 분명히 허락 하지 않 는 다.만약 우리 가 nullColumnHack 을 추가 하면 sql 은 이렇게 됩 니 다.insert into tableName(nullColumnHack)values(null);이렇게 하면 분명히 할 수 있다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Kotlin의 기초 - 2부지난 글에서는 Kotlin이 무엇인지, Kotlin의 특징, Kotlin에서 변수 및 데이터 유형을 선언하는 방법과 같은 Kotlin의 기본 개념에 대해 배웠습니다. 유형 변환은 데이터 변수의 한 유형을 다른 데이터...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.