Luaの自体がデータベースにアクセスするための機能を提供していませんが、外部の拡張子を持つ私たちは簡単な拡張ライブラリを導入するために、ここで、データベース上でさまざまな操作を実現することができます - LuaSQL、あなたはダウンロードエリアでそれを得ることができます。
LuaSQLは、Luaは均一な方法で、一般的なデータベース(例えばPostgreSQLの、ODBC、JDBC、MySQLの、SQLiteは、OracleとADOなど)の様々なアクセスすることができ、簡単なオブジェクト指向のAPIを定義します。
LuaSQL luasqlグローバルテーブルの名前(Luaの初期化関数とはluaopen_luasql定義DRIVERNAME 発生)、このテーブルを駆動データベースをロードする初期化方法が記憶されています。環境オブジェクト、これらの環境のオブジェクトを作成することができ、これらの方法は、あなたが接続オブジェクトデータベースを作成することができます。Connectionオブジェクトは、さまざまなSQL文を実行し、最終的にはカーソルオブジェクトを生成することができます。
Environmentオブジェクト
環境オブジェクトは初期化関数luasqlテーブルに格納されている各種データベースによって作成され、これらの関数の名前とそれらの対応するデータベース名は同じです。例えば:
ENV = luasql.odbc()
これは、ODBCドライバを使用して環境オブジェクトを作成します。JDBCドライバではなく、特別な、あなたも、それは内部ドライバを使用すべきかを知るようにする必要がありますが、環境オブジェクトを作成するときに、あなたは、パラメータとしてluasql.jdbc関数に渡されたクラス名を推進すべきです。例えば:
ENV = luasql.jdbc( "はcom.mysql.jdbc.Driver")
方法
ENV:クローズ()
閉じた環境オブジェクト。私たちは、この関数は、それに関連付けられたすべてのデータベース接続がクローズされている必要があります後にのみ呼び出す必要があります。
戻り値:真閉じる成功戻り、クローズに失敗したり、環境オブジェクトは、偽のクローズドリターンをされています。
ENV:CONNECT(sourcenameここ[ユーザ名 [、パスワード]])
指定したユーザ名(ユーザ名)とパスワード(パスワード)とデータソース(sourcenameここ)に接続されています。
sourcenameここではデータベース駆動型によって異なります。例えば、単純なデータベース名をすることができますいくつかの使用は、MySQLの、PostgreSQLとSQLiteのは、ODBCドライバーがDSN名を必要とする、Oracleドライバは、サービス名を必要とするJDBCドライバを使用すると、「JDBCのように、文字列を必要とする:<データベースシステム>: // <データベース名>「と同じ。
参照:PostgreSQLとMySQLの拡張拡張を。
戻り値:接続オブジェクト。
Connectionオブジェクト
特別な接続オブジェクトの属性データソース接続が含まれている、環境です:作成した接続。
方法
CONN:クローズ()
データベース接続を閉じます。のみすべてのカーソルの場合に接続を閉じるように成功することができます閉じています。
戻り値:クローズ成功はtrueを返し、または接続を閉じるには失敗は閉じ返す偽てきました。
現在のトランザクションをコミットします。このメソッドは、トランザクションをサポートしていないデータベースでは正しく動作しません。戻り値:trueを返し、成功、または虚偽のトランザクション処理リターンをサポートしていないデータベースを提出するために失敗を提出します。
CONNは:(ステートメント)を実行
指定されたSQL文の実行
カーソルオブジェクト、または番号を示している。この文によってそこに記録されているどのように多くの影響を与える:戻ります。
現在のトランザクションをロールバックします。このメソッドは、トランザクションをサポートしていないデータベースでは正しく動作しません。戻り値:ロールに成功したロールバック真、または障害がバックデータベースは偽のトランザクション処理の戻りをサポートしていません。
CONN:にsetAutoCommit(ブール値)
開閉「トランザクションを自動コミット」機能します。このメソッドは、トランザクションをサポートしていないデータベースでは正しく動作しません。シングル・データベースサポートの取引では、自動コミットトランザクション処理をサポートしていない、データベース駆動型の異なるに基づいており、異なる結果を持っています。
戻り値:trueを返します設定の成功、または虚偽のトランザクション処理リターンをサポートしていないデータベースを設定するのに失敗。
カーソルオブジェクト
カーソルオブジェクトは、SQL文の結果からデータを抽出する様々な方法が含まれています。それは、接続され:実行作成しました。
方法
CUR:クローズ()は
カーソルオブジェクトを閉じ。
戻り値:クローズ成功はtrueを返し、またはカーソルオブジェクトをクローズに失敗すると、閉じ返す偽てきました。
次のレコードにSQL文の結果の結果を得ました。
このメソッドを呼び出すときに引数を渡さない場合、結果は、メソッドの呼び出し元に直接返されます。渡されたパラメータテーブル場合は、その結果を表(Luaの概念のテーブル)にコピーされ、戻されます。同時に、あなたもテーブルが返されるので示すパラメータモードを指定することができます。これは、次の2つの値があります。
「n」は
結果数値インデックス付きテーブル識別子(デフォルト)「」
アルファベット順のインデックス識別子で結果
数値インデックス位置識別子フィールドの順序は、SELECT SQLステートメントで後者により決定;フィールドの名前に応じて文字識別子インデックスは次式で与えられます。
オプションのパラメータテーブルは、次のレコードを格納するために使用されます。
この方法は、作られているデータベースドライバに使用したかを決定するために、結果の戻り値の型を保証するものではありません。今のところ、PostgreSQLの、及びMySQLはすべての結果が文字列に変換され駆動する、およびOracle ODBCドライバLuaは対応に応じてタイプフィールド・タイプの値を返す
戻り値:上記のように結果データを、または任意の非存在下で結果を記録するときはnilを返します。有効な結果が得られたときに、これが唯一のケースリターンゼロではないことにも注意してnilを返すことがあります。
戻り値:そのフィールド名のリスト。
CUR:getcoltypes()
戻り値:フィールドタイプのリスト。
PostgreSQLの拡張
方法の上記の一般的な特性に加えて、PostgreSQLのドライブは、さらに次の機能を提供します。
ENV:接続(sourcenameに[ユーザ名[、パスワード[、ホスト名[ポート]]]])
PostgreSQL はこの駆動方法は、接続のホスト名とポート番号を指定する二つの追加オプションパラメータを提供します。:もちろん、あなただけの1つのパラメータが機能(接続(「DBNAME = <たとえば、環境としてPostgreSQLのマニュアルのPQconnectdbのパラメータのように、すべての接続情報を含めることができ上陸できる名前 > =ユーザー< ユーザー名 >」))
を参照してください:環境オブジェクト。
戻り値:接続オブジェクト。
も参照:カーソルがオブジェクト
戻り値:レコード数SQLクエリの結果を。
MySQLの拡張
方法の上記の一般的な特性に加えて、MySQLドライバは、さらに次の機能を提供します。
ENV:接続(sourcenameに[ユーザ名[、パスワード[、ホスト名[ポート]]]])
MySQL はこの駆動方法は、接続のホスト名とポート番号を指定する二つの追加オプションパラメータを提供します。
参照:環境オブジェクト。
戻り値:接続オブジェクト。
Oracleの拡張
方法の上記の一般的な特性に加えて、オラクル・ドライブは、さらに次の機能を提供します。
CUR:NUMROWS()
も参照:カーソルがオブジェクト
戻り値:レコード数SQLクエリの結果を。
以下は、アクセスのLuaによるアクセスの簡単な例であります
-負荷ODBC外部拡張
アサート(LOADLIB( "ODBC.DLL"、 "luaopen_luasqlodbc"))()
-オブジェクト生成環境
ENV =アサート(luasql.odbc())
-データベースへの接続
CON =アサート(ENV: CONNECT( "luatest"、 - DSN名
"ユーザ名"、 -ユーザ名
"パスワード")) -パスワード
-選手データベーステーブル内のデータを削除
アサート(CON: "DROP TABLEの実行プレイヤーを")
-データテーブルの選手を作成
:アサート(実行[[CONを
TABLE選手(CREATE
名VARCHAR(50)、
クラスVARCHAR(50)
)
]])
にレコードを追加する-を
一覧= {
=クラス、{名前= "ギャモン、ニック" "MAGE"}、
{名前= "デイビット・ヘイリー"、クラス= "戦士"、}、
{名前= "Shadowfyr"、クラス= "プリースト"、}
}
ペアのI、Pのため(リスト)を行う
アサート(CONを(String.Formatの([実行
INSERT INTOプレーヤー
、p.name、p.class)VALUES( '%S'、 '%S')]]
))
-ループの終了は、
-クエリを実行し、リターンしますカーソルオブジェクト
CUR =アサート(CON:実行( "SELECTからプレイヤー*"))
-印刷結果のすべてのレコード
の行= CUR:フェッチ({} 、 "")
の行ないが
印刷( "\ nは------新記録--------- \ n-は")
table.foreach(行、印刷)
-テーブルの繰り返し使用、資源を節約するために
、行を= CUR:フェッチ(行、「」)
エンド- whileループ
-閉じられた、すべてのデータベースオブジェクトに関連
CUR:使用閉じる()
CON:使用閉じる()
ENV:ユース閉じます()
次の手順では、MySQLデータベース操作のLuaであります
「luasql.mysql」が必要
-オブジェクトの作成環境
ENV = luasql.mysql()
-データベースへの接続
CONN = ENV:接続( "データベース名"、 "ユーザ名"、 "パスワード"、 "IPアドレス"、ポート)
-コード化された書式設定データベース
connは"SET NAMES GB2312"を実行
-データベース操作実行
CUR =をCONN:実行( "役割SELECT * FROM")
行= CUR:FETCH({}、 "")
-作成されたファイル・オブジェクト・
ファイル= io.open ( "role.dat"、 "W +");
行を行う一方で
VAR = String.Formatの( "%D%S \ N-"、row.id、row.name)
印刷(VAR)
ファイル:書き込み(VAR)
行= CUR:(行、 "A")FETCH
終了
使用クローズ() -クローズファイルオブジェクト:ファイル
CONN:クローズ() -クローズデータベース接続
ENV:近い() -クローズデータベース環境を