android 의 SQLite 데이터베이스 insert 작업

8920 단어 android
원본 박문 주소:http://blog.csdn.net/jason0539/article/details/9977175
원형:
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);이렇게 하면 분명히 할 수 있다.

좋은 웹페이지 즐겨찾기