SQLResultSetOpen[query]
SQLクエリから結果セットを作る.
詳細とオプション
例題
例
オプション
"Mode"
"FetchDirection"
関連項目
テクニカルノート
関連するガイド
DatabaseLink`
DatabaseLink`
SQLResultSetOpen
SQLResultSetOpen[query]
SQLクエリから結果セットを作る.
詳細とオプション
- SQLResultSetOpenを使うためには,まずNeeds["DatabaseLink`"]を使って DatabaseLink をロードする必要がある.
- 使用可能なオプション:
-
"Mode" "ScrollInsensitive" 結果セット内の動きと,結果がデータベースの変更を反映するかどうかを指定する "FetchDirection" Automatic JDBCドライバへの処理方向の提示 "FetchSize" Automatic JDBCドライバへの結果セットの大きさの提示
例題
すべて開く すべて閉じる例 (2)
Needs["DatabaseLink`"]このセクションの例を実際に試してみて,記載の通りに動作しなかった場合は,データベースの例の使用で述べているようにDatabaseLink`DatabaseExamples`パッケージを使ってデータベースをインストールするか,もとの状態に戻す必要がある可能性がある.
conn = OpenSQLConnection["publisher"];rs = SQLResultSetOpen[SQLExecute[conn, "SELECT * FROM roysched"]]SQLResultSetClose[rs]CloseSQLConnection[conn];Needs["DatabaseLink`"]SQLExecuteの代わりにSQLSelectを使う:
conn = OpenSQLConnection["publisher"];rs = SQLResultSetOpen[SQLSelect[conn, "roysched"]]SQLResultSetClose[rs]CloseSQLConnection[conn];オプション (3)
"Mode" (2)
Needs["DatabaseLink`"]希望の結果セットがスクロール可能であるかどうかと,根底となるデータの変更の影響を受けるかどうかによって"ForwardOnly","ScrollInsensitive","ScrollSensitive"のいずれかを指定する:
conn = OpenSQLConnection["publisher"];rs = SQLResultSetOpen[SQLExecute[conn, "SELECT * FROM roysched"], "Mode" -> "ForwardOnly"]SQLResultSetRead[rs, 10]SQLResultSetClose[rs]CloseSQLConnection[conn];Needs["DatabaseLink`"];
Needs["JLink`"];モード"MySQLStreaming"はMySQLドライバによってはサポートされている.スクロールできないモードは少ないメモリ量での大きな結果セットのストリーミングに適している:
conn = OpenSQLConnection[JDBC["MySQL(Connector/J)", "localhost/sandbox"], "Username" -> "guest", "Password" -> "guest"]javaMem[] := Module[{rt},
LoadJavaClass["java.lang.Runtime"];
rt = Runtime`getRuntime[];
rt@totalMemory[](* allocated; some is free for jvm use *)
];
memReport[] := TableForm[List@{MemoryInUse[], javaMem[], MemoryInUse[] + javaMem[]}, TableHeadings -> {None, {"Kernel", "Java", "Total"}}]memReport[]rs = SQLResultSetOpen[SQLExecute[conn, "SELECT * FROM test_tab LIMIT 100000"], "Mode" -> "ForwardOnly"]AbsoluteTiming[rows = 0;While[ListQ[data = SQLResultSetRead[rs, 100]], rows += Length@data];rows]メモリ使用量は比較的高い.これはドライバが結果セットをメモリ内にコピーしておくからである:
memReport[]SQLResultSetClose[rs];
CloseSQLConnection[conn];
ReinstallJava[];
conn = OpenSQLConnection[JDBC["MySQL(Connector/J)", "localhost/sandbox"], "Username" -> "guest", "Password" -> "guest"];
memReport[]rs = SQLResultSetOpen[SQLExecute[conn, "SELECT * FROM test_tab LIMIT 100000"], "Mode" -> "MySQLStreaming"]AbsoluteTiming[rows = 0;While[ListQ[data = SQLResultSetRead[rs, 100]], rows += Length@data];rows]memReport[]SQLResultSetClose[rs];
CloseSQLConnection[conn];"FetchDirection" (1)
Needs["DatabaseLink`"]"Forward","Reverse",または"Unknown"を指定して,JDBCドライバにさまざまな取り出しおよびキャッシュ方法を適用する:
conn = OpenSQLConnection["publisher"];rs = SQLResultSetOpen[SQLExecute[conn, "SELECT * FROM roysched"], "FetchDirection" -> "Reverse"]SQLResultSetRead[rs, 10]SQLResultSetClose[rs]CloseSQLConnection[conn];