投稿日:2021年3月4日
更新日:2021年3月3日
DBの種類によって、SQL文って、変わるので困るよね~www
Javaの開発で、テッキリMYSQLを使うと思っていましたが、今回の開発は、MSのSQLサーバになるそうです^^;
(頂いたサンプルは、MYSQLだったので、テッキリそうだと思っていました)
問題は、SQLクラス(自作SQL支援クラス)をMYSQL用に作ってしまったことです(笑)
そのクラスにて、Limitを使っているということで、Sqlサーバではエラーになってしまいます^^;
- なるべく汎用的なSQLを使用してクラスを作成した
- でも、Limitは見逃してしまったOzu~www
自作クラスをSQLSERVER用に書き換えてもいいのですが・・・。
- それでは、面白くない!
- この自作クラスは、私の資産になる!
- この自作クラスを汎用的に、色々なDBに接続可能にすべきである。
- どうしても、固有のSQLを使用したいのであれば、SQL文を直にPGに書くことで回避可能である。
ということで、このクラスの機能アップをすることに決めました♪
LIMITをSQL Serverで使うには!
基本的に、ないものはない!
ということで、LIMITを使わない方法がベターと感じます!
こんな感じかなと思います!
- Limitは、BETWEEN ss AND eeに変える
- そうすることで、クラスのパタメータはそのままでOKである。
- 又、パラメータ自体は、WEBが基本なので、SQLサーバーはほぼない。
- よって、パラメータ関数は、LIMITのままでOKである。
- BETWEENを使うので、Row№が必要である。
- 後は、やりながら調整かな!(笑)
ということで、予定はバッチリ!(たぶん)
後は、実行するのみ!
予定はあくまで予定であって、実際に行うと・・・^^;
さて、まずは、MySql(実際は、MariaDB)専用のクラスになっているので、Enumで、分岐するようにしました。
分岐処理で、SqlServer以外は、Limtで行うようにして、テスト完了!
次に、SqlServerを見越して、行№を追加
Select
@rownum:=@rownum+1 as RowNo
, ttt.*
From
(SELECT @rownum:=0) AS ROW_TBL,
ttt As ttt;
@rownum:=@rownum+1 as RowNo
と
(SELECT @rownum:=0) AS ROW_TBL,
を
SqlServer以外は、出力するに変更!
テストも問題なし!!
さて、SQLSERVERに接続を切り替えます。
Sqlサーバの環境作成!
あれ?構成マネージャーが~www^^;
これは、経験した覚えが!!(覚えていました♪)
- まずは、ここに行って
- C:\Program Files (x86)\Microsoft SQL Server\120\Shared
- コマンドで
- mofcomp sqlmgmproviderxpsp2up.mof
- これで、OK!!
SqlServerの環境が出来たので!!
接続~♪
うまくいかないwww^^;(まぁこんなもんですねwww^^;)
原因検索としますか!
- ファイヤーフォルは?(問題なし!)
- 接続文字列は?(問題なし!)
- なんだwww^^;
結論は、構成マネージャーで、Tcp-Ipのポートを変更した後、SQLサーバの再起動を忘れていました。oz~www^^;
JAVAからの接続も出来たので、SQLクラスを変更!
えっ!
行№から、between aaa 1 to 10で、抜出したいのに、まず、行№は、項目を指定しないといけないwww^^;
サブクエリーを使って、行いたいが、Orderが出来ないwww^^;
何か方法があるのか?
駄目ですね~^^;Google先生お願いします♪
見つけました。
使ったことがないなぁ~www^^;
でも、これって、読み飛ばしなので、速度に影響がありそうなぁ~www^^;
悩み中~。
- Limitは、いつどのように使う?
- 基本的には、SQLサーバのTOPと一緒の使い方しかしない。
- ある点から10件とかは、ある点の条件(Where句)で補える!
- ということは!下記が基本になると考えます。
- limitの変わりは、Top句とする。
- 但し、開始位置が0の場合とする。
- 開始位置が0でない場合は、仕方ないので、Offsetにて対応する。
- limitの変わりは、Top句とする。
方針が決定したら、PGを作るのみ!!
テストも完了して、これでOKかな♪
残っている懸案
分類 | 懸案 | 結論 | 完了 |
---|---|---|---|
java | throws ServletException, IOException | ||
今回のまとめ
予定では、BETWEEN ss AND eeを使用する予定でしたが、
結局、使っていませんね(笑)
- MSのSQLって、こんなことも出来ないとやばいような~www^^;
(まぁ~。私が他の方法を知らないだけの可能性が大ですがwww^^;)