2011-04

スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

java.lang.OutOfMemoryError: Java heap space の対策

Tomcat上でWEBアプリケーションを開発していると、

java.lang.OutOfMemoryError: Java heap space

なんてエラーが出た。

「メモリーが足りないよ~」ってことですね。

JavaはVMで動いてるので、このメモリーを増やしてやればよいか?

ここに書いてあるように、Eclipseの

ウィンドウ→設定→Tomcat→JVM設定を選択し、 「JVMパラメータへ追加」

-Xmx512m

を追加したら解決した。


OutOfMemoryError_Eclipse.png

スポンサーサイト

S2JDBCからPostgreSQLのストアドファンクションを呼び出す。(複数パラメータの場合)

前回はパラメータが1つの場合だったけど、今回は2つの場合。

以下は
integerのパラメータを2つ
returnでintegerを返すストアドファンクション。

CREATE OR REPLACE FUNCTION sp_test(integer,integer)
RETURNS integer AS
$BODY$
DECLARE
in_num1 alias for $1; /* パラメータへのエイリアス*/
in_num2 alias for $2; /* パラメータへのエイリアス*/
add int := 1; /* 変数 int 初期値 */
BEGIN
return in_num1 + in_num1 + add;
end;
$BODY$
LANGUAGE plpgsql VOLATILE
COST 100;
ALTER FUNCTION sp_test(integer,integer) OWNER TO postgres;

これをJavaのS2JDBCから呼び出し、リターン値を取る。

public class TestDto
{
public int in_num1; // 第1引数 (IN)
public int in_num2; // 第2引数 (IN)
}

import javax.annotation.Resource;
import org.seasar.extension.jdbc.JdbcManager;

public class CallTestService {

@Resource
protected JdbcManager jdbcManager;

public int call()
{
TestDto dto = new TestDto();
dto.in_num1 = 1;
dto.in_num2 = 2;
int ret =
jdbcManager
.callBySql(
Integer.class,
"{? = call sp_test(?,?)}",
dto)
.getSingleResult();
System.out.print(ret);
return ret;
}
}

callBySql() の3番目の引数にJavaBeansを指定する。
ストアドファンクションを呼び出すパラメータの順番にJavaBeansのフィールドを定義する。

これを実行すると、結果は「4」となります。


S2JDBCからPostgreSQLのストアドファンクションを呼び出す。

S2JDBCからPostgreSQLのストアドファンクションを呼び出す方法
をテストしたのでメモ。

以下は
integerのパラメータを1つ
returnでintegerを返すストアドファンクション。
(大文字、小文字は気にしないw)

CREATE OR REPLACE FUNCTION sp_test(integer)
RETURNS integer AS
$BODY$
DECLARE
in_num alias for $1; /* パラメータへのエイリアス*/
add int := 1; /* 変数 int 初期値 */
BEGIN
return in_num + add;
end;
$BODY$
LANGUAGE plpgsql VOLATILE
COST 100;
ALTER FUNCTION sp_test(integer) OWNER TO postgres;

これをJavaのS2JDBCから呼び出し、リターン値を取る。

import javax.annotation.Resource;
import org.seasar.extension.jdbc.JdbcManager;

public class CallTestService {

@Resource
protected JdbcManager jdbcManager;

public int call()
{
int ret =
jdbcManager
.callBySql(
Integer.class,
"{? = call sp_test(?)}",
1)
.getSingleResult();
System.out.print(ret);
return ret;
}
}

1番目の引数でストアドファンクションの戻り値の型
2番目の引数でストアドファンクションを呼び出すSQL
INのパラメータが1つだけで、そのパラメータが null にならない場合は、
callBySql() の3番目の引数で値を直接指定します。(この場合は1)

これを実行すると、結果は「2」となります。

参考:ストアドファンクションの呼び出し

PostgreSQLでPL/pgSQLを使うための準備

PostgreSQLでストアドプロシージャ(PL/pgSQL)を使う場合は

plpgsqlが使えるようになっている必要がある。

使えるようになっているかは、以下のSQLで確認できる。
select * from pg_language;

plpgsqlがあれば使用できる。
plsql


ない場合は以下のSQLを実行する。
CREATE LANGUAGE plpgsql;



«  | ホーム |  »

About

yuuk

Author:yuuk
SE、プログラマー。

iMac(Late 2012, 21.5inch) New
MacBook Air(Early 2014, 11inch)
iPhone 6(64GB White) New
GALAXY S III α
iPad mini 2
NEX-5
Copen

当ブログはリンクフリーです。
リンクしていただけたら、Twitterかコメント欄でお教えください。
こちらからもリンクさせていただきます。

Twitterボタン

Recent Entries

Category

PC (26)
Mac (7)
Windows (2)
Linux (1)
スマートフォン (12)
iPhone (6)
Android (6)
WiMAX (3)
データベース (3)
カメラ (2)
車 (2)
Copen (1)
Kei (1)
プログラム (4)
本 (2)
映画 (1)
自炊 (2)
相互リンク (1)
日記 (19)

Search

Links

Counter

Amazon

上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。