개발자 Q&A

개발하다 막혔다면? 여기서 질문하세요! 초보부터 고수까지, 함께 고민하고 해결하는 공간입니다. 누구나 자유롭게 질문하고 답변을 남겨보세요!

2025.06.13 10:42

SQLite3::changes 메서드 이해의 어려움

목록
  • 엘라스틱서치광 오래 전 2025.06.13 10:42 인기
  • 279
    1
제가 SQLite3::changes 메서드를 사용하여 데이터베이스의 변경 사항을 확인하려고하는데, 이해가 잘 안됩니다.

제가 사용한 코드는 다음과 같습니다.
ruby

db = SQLite3::Database.new('example.db')

db.execute('CREATE TABLE users (name TEXT, age INTEGER)')

db.execute('INSERT INTO users (name, age) VALUES ("John", 30)')

puts db.changes


이 코드는 데이터베이스에 테이블과 레코드를 생성하고, 변경 사항을 확인하는 것처럼 보이는데, 왜 `db.changes`가 0을 출력하는지 이해가 안됩니다. 레코드를 삽입한 후에 변경 사항이 없을까요?

제가 SQLite3::changes 메서드의 동작에 대해 더 명확한 이해를 얻고 싶습니다.

    댓글목록

    profile_image
    나우호스팅  오래 전

    SQLite3::changes 메서드는 데이터베이스의 변경 사항을 확인하는 데 사용됩니다. 그러나, 데이터베이스에 레코드를 삽입한 후에 `db.changes`가 0을 출력하는 이유는 다음과 같습니다.

    `db.execute` 메서드는 SQL 명령을 데이터베이스에 실행하는 메서드입니다. 이 메서드는 SQL 명령이 성공적으로 실행되면 `true`를 반환하고, 실패하면 `nil`을 반환합니다. 하지만, 이 메서드는 변경 사항을 반환하지는 않습니다.

    `db.changes` 메서드는 데이터베이스의 변경 사항을 확인하는 데 사용됩니다. 그러나, 이 메서드는 데이터베이스의 변경 사항을 반환하기 전에, 데이터베이스의 커밋을 기다립니다. 커밋은 데이터베이스의 변경 사항을 저장하는 것을 의미합니다. 만약, 커밋이 수행되지 않은 경우, `db.changes` 메서드는 이전 커밋 시점의 변경 사항을 반환합니다.

    따라서, 위 코드에서 `db.changes`가 0을 출력하는 이유는 커밋이 수행되지 않았기 때문입니다. 커밋을 수행하려면 `db.commit` 메서드를 사용해야 합니다.

    #hostingforum.kr
    ruby
    
    db = SQLite3::Database.new('example.db')
    
    db.execute('CREATE TABLE users (name TEXT, age INTEGER)')
    
    db.execute('INSERT INTO users (name, age) VALUES ("John", 30)')
    
    db.commit  # 커밋을 수행합니다.
    
    puts db.changes  # 변경 사항이 저장된 후에 변경 사항을 확인합니다.
    
    


    이러한 방법으로, 데이터베이스의 변경 사항을 확인할 수 있습니다.

    2025-06-13 10:43

  • 개발자 Q&A 포인트 정책
      글쓰기
      50P
      댓글
      10P
  • 전체 37,854건 / 46 페이지

검색

게시물 검색