質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.49%
Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

SQLite

SQLiteはリレーショナルデータベース管理システムの1つで、サーバーではなくライブラリとして使用されている。

SQL

SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

Q&A

解決済

2回答

1421閲覧

ruby, dbi, sqlite3,テーブルデータのdelete

wpx-vv1uZ

総合スコア23

Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

SQLite

SQLiteはリレーショナルデータベース管理システムの1つで、サーバーではなくライブラリとして使用されている。

SQL

SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

0グッド

0クリップ

投稿2020/06/08 01:01

編集2020/06/08 04:23

前提・実現したいこと

テーブルのデータを条件を指定して削除したいです
書籍情報を登録してあるテーブルから、タイトルを指定してそのデータだけ削除したいのですが、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/ツールのバージョンなど)

ここにより詳細な情報を記載してください。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

maisumakun

2020/06/08 01:09

Insertは成功していますか?(2020/4/4が割り算になってしまうように見えます)
wpx-vv1uZ

2020/06/08 01:12

すみません、2020-4-4で入力しています
wpx-vv1uZ

2020/06/08 01:16

・・・ すみませんrubyのなかでうごかしているので正確な入力方法をしらないのですが select * from bookinfos; を打つときちんと出るのでデータは入っています ですが削除がうまくできません
maisumakun

2020/06/08 01:19

> rubyのなかでうごかしているので DELETEを実行しているのもRubyからですか?
wpx-vv1uZ

2020/06/08 01:21

最初rubyから実行してうまくいかなかったので、sqlite3をたちあげてやってみたのですが、そっちでもうまくいきませんでした
guest

回答2

0

自己解決

ruby

1@dbh.do("insert into bookinfos values 2 ( 3 '#{book_info.title}', 4 '#{book_info.author}', 5 #{book_info.pages}, 6 '#{book_info.publish_date}');")

投稿2020/06/10 01:08

wpx-vv1uZ

総合スコア23

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

まず、

insert into bookinfos values('aaa', 'bbb', 1, 2020/4/4);

が失敗しているのでは?

投稿2020/06/08 01:08

Orlofsky

総合スコア16415

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

wpx-vv1uZ

2020/06/08 01:35

回答ありがとうございます insert文は自分の打ち間違いでした データはきちんと入っています
Orlofsky

2020/06/08 03:06

質問のタイトルと内容がかけ離れてきました。内容に即したタイトルに修正された方がコメントが付きやすいのでは?
wpx-vv1uZ

2020/06/08 04:20

ありがとうございます そうしてみます
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.49%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問