7月 132012
 
  • Oracle10gのJDBCは、DATE型項目の場合java.sql.Date型で返却するために時刻が欠落する。
  • Oracle9.0.1より前のJDBCではjava.sql.Timestamp型で返却していたため時刻は欠落しない。
  • Oracle11gもjava.sql.Timestamp型で返却する仕様をデフォルトとしているため時刻は欠落しない。

  • Oracle10gの場合、oracle.jdbc.V8Compatible=trueを指定することでjava.sql.Timestamp型で返却する動作となる。

参考:

Oracleオブジェクト型からSQL DATEデータ型へのマッピング

Oracle Database 8i以下のバージョンではTIMESTAMPデータがサポートされていませんでしたが、SQL標準への拡張機能として、Oracle DATEデータに時刻コンポーネントが含まれていました。このため、Oracle Database 8i以下のバージョンのJDBCドライバは、oracle.sql.DATEをjava.sql.Timestampにマップして時刻コンポーネントを保持していました。Oracle Database 9.0.1以上ではTIMESTAMPがサポートされ、9iのJDBCドライバがoracle.sql.DATEをjava.sql.Dateにマッピングするようになりました。このマッピングはOracle DATEデータの時刻コンポーネントを切り捨てたため、不正確でした。この問題を克服するために、Oracle Database 11.1では新しいフラグmapDateToTimestampが導入されました。このフラグのデフォルト値はtrueです。これは、デフォルトで、ドライバがoracle.sql.DATEをjava.sql.Timestampに正確にマップして時刻情報を保持することを意味します。不正確でも10gと互換性のあるoracle.sql.DATEからjava.sql.Dateへのマッピングが必要な場合は、mapDateToTimestampフラグの値をfalseに設定します。

7月 132012
 

DBへの型のマッピングは気をつけないとダメだよという話。

予備知識とか
  • ANSI SQLのDATE型は日付のみ保持する。
  • OracleのDATE型は日付だけでなく時刻まで保持する。(秒未満の精度とタイムゾーンは保持しない)
DATE型@Java
  • java.sql.DateクラスはANSI準拠。日付までしか保持しない
  • java.util.Dateクラスはミリ秒まで保持する。
  • JDBCではjava.sql.DateクラスはDATE型(JDBC)にマッピングされる。
  • JDBCではjava.util.DateクラスはDATE、TIME、TIMESTAMP型(JDBC)にマッピングされる。
問題例とか
  • JavaでOracleに日付を登録する場合、やり方によっては時刻情報が落ちる。
  • java.sql.Dateのコンストラクタはlong型なミリ秒を受け取れるが、残るのは日付のみ。

参考:

7月 132012
 
現象

Cドライブ直下に”testdir “というディレクトリがある場合

[csharp]Directory.GetFiles(@”c:\testdir “);[/csharp]

という具合に検索すると見つからないといわれる。
ディレクトリ名末尾が全角スペースの場合も同様。

原因
[csharp]Directory.GetFiles(@”c:\testdir “);[/csharp]

と検索しても、実際に検索されるのは”c:\testdir”となるため。
空白をTrimしているっぽい。

回避策

検索するパスの末尾に”\”をつければ検索可能。

[csharp]Directory.GetFiles(@”c:\testdir\”);[/csharp]
参考

全角スペースがあるフォルダあるとSystem.IO.Directory.GetFilesがエラーになる: DOBON.NETプログラミング掲示板過去ログ

7月 132012
 
  • AuthzSVNAccessFileのグループはApacheのグループではなく[groups]を使う。
  • SVNParentPathディレクティブは、リポジトリ直下ではなく、複数リポジトリの親ディレクトリを指定する場合に使う。
  • SVNListParentPathをONにしないと、SVNParentPathで指定したディレクトリは403になる。
  • mod_auth_basic.soの認証とmod_authz_svn.soの認証は分けて考えたほうがわかりやすいかも。
    • mod_auth_basicで該当ロケーション以下のディレクトリをまとめてログイン認証。
    • mod_authz_svnで各リポジトリの各ディレクトリ単位でアクセス許可を設定。
    • つまり、BASIC認証通過後、その認証情報でSVNのアクセス権をチェックするイメージ。
      • アクセス権がなかったら403になる。
      • Eclipseではフォルダはリモートに存在しませんと出る。
  • AuthUserFile、AuthzSVNAccessFileの変更はApache再起動不要。
7月 132012
 
再現環境

サーバー:

  • CVSNT2.5.02
  • ワークグループを構成。ドメイン非参加。

クライアント:

  • Eclipse3.2.1
  • ドメインに参加している。

その他:

  • サーバークライアント間にルーターが2つある。
  • 各マシンに設定されているDNSサーバーは別。WINSサーバーは同じ。
現象

CVSNTに対してリモートからpserverでアクセスしたとき、ファイル一覧の取得などの動作が妙に遅い場合がある。
サーバーローカルから接続すると起きない。

原因

有効だがケーブルが接続されていないネットワーク接続設定があると遅くなるようだ。
恐らくクライアント名の解決で、使えないネットワークを見に行ってタイムアウトしているものと思われる。