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

2014年4月12日土曜日

Java + sqlite3 + Mac で out of memory が出てはまる

Java + sqlite3 + Mac で out of memory が出てはまる

out of memory … ?

sqlite3 を利用したJavaで何度やっても java.sql.SQLException: out of memory が発生してハマりました。。。

原因と解決方法

データベースファイルのフルパスに日本語が含まれているのが原因のようでした。
たとえ相対パスが英語であっても、データベースファイルのフルパスに日本語が含まれているとアウトのようです。
解決策はもちろん日本語フォルダ名を英語に変えればOKです。
Java + sqlite3(sqlite-jdbc-3.7.2.jar) + Mac 環境しか試していませんが、他の環境でも同じことが起こるかもしれないです。

相対パスは英語にしていたのでなかなか気付けませんでした。
ここらへんを見て、小一時間、んー。と考えて気づきました。

java - What do I have to do to avoid error of "out of memory", when connection by jdbc with sqlite3 database? - Stack Overflow / http://stackoverflow.com/questions/7060274/what-do-i-have-to-do-to-avoid-error-of-out-of-memory-when-connection-by-jdbc

そもそもこの場合に out of memory とかいわんといて欲しいです…

まとめ

プログラム書く時は日本語使わない。


Written with StackEdit.

  • この記事をシェアする

  • このエントリーをはてなブックマークに追加
  • このブログの更新をチェックする

  • follow us in feedly

2014年2月13日木曜日

Java の置換(replace系)メソッドについて

Java の置換メソッド(replace)について

replaceは正規表現が使えない

いつもどうだったっけ?となるのでメモ。

要点
いつも疑問に思うのは、replaceは正規表現使えるのか??です。
結論から言うと

  • replaceは正規表現が使えない
  • replaceAllとreplaceFirstは使える

以下に例を載せておきます。

replace, replaceAll, replaceFirst の各例

// replace
// -----
System.out.println("zzzz".replace('z', 'x'));
// => xxxx

System.out.println("zzzz".replace("zz", "x"));
// => xx

System.out.println("zzzz".replace("zz.*", "x"));
// => zzzz (正規表現が使えないので置換されない)

// replaceAll
// -----
System.out.println("zzzz".replaceAll("zz", "x"));
// => xx

System.out.println("zzzz".replaceAll("zz.*", "x"));
// => x (正規表現が使えるので置換される)

// replaceFirst
// -----
System.out.println("zzzz".replaceFirst("zz", "x"));
// => xzz

System.out.println("zzzz".replaceFirst("zz.*", "x"));
// => x (正規表現が使えるので置換される)

Written with StackEdit.

  • この記事をシェアする

  • このエントリーをはてなブックマークに追加
  • このブログの更新をチェックする

  • follow us in feedly

2014年2月11日火曜日

Servlet から JSP への値連携

Servlet から JSP への値連携

忘れないように、メモ。

よく忘れてしまうので要点だけをメモ。

Servlet側

例: ServletdoGetなどに以下を記述

request.setAttribute("name", "my name is 6vox");

JSP側

1: スクリプトを使用する場合

<p><%= request.getAttribute("name") %></p>
2: アクションを使用する場合
- jsp:useBeanをロードしてから${xxx}(EL: Expression Language)の記法で記載可能
- classscope などは揃える必要がある

<jsp:useBean id="name" class="java.lang.String" scope="request" />
#2014-02-18追記 EL記法の場合はuseBeanは不要でした
#またBeanクラスを使用する場合でもimportも不要でした
#geronimo使ってるから?最新のJSPの仕様?

<p>${name}</p>

#こう書きなおしてもOK

<p><%= name %></p>

補足

  • Session request を Session に置き換えても利用可能
  • useBean を使用する場合は、もちろんBeanクラスを使用可能
    • 例: ${user.id} で User#getId が呼ばれる

Written with StackEdit.

  • この記事をシェアする

  • このエントリーをはてなブックマークに追加
  • このブログの更新をチェックする

  • follow us in feedly

2013年11月29日金曜日

selenium InternetExplorerDriver が実行できない時の対処

ブラウザが起動できない

初期状態では起動できない場合があるようです。

エラー例: 
org.openqa.selenium.WebDriverException: Unexpected error launching Internet Explorer. Protected Mode must be set to the same value (enabled or disabled) for all zones. (WARNING: The server did not provide any stacktrace information)...

対応

ブラウザのセキュリティ設定を変更します。

インターネットオプション > セキュリティ > 保護モードを有効にするのチェックをすべて外す

↓の画像がわかりやすいです。

enter image description here source: Issue 1795 - selenium - Unexpected error launching Internet Explorer. Protected Mode must be set to the same value - Browser automation framework - Google Project Hosting

via: Selenium2のInternetExplorerDriverでエラーになった « ひよっこ。


もうひとつ動かない

以下のようなエラーで動かない場合もあるようです。

エラー例:
org.openqa.selenium.NoSuchWindowException: Unable to find element on closed window (WARNING: The server did not provide any stacktrace information)

こちらの場合は、IEDriverServer.exeというファイルをローカルに保存し、Javaのシステムプロパティにパスを設定します。

設定例:
File file = new File("C:/Selenium/iexploredriver.exe");
System.setProperty("webdriver.ie.driver", file.getAbsolutePath());
WebDriver driver = new InternetExplorerDriver();

source: java - Driver executable must be set by the webdriver.ie.driver system property - Stack Overflow


Basic認証のログインができない

以下のようにURL内でユーザIDとパスワードを指定すると、ログイン情報の入力ダイアログを省略することができます。

http://test-site.com が対象の場合

http://ユーザーID:パスワード@test-site.com

しかし、それでもログインができないことがあります。

対応

レジストリを設定しなおす必要があるようです。

設定例:

enter image description here

source: Alek’s Blog: Selenium WebDriver tips

補足

エクスプローラーおよび Internet Explorer で新しい既定の動作を無効にするには、以下のレジストリ キーのいずれかで、iexplore.exe および explorer.exe の DWORD 値を作成し、それらのデータを 0 (ゼロ) に設定します。 すべてのユーザーに適用する場合は、次のレジストリ キーに値を作成します。

HKEY_LOCAL_MACHINE\Software\Microsoft\Internet Explorer\Main\FeatureControl\FEATURE_HTTP_USERNAME_PASSWORD_DISABLE

現在のユーザーにのみ適用する場合は、次のレジストリ キーに値を作成します。

HKEY_CURRENT_USER\Software\Microsoft\Internet Explorer\Main\FeatureControl\FEATURE_HTTP_USERNAME_PASSWORD_DISABLE

source: Internet Explorer では Web サイト アドレス (HTTP URL および HTTPS URL) に含まれるユーザー名およびパスワードがサポートされない

via: Chrome 及び IE の WebDriver で Basic 認証を突破する方法 - QA@IT


Written with StackEdit.

  • この記事をシェアする

  • このエントリーをはてなブックマークに追加
  • このブログの更新をチェックする

  • follow us in feedly

2013年11月25日月曜日

Java isAllUpperCase isAllLowerCase

Javaで文字列が大文字かどうか判断したい場合はisAllUpperCaseを使用します。
また、逆に小文字かどうか判断したい場合にはisAllLowerCaseを使用します。
isAllUpperCaseとisAllLowerCaseともにboolean型でTrue or Falseを返します。



文字列(ABCD)を大文字か判断したい場合。

String str = "ABCD";
if (str.isAllUpperCase) {

    System.out.println("true");
} else {
    System.out.println("false");
}


結果は「true」が返ります。



文字列(ABCD)を小文字か判断したい場合。

String str = "ABCD";
if (str.isAllLowerCase) {

    System.out.println("true");
} else {
    System.out.println("false");
}


結果は「false」が返ります。


  • この記事をシェアする

  • このエントリーをはてなブックマークに追加
  • このブログの更新をチェックする

  • follow us in feedly

2013年11月23日土曜日

Java split

Javaで特定文字をもとに文字列を分割したい場合はsplitを使用します。
splitは特定文字で文字列を分割し、その結果を配列で返します。



文字列(A/B/C/D)を特定文字(/)をもとに分割したい場合。

String[] strs = "A/B/C/D".split("/");
for (int i = 0; i < strs.length; i++) {
System.out.println(strs[i]);
}



結果は「A」、「B」、「C」、「D」のデータが格納された配列が返ります。
  • この記事をシェアする

  • このエントリーをはてなブックマークに追加
  • このブログの更新をチェックする

  • follow us in feedly

2013年11月21日木曜日

Java deleteWhitespace

Javaで文字列からスペースを削除したい場合はdeleteWhitespaceを使用します。
deleteWhitespaceは文字列の中から全角・半角スペースやタブを除いて値を返します。



文字列(ABC )を格納した変数strのスペースを削除したい場合。

String str = "ABC ";

StringUtils.deleteWhitespace(str);

System.out.println(str);


結果は「ABC」が返ります。


  • この記事をシェアする

  • このエントリーをはてなブックマークに追加
  • このブログの更新をチェックする

  • follow us in feedly

2013年11月20日水曜日

Java isAlpha

Javaで指定した文字列が英字かどうか判断したい場合はisAlphaを使用します。
isAlphaは対象が英字だった場合にTrueを、それ以外の場合はFalseを返します。



文字列(ABC)を格納した変数strが英字かどうかを判断したい場合。

String str = "ABC";
if (str.isAlpha) {


    System.out.println("true");
} else {
    System.out.println("false");
}



結果は「true」が返ります。


  • この記事をシェアする

  • このエントリーをはてなブックマークに追加
  • このブログの更新をチェックする

  • follow us in feedly

2013年11月19日火曜日

Java isEmpty

Javaで指定した値や変数が空かどうか判定したい場合はisEmptyを使用します。
isEmptyはlengthが0である場合にTrueを返し、そうでない場合はFalseを返します。



文字列(あいうえお)を格納した変数strが空かどうか判断したい場合。

String str = "あいうえお";
if (str.isEmpty) {


    System.out.println("true");
} else {
    System.out.println("false");
}

結果は「true」が返ります。
  • この記事をシェアする

  • このエントリーをはてなブックマークに追加
  • このブログの更新をチェックする

  • follow us in feedly

2013年11月18日月曜日

Java length

Javaで文字列の長さを取得する場合はlengthを使用します。
lengthは文字列の長さを返します。長さはバイト数ではなく文字数となり、
またUnicode基本となるため、日本語も1文字としてカウントされます。



文字列(あいうえお)の長さを取得したい場合。

String str = "あいうえお";
System.out.println(str.length());



結果は「5」が返ります。
  • この記事をシェアする

  • このエントリーをはてなブックマークに追加
  • このブログの更新をチェックする

  • follow us in feedly

2013年11月15日金曜日

Java equals

Javaで文字列を比較したい場合はequalsを使用します。
equalsは比較対象が等しいものであればTrueを、等しくなければFalseを返します。


文字列(あいうえお)と文字列(あいうえお)を比較する場合。


String strA = "あいうえお";
String strB = "あいうえお";
if (strA.equals(strB)) {
System.out.println("true");
} else {
System.out.println("false");



結果は「True」が返ります。



また、大文字・小文字を無視して比較する場合はequalsIgnoreCaseを使用します。


文字列(ABCDE)と文字列(abcde)を比較する場合。


String strA = "ABCDE";
String strB = "ABCDE";
if (strA.equals(strB)) {
System.out.println("true");
} else {
System.out.println("false");



結果は「True」が返ります。
  • この記事をシェアする

  • このエントリーをはてなブックマークに追加
  • このブログの更新をチェックする

  • follow us in feedly

2013年11月14日木曜日

Java charAt substring

Javaで文字列の中から指定した位置の文字を取得するにはcharAtを使用します。
charAtは0を基点として指定した位置の文字を返します。
パラメータとなる指定位置はint型で指定します。
また、指定したパラメータのインデックスが文字列の長さを越えていたり、
文字が存在しない場合には空文字を返します。
charAtメソッドは文字列から指定位置の文字を返すだけで、元の文字列には影響はありません。


文字列(あいうえお)から2番目の文字を取得したい場合。

String str = "あいうえお";
System.out.println(str.charAt(1));



結果は「」が返ります。



また指定位置から複数の文字を取得する場合はsubstringを使用します。
substringも0を基点とし、指定した位置の文字列を返します。


文字列(あいうえお)から2~4番目の文字を取得したい場合。

String str = "あいうえお";
System.out.println(str.substring(1,3));


結果は「いうえ」が返ります。
  • この記事をシェアする

  • このエントリーをはてなブックマークに追加
  • このブログの更新をチェックする

  • follow us in feedly

2013年11月13日水曜日

Java indexOf

Javaで文字列の中から特定の文字の位置を取得したい場合はindexOfを使用します。
indexOfは文字列の中から指定した文字が最初に出現する位置を返します。
基点は0から始められ、見つからない場合は-1を返します。
返却される値の型はintになります。



文字列(ABCABC)から文字(B)の位置を取得したい場合。

String str = "ABCABC";
System.out.println(str.indexOf('B'));


結果は「1」が返ります。



また、文字の代わりに文字列も検索することができます。


文字列(ABCABC)から文字(AB)の位置を取得したい場合。

String str = "ABCABC";
System.out.println(str.indexOf('AB'));


結果は「0」が返ります。



また、2つ目の引数を指定することで指定位置から検索を開始します。


文字列(ABCABC)の2文字目から文字(A)の位置を取得したい場合。

String str = "ABCABC";
System.out.println(str.indexOf('A',1));


結果は「3」が返ります。



また、文字列の後ろから検索をしたい場合はlastIndexOfを使用します。


文字列(ABCABC)を後ろから文字(A)の位置を取得したい場合。

String str = "ABCABC";
System.out.println(str.indexOf('A'));


結果は「2」が返ります。


  • この記事をシェアする

  • このエントリーをはてなブックマークに追加
  • このブログの更新をチェックする

  • follow us in feedly

2013年10月24日木曜日

Java インターフェース

Javaでのインターフェースの実装はimplementsを使用します。インターフェースは1つのクラスに複数実装することもでき、またextends(スーパークラス)を使用する場合は、implementsはextendsの後に指定します。

書式
class クラス名 implements インターフェース名

class クラス名 extends スーパークラス名 implements インターフェース名


インターフェースを実装したクラスでは、指定したインターフェース内で定期議されているメソッドの本体を定義する必要があります。ここでの定義がメソッドでの具体的な振る舞いが決まります。クラス内で定義する際には次の点に注意する必要があります。

・インターフェース内で定義されているメソッドは、インターフェースとして呼ばれると自動的にpublic、abstract修飾子が付与されています。
・インターフェースを実装したいクラスでは、呼び出すインターフェース先で定義されているメソッド全てを定義する必要があり、すべて定義しない場合はabstaractクラスとして宣言される必要があります。


  • この記事をシェアする

  • このエントリーをはてなブックマークに追加
  • このブログの更新をチェックする

  • follow us in feedly

Javaのreplace系メソッド

軽くハマったのでメモ

Javaで置換する際にreplaceメソッドを使いますが、いくつかバリエーションがあります。

  • replaceはマッチした全てを置換する
  • replaceは正規表現なし
  • replaceAllは正規表現あり

実際の動作は下記例を参照ください。

例: 

System.out.println("zzzz".replace('z', 'x'));
=> xxxx

System.out.println("zzzz".replace("zz", "x"));
=> xx
System.out.println("zzzz".replace("zz.*", "x"));
=> zzzz

System.out.println("zzzz".replaceAll("zz", "x"));
=> xx
System.out.println("zzzz".replaceAll("zz.*", "x"));
=> x

System.out.println("zzzz".replaceFirst("zz", "x"));
=> xzz
System.out.println("zzzz".replaceFirst("zz.*", "x"));
=> x

Written with StackEdit.

  • この記事をシェアする

  • このエントリーをはてなブックマークに追加
  • このブログの更新をチェックする

  • follow us in feedly

2013年10月22日火曜日

JSP

JSP(JavaServerPages)とは、Java言語を利用して動的にWebページを作成し、クライアントに送信する技術です。HTMLファイルの中にJavaプログラムを埋め込み、プログラムを実行し、結果のみをクライアントに送信します。プログラムの結果は通常のHTML形式になるため、ソースの表示を行ってもプログラム自体のソースは表示されません。また、JSPにはさまざまなWebサーバ用の実行環境が用意されており、特殊なスクリプト言語を覚えることなくJava言語をそのまま使える利点があります。

タグ

HTML文の中に以下の特殊なタグを記述することができます。(こちらから引用。)
JSPのタグ
名称タグ説明
ディレクティブ<%@ ディレクティブ %>このJSPファイルの処理時の属性をWebコンテナに伝える
宣言<%! 宣言 %>JSPで使用する変数やメソッドを宣言する
スクリプトレット<% Javaコード %>タグ内にJavaのコードを自由に記述する
<%= 式 %>式の評価結果をHTMLの中に出力する
アクション<jsp:アクション名>JSPでよく行う処理をタグで簡潔に記述する
コメント<%-- コメント --%>JSPとしてのコメントを記述する


  • この記事をシェアする

  • このエントリーをはてなブックマークに追加
  • このブログの更新をチェックする

  • follow us in feedly

2013年10月17日木曜日

Java 命名規約

Javaにはコーディング規約が存在します。Javaでソースを書く際には必ず定められたコーディング規約に従わなければなりません。

Javaでは変数、クラス、メソッドを始めとする様々なものに名前を付ける必要があります。その名前を識別子と呼びます。識別子は基本的に自由に決めることができますが、次の注意点が存在します。(こちらから引用)
  1. 大文字と小文字を区別する。
  2. 1文字目は英字、$_ の何れかとする。
  3. キーワードと重複しないようにする。
  4. falsetrue (boolean literal) は不可。
  5. null (null literal) は不可。
  6. 記号は、演算子/特殊文字は不可。
  7. 文字数は任意。
  8. 言語は任意。
またこのような規約のほかに、ソースコードを作成する際の慣習が存在します。これらの慣習は必ず守らなければならないものではありませんが、これに従うことで第三者から見てもソースコードが読みやすくなり、システム開発の現場でも開発の効率が飛躍的に高まります。また、デバッグの効率も上昇します。これらの慣習には主に以下のものがあります。
  1. 英数文字を使う。
  2. パッケージ名は小文字を使う。
  3. クラス、インタフェース名は大文字ではじめる。
  4. メソッド、変数名は小文字ではじめる。
  5. メソッド名は動詞でつける。
    例) get()
  6. クラス、変数名は名詞でつける。
    例) GetterManagerid
  7. static 宣言された変数(定数)名はすべて大文字でつける。
  8. 複数の単語からなる場合は区切りで大文字を使う。
    例) getCust()PersistenceManagercustId
  9. 定数が複数の単語からなる場合は「_」で区切る。
    例) CUST_ID
  10. 許される場合でも記号は使わない。


  • この記事をシェアする

  • このエントリーをはてなブックマークに追加
  • このブログの更新をチェックする

  • follow us in feedly

2013年10月3日木曜日

Java の import static について

きちんと理解できていなかったので、おさらい。

  • import static には、変数か、メソッドを指定する (通常のimportはクラス)
  • ワイルドカード(*)での指定も可能
  • 指定されたstaticメンバはクラスなしで呼び出し可能
  • 逆にクラスをつけるとコンパイルエラーになる。

具体的にはこんな感じ。

import static java.lang.String.*;

と、しておけば、

String.なしで、以下の様に書けます。

format("import static は %1$s、%2$sを指定する", "変数", "メソッド");
-> "import static は 変数、メソッドを指定する"

Written with StackEdit.

  • この記事をシェアする

  • このエントリーをはてなブックマークに追加
  • このブログの更新をチェックする

  • follow us in feedly

2013年9月17日火曜日

Java クラスパス ビルドパス

Javaで使用されるクラスパスやビルドパスは よく意味が混同されます。
そこで意味をあらためて明記したいと思います。

クラスパス…クラスをコンパイル・実行する際に必要なクラスファイルやjarファイルのパス、またはそれらが置かれているディレクトリのパス

ビルドパス…プロジェクトをビルドするために必要なクラスパス

ひとつひとつの語句の意味を明確にすることによって理解が深まりより成長につながります。


  • この記事をシェアする

  • このエントリーをはてなブックマークに追加
  • このブログの更新をチェックする

  • follow us in feedly

2013年9月9日月曜日

Java 修飾子

Javaには修飾子があります。変数やクラス、データや範囲などを制御するために用います。
またJavaでの修飾子には『アクセス修飾子』、『スタティック修飾子』、『ファイナル修飾子』、『抽象修飾子』、『ネイティブ修飾子』、『同期修飾子』、『一時的修飾子』、『揮発性修飾子』、『厳密浮動小数修飾子』、『定数』と呼ばれる修飾子が存在します。
詳しい一覧は以下の通りです。
こちらより引用させていただきました。


修飾子クラスインタ
フェース
メソッドコンスト
ラクタ
ブロック変数説明
public×アクセス修飾子
protected×アクセス修飾子
private×アクセス修飾子
static××スタティック修飾子
final×××ファイナル修飾子
abstract×××抽象修飾子
native×××××ネイティブ修飾子
synchronized××××同期修飾子
transient×××××一時的修飾子
volatile×××××揮発性修飾子
strictfp×××厳密浮動小数修飾子
const××××××定数

状況ごとに適切な修飾子を指定することが非常に重要となってきます。
  • この記事をシェアする

  • このエントリーをはてなブックマークに追加
  • このブログの更新をチェックする

  • follow us in feedly