2010-07-20 3 views
0

안녕하세요, 필드가 exsits 또는 사용자가 지정한대로 새 값을 삽입하면 테이블을 업데이트하는 것입니다.sqlite의 업데이트 문

내가하는 일은 테이블에있는 모든 항목을 선택하고 사용자가 입력 한 이름이 있는지를 확인하고 업데이트하거나 삽입하는 것입니다.

그러나 문제는 테이블에 데이터가 없으면 쿼리가 실패하고 테이블에 데이터가 삽입되지 않는 것입니다.

NSString *query = @"select * from PPM"; 
sqlite_stmt *statement; 

if(sqlite_prepare_v2(database,[query UTF8string],-1,&statement,NULL) == SQLITE_OK) 
{ 
    while (sqlite3_step(statement) == SQLITE_ROW) 
    //select data from table 
    //if value entered is same as entered by user update the table 
    //else insert in the table 
} 
+0

데이터 구조에 대한 귀하의 질의 또는 다른 것을 보여주십시오. 그렇지 않으면 대답은 꽤 일반적인 것입니다. – MJB

+0

데이터를 바꾸고 싶지만 데이터를 업데이트하여 데이터베이스의 기존 데이터가 필요하므로 조작을 한 다음 해당 필드를 업데이트해야합니다. 어떻게해야합니까? – user391301

답변

3

INSERT OR REPLACE? 데이터베이스 구조의 UNIQUE 제약 조건과 함께 사용하여 값이 이미있는 경우 값을 대체하고 이미없는 경우 값을 삽입 할 수 있습니다. 당신이 INSERT를 사용하거나 INSERT 명령의 변화를 교체하는 경우 SQLite는만큼 UNIQUE 제약 조건이있는 열이있는 한, 당신을 위해 그것을 할 것 같은

shell> sqlite3 
SQLite version 3.6.23 
Enter ".help" for instructions 
Enter SQL statements terminated with a ";" 
sqlite> CREATE TABLE user(name UNIQUE, value); 
sqlite> INSERT OR REPLACE INTO user VALUES("foo", 123); 
sqlite> SELECT * FROM user; 
foo|123 
sqlite> INSERT OR REPLACE INTO user VALUES("foo", 321); 
sqlite> SELECT * FROM user; 
foo|321 
+0

데이터를 바꾸지 만 데이터를 업데이트하여 데이터베이스의 기존 데이터가 필요하므로 조작을 수행하고 해당 필드를 업데이트해야합니다. 어떻게해야합니까? – user391301

1

, 당신은, 기존 데이터를 확인 할 필요가 없습니다 . 예를 들어

: 5의 ID가 테이블에있는 경우

CREATE TABLE db.table(id UNIQUE, name); 

INSERT OR REPLACE INTO db.table (id, name) VALUES (5, 'exep'); 

,이 명령은 다른 사람이 삽입 될 것입니다, 업데이 트처럼 행동합니다.

자세한 내용은 http://www.sqlite.org/lang_conflict.html을 참조하십시오.

+0

열을 UNIQUE로 지정하지 않아도됩니다. 기본 키로 이것을 수행하면됩니다. – MPelletier

+0

INTEGER PRIMARY KEY가 아니라면 sqlite의 기본 키가 고유 인덱스를 만듭니다. http://www.sqlite.org/lang_createtable.html을 참조하십시오. – SirDarius

+0

데이터를 바꾸고 싶지만 데이터를 업데이트하고 데이터베이스의 기존 데이터가 필요하므로 조작을 한 다음 해당 필드를 업데이트해야합니다. 어떻게해야합니까? – user391301