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

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

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

Go(golang)は、Googleで開発されたオープンソースのプログラミング言語です。

MySQL

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

Q&A

解決済

1回答

2072閲覧

Go言語で、違うDBを使いたいが使えない

退会済みユーザー

退会済みユーザー

総合スコア0

Go

Go(golang)は、Googleで開発されたオープンソースのプログラミング言語です。

MySQL

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

0グッド

0クリップ

投稿2016/06/21 09:47

以前開発していたものとは別に、現在開発を行っているのですが

以前に使っていた、dbが邪魔していて今回の開発の方で、dbを使わせてくれません。
どうしたら、使えるようになるでしょうか。exitしろと言われていますが、解決する手段が分からず困っています。以下がエラーログです。

error

1insert error: Error 1146: Table 'chat.student' doesn't exist 2exit status 1

こちらが現在のソースコードです。以前と変わったところはそんなにありませんが、そのexitしろと言われている方では、insertがしっかりとできるので、dbのexitができれば使えると思うので、わかる方いましたらお願いします。

package main import ( "database/sql" "fmt" _ "github.com/go-sql-driver/mysql" "html/template" "log" "net/http" ) type account struct { id int name string `db:name` user string `db:user` password string `db:password` } func singup(w http.ResponseWriter, r *http.Request) { if r.Method == "GET" { t, _ := template.ParseFiles("template/singup.html") t.Execute(w, nil) } else { db := getDB() defer db.Close() r.ParseForm() name, user, password := r.Form["name"][0], r.Form["user"][0], r.Form["password"][0] if name == "" || user == "" || password == "" { fmt.Fprintln(w, "全て入力してください。") http.Redirect(w, r, "/", http.StatusFound) return } query := "INSERT INTO student values(null, ?, ?, ?)" result, err := db.Exec(query, name, user, password) if err != nil { log.Fatal("insert error: ", err) } else { log.Fatal("OK") } if lastId, lerr := result.LastInsertId(); lerr != nil { fmt.Println("insert last id: %d", lastId) } } } func getDB() (db *sql.DB) { db, err := sql.Open("mysql", "root:pass@/chat") if err != nil { log.Fatal("not connect", err) } return } func main() { http.HandleFunc("/", singup) //http.HandleFunc("/login", login) err := http.ListenAndServe(":3000", nil) if err != nil { log.Fatal("ListenAndServe:", err) } }

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

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

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

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

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

guest

回答1

0

ベストアンサー

chatデータベースにstudentテーブルがいないだけのように見えますが、テーブルはそのデータベースに存在しているのでしょうか?

以前に使っていた、dbが邪魔していて今回の開発の方で、dbを使わせてくれません。

とおっしゃられていますが、DBが異なるのであれば、

db, err := sql.Open("mysql", "root:pass@/chat")

このchatの部分をstudentテーブルが存在するデータベースに変更すればよいと思います

投稿2016/06/21 09:53

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

退会済みユーザー

退会済みユーザー

2016/06/21 09:58 編集

また別で開発がしたいので、その使っているdbを変更することは不可能なのでしょうか。 今回のカラムの中身は異なるものなので。 今回はchatというデータベースにaccountというテーブルを作っています。 上の方で一応宣言してるのですが反映されていないのですかね...
退会済みユーザー

退会済みユーザー

2016/06/21 10:00

一つのアプリケーションでDBを2つ利用したいのであれば、 `db2, err := sql.Open("mysql", "root:pass@/chat2")` などのようにして2種類のコネクションを利用すればよいと思います。 DBはアプリケーションで1つだけど、別なアプリケーションとして使いまわしたいよ、というような意味なのであれば、アプリケーションを複製して片方を変更すればよいと思いますが、「別で開発」というのはどういう意味でしょう
退会済みユーザー

退会済みユーザー

2016/06/21 14:05

新しいプロジェクトということですね。 1つ目のプログラムと今開発しているものは別物で、一つ目でそのstudentというテーブルを使いました。今回はそれと別にまたもう一つデータベースから作り直して使っています。 なので、全く別物で、宣言も変えているので、どうしてなのかなと。 goだと一回一回使うdbを何かしらで大本からから何か変えないといけないのでしょうか。
退会済みユーザー

退会済みユーザー

2016/06/21 14:09

sql.Open("mysql", "root:pass@/chat") とすることでデータベースとの接続を行っています。最後の/chatでchatという名前のデータベースへ接続するという意味ですので、利用するデータベースが異なるのであればこの部分はあたらしく作成しているデータベースの情報によって変更する必要があります。
退会済みユーザー

退会済みユーザー

2016/06/22 05:52

以前はcardというデータベースで接続しているので、今回使っているのはchatなので、間違っていることはないはずなのですが、どうなのでしょう。 Goの方で、プロダクト毎にデータベースを変更する必要等あるのでしょうか。
退会済みユーザー

退会済みユーザー

2016/06/22 05:57

あ、ごめんなさい、最初のコメントちゃんと読めてなかったですね。 > 今回はchatというデータベースにaccountというテーブルを作っています であればデータベース接続は正しくて、 query := "INSERT INTO student values(null, ?, ?, ?)" このSQLのstudentが間違っているということです
退会済みユーザー

退会済みユーザー

2016/06/22 05:59 編集

そうでした! 私のコードミスでした、すみません! よく確認していませんでした。 ありがとうございます
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問