4
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

UnityでPostgreSQLを使う

Last updated at Posted at 2019-08-20

環境

Unity 2017.1
Windows10
PostgreSQL 9.6.3
.Net 4.6

前提

PostgreSQLはインストール済み、データベースとその中身も既にある

やること

1,https://github.com/npgsql/npgsql/releases から対応バージョンのmsiをダウンロード

どのバージョンがどういう対応しているかは今はわかんない

2,msiを実行・解凍し、「Npgsql.dll」をAssets以下のどこかに入れる

https://symfoware.blog.fc2.com/blog-entry-2386.html
↑以下こちらの記事から抜粋
取ってきたmsiを実行
「Npgsql GAC Installation」にチェックを入れてインストール。
すると、

C:\Windows\Microsoft.NET\assembly\GAC_MSIL\Npgsql\ (バージョンフォルダ)\

辺りにNpgsql.dllができる

3,UnityEditorのdllファイルが置いてある場所から、「System.Data.dll」をコピーして、同様に対象のプロジェクトのAssets以下のどこかに入れる

2017以降だと、
"Unityのダウンロード先\Editor\Data\Mono\lib\mono\2.0"
にある。EditorフォルダにUnityEditorの実行ファイルがあるので、ショートカットから辿ってもいい。

UnityHubだったらHubのメイン画面から「インストール→対象バージョンのメニューバー→エクスプローラーで開く」からダウンロード先フォルダに飛べる

###以上で環境構築が完了
ここまでで、対象のプロジェクトがこんな感じになっていればOK

キャプチャ.PNG

#コード

using UnityEngine;
using Npgsql;

public class SQLExample: MonoBehaviour
{
    void Start()
    {
        //ここを実行環境に合わせて変える
        string connectionString =
          "Server=ServerName;" +
          "Database=DBName;" +
          "User ID=Id;" +
          "Password=Pass;";

        using (var dbcon = new NpgsqlConnection(connectionString))
        {

            dbcon.Open();
            NpgsqlCommand dbcmd = dbcon.CreateCommand();
            // ここら辺を欲しい内容に合わせて変える
            string sql =
          "SELECT *" +
          "FROM user_list";
            dbcmd.CommandText = sql;
            NpgsqlDataReader reader = dbcmd.ExecuteReader();
            while (reader.Read())
            {
                // ここら辺を欲しい内容に合わせて変える
                string FirstName = (string)reader["first_name"];
                string LastName = (string)reader["last_name"];
                Debug.Log(FirstName + " " + LastName);
            }
            // clean up
            reader.Close();
            reader = null;
            dbcmd.Dispose();
            dbcmd = null;
            dbcon.Close();
        }

    }
}

コードはテストコードをコピーしているので適当
usingが冗長かな…?
再生ボタンを押すとクエリが実行される

UnityでMySQLではなくPostgreSQL を使いたかった

MySQLなら記事がたくさんあったが、PostgreSQLでは一切Unityに関する記事が見つからない
けど、PostgreSQLで過去に作ったDBがあり、どうしてもそこを使う必要があった
実際にやることはそんなに多くないが2時間以上調べるのにかかったのでつらかった

古い仕様

1, http://pgfoundry.org/frs/?group_id=1000140 からDLLのZipをダウンロード

URLのリンク切れでスポーツジムのサイトに飛ぶようになっているので直します
基本的には最新版の内、自分の環境にあったものを持ってくる。今回は.Net4.6だったので、「○○-net40.zip」を使った。多分「○○-net45.zip」でも動く

2,zip中の「Npgsql.dll」を対象のプロジェクトのAssets以下のどこかに入れる

4
2
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?