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

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

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

R言語は、「S言語」をオープンソースとして実装なおした、統計解析向けのプログラミング言語です。 計算がとても速くグラフィックも充実しているため、数値計算に向いています。 文法的には、統計解析部分はS言語を参考にしており、データ処理部分はSchemeの影響を受けています。 世界中の専門家が開発に関わり、日々新しい手法やアルゴリズムが追加されています。

MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

データベース

データベースとは、データの集合体を指します。また、そのデータの集合体の共用を可能にするシステムの意味を含めます

Q&A

解決済

1回答

427閲覧

データベースとの接続をきちんと切りたい R言語 RMySQLライブラリ

NUEH7hdOSA

総合スコア15

R

R言語は、「S言語」をオープンソースとして実装なおした、統計解析向けのプログラミング言語です。 計算がとても速くグラフィックも充実しているため、数値計算に向いています。 文法的には、統計解析部分はS言語を参考にしており、データ処理部分はSchemeの影響を受けています。 世界中の専門家が開発に関わり、日々新しい手法やアルゴリズムが追加されています。

MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

データベース

データベースとは、データの集合体を指します。また、そのデータの集合体の共用を可能にするシステムの意味を含めます

0グッド

0クリップ

投稿2017/07/06 13:00

###前提・実現したいこと
データベースとの不要な接続を無くす。(おそらく沢山接続中)
データベースと接続したら、途中でスクリプトが止まっても最後にきちんと接続を切るコードを書きたい。

###発生している問題・エラーメッセージ

Error in .local(drv, ...) :
Failed to connect to database: Error: Too many connections

###該当のソースコード
md <- dbDriver("MySQL")
dbname <- "dbtest"
user <- "root"
password <- "pass"
host <- "localhost"

dbconnector <- dbConnect(md,dbname=dbname,user=user,password=password,host=host)
rec_num <- dbGetQuery(dbconnector, "SELECT COUNT(*) FROM ui3;")
if(rec_num > 0)
dbSendQuery(dbconnector, "DELETE FROM ui3;")
dbDisconnect(dbconnector)

dt <- data.frame(hour=hour,minute=minute,base=base,target=target,U=U)

foreach::foreach(h=dt$hour,m=dt$minute, b=dt$base, t=dt$target, u=dt$U) %do% { dbconnector <- dbConnect(md,dbname=dbname,user=user,password=password,host=host) sql <- paste("INSERT INTO ui3 VALUES(", h, ",", m,",", b, ",", t, ",",as.integer(u), ");", sep = "") dbSendQuery(dbconnector,sql) dbDisconnect(dbconnector) }

###試したこと
スクリプトを複数回実行
データベースとの不要な接続を無くす。 → RStadio とWindowsの再起動

###補足情報(言語/FW/ツール等のバージョンなど)
R言語とRStadio
RMySQLライブラリを使用
MySQL

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

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

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

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

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

guest

回答1

0

ベストアンサー

こんにちは

dbConnectをSQL発行前に必ず行っていますが、最初に一度読んで
dbconnectorを使いまわすことで接続数は抑えられると思います。
(特にforeachの中でも行っているのでかなりの接続数になっているのではないかと思います)
ちなみにdbDisconnectも最後に1回行えばいいと思います。

他言語でもそうですが、SQL発行の度にconnectを行うと次々と新しい接続が増えてしまいますので
1つの接続を使いまわすシングルトンというデザインパターンで実装します。

すいません、R言語についてあまり知識はないので
間違った回答をしているかもしれません・・・

投稿2017/07/07 06:30

編集2017/07/07 06:32
s-washion

総合スコア204

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

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

NUEH7hdOSA

2017/07/07 14:45

ご回答ありがとうございます。ご指摘の通りforeach内で常にdbConnectを行うのは多すぎました。よくよくデバッグしてみるとfoeach内でMySQLに渡す値にNAが混じっておりそれが処理を止める原因だったようです。 「シングルトン」名前くらいしか頭に無かったのですが調べてみると成程です。R言語はエラー処理できるそうなので、取り敢えずは動くようになりました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.49%

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

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

質問する

関連した質問