前提・実現したいこと
テーブルのデータを条件を指定して削除したいです
書籍情報を登録してあるテーブルから、タイトルを指定してそのデータだけ削除したいのですが、where句を使って条件を指定しても削除されません
ruby上で実行してもだめだったので、sqlite3上でやってみたのですがそれでもだめでした
発生している問題・エラーメッセージ
コードは実行できますが、削除されません
該当のソースコード
sqlite3
1create table if not exists bookinfos( 2 title varchar(50), 3 author varchar(50), 4 pages int, 5 publish_date date); 6 7insert into bookinfos values('aaa', 'bbb', 1, '20200404'); 8 9delete from bookinfos where title = 'aaa'; 10
ruby
1require'date' 2require'dbi' 3 4class BookInfo 5 attr_accessor :title, :author, :pages, :publish_date 6 def initialize(title, author, pages, publish_date) 7 @title = title 8 @author = author 9 @pages = pages 10 @publish_date = publish_date 11 end 12 13 def to_s 14 "#{@title}, #{@author}, #{@pages}, #{@publish_date}" 15 end 16 17 def toFormattedString(sep="\n") 18 "書籍名:#{@title}#{sep}著者名:#{@author}#{sep}ページ数:#{@pages.to_s}#{sep}発刊日:#{@publish_date.to_s}#{sep}" 19 end 20end 21 22class BookInfoManger 23 24 def initialize(db_fname = "book_infos.db") 25 @db_fname = db_fname 26 @dbh = DBI.connect("DBI:SQLite3:#{@db_fname}") 27 @dbh.do("create table if not exists bookinfos( 28 title varchar(50), 29 author varchar(50), 30 pages int, 31 publish_date date);") 32 end 33 34 35 def addBookInfo 36 book_info = BookInfo.new("", "", 0, Date.new) 37 print "書籍名:" 38 book_info.title = gets.chomp 39 print "著者名:" 40 book_info.author = gets.chomp 41 print "ページ数:" 42 book_info.pages = gets.chomp.to_i 43 print "発刊年:" 44 year = gets.chomp.to_i 45 print "発刊月:" 46 month = gets.chomp.to_i 47 print "発刊日:" 48 day = gets.chomp.to_i 49 book_info.publish_date = Date.new( year, month, day ) 50 @dbh.do("insert into bookinfos values 51 ( 52 '#{book_info.title} ', 53 '#{book_info.author} ', 54 #{book_info.pages}, 55 '#{book_info.publish_date} ');") 56 end 57 58 def listAllBookInfos 59 @dbh.select_all("select * from bookinfos") do |row| 60 puts BookInfo.new(row[:title], row[:author] , 61 row[:pages] , row[:publish_date]).toFormattedString 62 end 63 end 64 65 def deleteBookInfos 66 print "削除する書籍名:" 67 d_title = gets.chomp 68 puts d_title.class 69 @dbh.do("delete from bookinfos where title = '#{d_title}';") 70 puts "削除完了" 71 end 72 73 def run 74 nums = [] 75 while true 76 #メニュー表示(puts) 77 print "1.蔵書データの登録 782.蔵書データの表示 794.蔵書データの削除 809.終了 81番号を選んでください(1,2,4,9):" 82 #メニュー番号受付(gets.chomp) 83 num = gets.chomp 84 #ログの保存 85 nums.push(num) 86 #メニュー番号に応じた処理を実行する(case / when) 87 case num 88 when "1" 89 #登録処理(addBookInfo) 90 addBookInfo 91 when "2" 92 #表示処理(listAllBookInfos) 93 listAllBookInfos 94 when "4" 95 deleteBookInfos 96 when "9" 97 break 98 #1番に戻る 99 end 100 end 101 end 102end 103 104bim = BookInfoManger.new 105bim.run
試したこと
補足情報(FW/ツールのバージョンなど)
ここにより詳細な情報を記載してください。
回答2件
あなたの回答
tips
プレビュー