2016-06-24 8 views
1

내 테이블에 count 필드를 업데이트하려고합니다. 그러나 그것은 가치를 업데이 트하지 않습니다. 쿼리는 이미 외부 데이터베이스 소프트웨어에서 시도 했으므로 100 % 괜찮습니다. 내 진술을 실행하는 데 잘못된 함수를 사용하고있을 수 있습니까? 옵션이되고있는 경우SWIFT를 사용하여 데이터베이스 FMDB의 필드를 업데이트 할 수 없습니다.

func updateLocalCount(var localCounter: Int) 
    { 
     let contactDB = FMDatabase(path: databasePath as String) 
     if contactDB.open() 
     { 
      let querySQL = "UPDATE Darood SET count='\(localCounter)' WHERE title='\(myTitle)'" 
      let results:FMResultSet? = contactDB.executeQuery(querySQL, 
       withArgumentsInArray: nil) 
      print(querySQL) 
      contactDB.close() 
      print("local count \(localCounter)") 
     } 
     else 
     { 
      print("Error: \(contactDB.lastErrorMessage())") 
     } 
    } 
+0

업데이트 쿼리 코드를 실행 하시겠습니까? – iMHitesh

+0

최종 쿼리는 무엇입니까 여기에 넣어주십시오 – iMHitesh

+0

'myTitle'은 어디에서 코드에 있습니까? –

답변

2

당신은 업데이트 쿼리에 대한 executeUpdate하지 executeQuery 사용해야합니다. executeQuery (결코 전화하지 않고 next)을 호출하면 단순히 쿼리를 준비했지만 수행하지 않은 것입니다.

func updateLocalCount(counter: Int, title: String) { 
    let contactDB = FMDatabase(path: databasePath as String) 
    if contactDB.open() { 
     defer { contactDB.close() } 
     do { 
      try contactDB.executeUpdate("UPDATE Darood SET count=? WHERE title=?", values: [counter, title]) 
     } catch { 
      print(error) 
     } 
    } else { 
     print("Error: \(contactDB.lastErrorMessage())") 
    } 
} 
관련이없는 관찰에서

, 당신은 그것을 알 수 있습니다, 위, 내가 문자열을 사용하여 SQL을 구축하지, 당신의 SQL에 ? 자리 표시자를 사용 :

그래서, 그것은 다음과 같이 보일 수 있습니다 보간법. 자리 표시자를 사용하지 않으면 가능한 모든 일련의 문제가 발생합니다.

+0

고마워요 @ 로브! 나는 당신에게 1000 표를 줄 수 있었으면 좋겠다. –

+0

어떻게 업데이트 쿼리를위한 대체 기능을 사용할 수 있습니까? contactDB.executeUpdate (" ,?) ", withArgumentsInArray : ["6 "," '']] – kalpesh

+0

그냥'? '자리 표시 자 주위의 따옴표를 제거하십시오 :'replace (group_id,?,?)' – Rob

0

나는 이

let querySQL = "UPDATE Darood SET count='\(localCounter)' WHERE title='\(myTitle!)'" 

시도하거나 myTitle 필수 필드를 확인하고 기본 값으로 빈 ("")를 할당, 당신은 옵션 값으로 myTitle을 사용하고 있는지 확인 해요. 다음

let querySQL = "UPDATE Darood SET count='\(localCounter)' WHERE title='\(myTitle)'" 
+0

myTitle을 필수 입력란으로 지정하고이 함수가 실행되기 전에 나중에 myTitle이 설정되기 때문에 초기화 ("")를 지정합니다. 그리고 이것은 내가 querySQL = "업데이트 Darood SET count = '\ (localCounter)'WHERE title = '\ (myTitle)"을 사용하는 이유입니다. –

+0

쿼리를 실행하여 출력을 업데이트 할 수 있습니까? –

+1

Rob이 솔루션, 방법에 문제가있었습니다. 어쨌든 시간을내어 내 문제를 조사해 주셔서 고마워요. :) –