ラベル SQL の投稿を表示しています。 すべての投稿を表示
ラベル SQL の投稿を表示しています。 すべての投稿を表示

2015年1月31日土曜日

カレンダープログラミング プチコンテスト 2014

The calnedar programing petit contest 2014 / Transact-SQL BizBrowser
204年10月、プログラミング生放送勉強会のマスコットキャラクター・プロ生ちゃんがツイッターにこんな投稿をしました。

他の人とかぶらない内容で投稿してみました。
ニッチすぎて採用されませんでしたが。

Transact-SQL (SQL Server 2008 R2)

SQLはデータ操作言語(Data Manupilate Language)です。
プログラミング言語に必要な順次(逐次)処理・分岐処理・繰返し処理は出来ません。
なので純粋なSQLではカレンダーを表示するようなコードは書けません。
SQL ServerのTransact-SQLやOracleのPL/SQLはそれぞれメーカーが独自に開発したSQLライクなプログラミング言語です。
PL/SQLは開発環境をすぐに用意できなかったのと既に他の方が投稿されていたので、Transact-SQLで作ってみました。
テーブルやストアドは使わないので実行に特別な権限は不要だと思います。


Biz/Browser用

Axis SoftのBiz/Browserがどんなところで使われているか把握してませんが誰も応募してないので作ってみました。
JavaScriptがベースなので簡単でした。


関連ブログ

[Java] 文字列がSQL ServerのDateTime型に適合するかチェックする
オープンストリーム・Biz/Browserでアプリ開発

以上、参考になれば幸いです。

2014年6月14日土曜日

[Java] 文字列がSQL ServerのDateTime型に適合するかチェックする

How to validate the DateTime format
Javaには文字列が日付に適合するかを調べるDateFormatクラスがあります。
DateFormatクラスで日付に適合した文字列がSQL ServerのDateTime型に適合できないことがありました。

そこでJavaでSQL ServerのDateTime型の適合するかチェックする機能を作ってみました。

SQL ServerのDateTime型の仕様

・年月日のセパレーターはハイフン(-)
・時分秒のセパレーターはコロン(:)
・年は1753から9999まで
・最小単位は1ミリ秒

年月日のセパレーターはハイフンの他、スラッシュ (/)やピリオド (.) も可能ですが今回はハイフンのみ可とします。
また、扱える最大値は9999-12-31 23:59:59.997でこれを1ミリ秒でも超えると扱えませんが今回は無視します。
他にもSQL ServerのDateTimeに適合するケースは沢山ありますが今回は次の書式を可とします。

YYYY-MM-DD hh:mm:ss.n*
・YYYYは1753~9999の年を表す
・MMは01~12の月を表す
・DDは01~31の日を表す
・hhは00~23の時を表す
・mmは00~59の分を表す
・ssは00~59の秒を表す
・n*は0~999のミリ秒を表す(省略可)


サンプル



なんだか汚いコードになってしまいました。

isDateTimeFormat(String source) メソッドの内容が日付型の適合をチェックする部分です。
staticなmainメソッドから呼ばれるため、isDateTimeFormatメソッドもstaticにしてます。 非staticメソッドから呼び出す場合はstaticにする必要はありません。
日付として適合ならtrue、不適合ならfalseを返します。
はじめにパターンマッチで書式をチェックします。
書式がOKだったら各要素が日付として正しいかチェックします。

関連ブログ

[Java] SwingのUIを無限ループで更新するには
[Android] PrintStream#printfの最適化(SDK r08でのエラーを別の方法で解決する)
[Android] Javaのstaticクラスから非sataticメソッドを呼び出すには
[Blender] obj2opengl.plをJava用に改造する
[Windows8][Android] EclipseをXP互換モードで起動する理由(Can't bind to local 8600 for debugger)
[Android] Activityに時計を表示する(Activityの非同期更新)
[Android] アナログ時計のアプリを作ってみました
[Android] ストップウォッチアプリを作ってみました
[Android] 方位センサーを使ってコンパスアプリを作る
[Android] OpenGLの簡易画像ビュアーにSDカード内の画像を表示する
[Android] Android-SDKでやってはいけないこと


以上、参考になれば幸いです。

2011年3月5日土曜日

[Android] SQLiteDatabase created and never closed

How to slove the problem "SQLiteDatabase created and never closed"

SQLiteを使ったアプリを作っていたら、ごく稀にタイトルに書いたエラーがログに出力されていることに気がつきました。
ただし、同じ操作をしても再現できません。
ソースをよく見たらCursorのインスタンスをclose()し忘れている箇所が何カ所かありました。
おそらくclose()忘れが原因です。
Cursorが不要になったら直ちにclose()するようにしました。

以下のソースはint型の値をSQLiteに読み書きするキー・バリュー方式(?)のクラスです
このクラスは汎用性が高いのでMtkはアプリケーションの設定情報を保存するためにを使い回してます。
キャッシュが肥大化しないようにVACUUMもします。

上記のソースのc.close()をわざと消して試してみましたが、エラーが起こらないことが多いです。
再現性がないので自動でがclose()してくれてるケースがあるのかもしれません。

SqliteSampleの使い方
1.int型データの保存方法
setIntメソッドで保存します。第1引数はキーとなる文字列、第2引数は保存する値です。
キーが既に保存されていれば値を上書きし、保存されていなければ新規に登録します。

2.int型データの取り出し方法
getIntメソッドで値を取り出します。キーに対応する値がなければgetIntの第2引数の値が返されます。

以上、参考になれば幸いです。

現在公開中
お天気ロイド
Eye元気!
Wi-Fi sync screen
いずれもキャッシュを肥大化させないためにVACUUMしています