トップページ⇒tech
1001コメント352KB

【初心者】Java質問・相談スレッド79【大歓迎】

■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん2006/01/11(水) 15:23:13
過去ログ、関連スレッド、よくある質問とその回答、
質問をする前に、貴方が見なければならないサイトについての情報は、
下のwikiのページにまとめてあります。
http://www.wikiroom.com/java/

これからJavaでプログラミングを始めたいが、何をすればいいかわからない人も、
wikiからのリンクをおたどりください。

よくある質問
・「コマンドまたはファイル名が違います」
 「'javac' は、内部コマンドまたは外部コマンド、
 操作可能なプログラムまたはバッチ ファイルとして認識されていません。」
 「Exception in thread "main" java.lang.NoClassDefFoundError: 」
 http://www.wikiroom.com/java/?path,classpath
・String に == は使うな。equals を使え。
・内部クラスから外部クラスのローカル変数は使えない。他の方法を考えろ。

前スレッド
【初心者】Java質問・相談スレッド78【大歓迎】
http://pc8.2ch.net/test/read.cgi/tech/1135217569/

/* 既出の質問や、他に適切なスレが存在する質問は、容赦なく無視されます。
質問をする前にwikiで過去ログ、関連スレ、FAQをチェックしてください。 */
また、当スレで質問をするかたは、回答をもらえたときに、
wikiの更新をして頂ければ、忝なく存じます。

JavaScriptの質問は、ここでは受け付けていません。
Web製作板をご利用ください。http://pc5.2ch.net/hp/

次スレは>>980あたりでお願いしまする。
0002デフォルトの名無しさん2006/01/11(水) 15:32:49
javaプログラム内で他のjavaプログラムを実行したいのですが、
同じディレクトリ内にあるjavaプログラムの実行はできたけど、
他のディレクトリ内にあるjavaプログラムを実行させるにはどうしたらいいのでしょうか?
同じディレクトリ内のプログラム実行は以下の記述でできました。
Runtime r = Runtime.getRuntime();
Process proc = r.exec("java test");
例えば「C:\java2」のディレクトリ内にあるtest.javaを実行するには上記のを
どうかえればいいのか教えてください。
0003名無し募集中。。。2006/01/11(水) 16:58:55
作業ディレクトリを設定する
000422006/01/11(水) 17:14:54
exec(String[] cmdarray, String[] envp, File dir)
っていうのを見て色々やってたんですが、
String[] envp の部分の書き方がわからないんです。
これ環境指定しなくてもできるんですか?
0005名無し募集中。。。2006/01/11(水) 17:18:05
まず試せば?
0006名無し募集中。。。2006/01/11(水) 17:18:57
1.5なら
ProcessBuilder#directory(File)で設定すればよい
0007デフォルトの名無しさん2006/01/11(水) 18:20:57
>envp が null の場合、サブプロセスは現在のプロセスの環境設定を継承します。
とくになければNULLでええのちがうか
0008デフォルトの名無しさん2006/01/11(水) 18:27:17
NULLは拙いだろう、NULLは。
0009デフォルトの名無しさん2006/01/11(水) 18:56:00
テキストファイルの書き込みなのですが
ログファイルのように最後に付け足すのではなく
1行目に挿入するようにするのはどうするのでしょう?
行数が少ないほど新しい、多くなるほど古くなる
といった感じに書き込みをしたいのですが
(Webチャットのログみたいな感じ)
0010デフォルトの名無しさん2006/01/11(水) 19:24:11
サーブレット(MVCモデル)について質問です。

同じ画面内で、検索条件を入力して検索実行⇒検索結果を表示させる
といった場合に、サーバー側では、ビーンに対して、検索結果、
つまり今回の処理で画面上で上書される項目のみをビーンに設定したいです。

しかし、単に空っぽのビーンに検索結果を設定しただけでは、
アクション後の画面で検索条件が空のまま表示されてしまう。

それを回避するために、以下の様な実装を行っています。
・jspでは、検索条件をサーバーに送信する。
・コントローラでは、検索条件をマッピングしたビーンを生成し、アクションクラスにビーンを渡す。
・アクションクラスでは、ビーンに検索結果のみを追加する。

この仕組みでうまくいっていたのですが、新たな問題が発生しました。その内容は

1画面内で検索ボタンが2:検索結果2という画面を作成しなければいけません。
現状の仕組みだと検索ボタン�Aが押下された時に、
検索条件�@、検索条件�Aはそのまま残り、検索ボタン�Aも表示されるんですが、
検索結果�@が消えてしまう。

検索結果�@はコントローラ⇒アクションクラスに渡すビーンにマッピングをとっていない為です。

これを回避するために、検索結果もサーバに送信し、
コントローラ⇒アクションクラスにビーンを渡す際に、検索結果もマッピングをとる
(つまり、コントローラー側で現状の画面全ての状態を記憶したビーンを生成する)
ようにしたいと思います。

jspで検索結果(入力フォーム部品ではなく、通常のテキスト)をサーバに送信するにはどうしたらいいでしょうか?
それとも他の回避方法はありますか?
(ビーン丸ごとjspからサーバーに送るとかできるんですか?)
0011デフォルトの名無しさん2006/01/11(水) 19:29:54
>>10の続き
1画面内で検索ボタンが2:検索結果2という画面を作成しなければいけません。
現状の仕組みだと検索ボタン�Aが押下された時に、
検索条件�@、検索条件�Aはそのまま残り、検索ボタン�Aも表示されるんですが、
検索結果�@が消えてしまう。

検索結果�@はコントローラ⇒アクションクラスに渡すビーンにマッピングをとっていない為です。

これを回避するために、検索結果もサーバに送信し、
コントローラ⇒アクションクラスにビーンを渡す際に、検索結果もマッピングをとる
(つまり、コントローラー側で現状の画面全ての状態を記憶したビーンを生成する)
ようにしたいと思います。

jspで検索結果(入力フォーム部品ではなく、通常のテキスト)をサーバに送信するにはどうしたらいいでしょうか?
それとも他の回避方法はありますか?
(ビーン丸ごとjspからサーバーに送るとかできるんですか?)
0012デフォルトの名無しさん2006/01/11(水) 19:37:47
前スレ977だろ。
もう結論出てるじゃん。
0013デフォルトの名無しさん2006/01/11(水) 19:40:17
>>12
通常テキストとして表示させておいて、
裏でhiddenとして持たせてサーバーに送信する、ということでしょうか?
hidden書かないで、通常テキストをサーバーに送信することはできないんでしょうか?
0014デフォルトの名無しさん2006/01/11(水) 19:45:19
セッションにデータ置けば?
0015デフォルトの名無しさん2006/01/11(水) 19:48:55
>>14
セッションにデータをおいた場合、
ブラウザの戻る/進むボタンを使用された場合に、
動きがおかしくなりそうです。
アクション時の画面状態と違うデータを使用してしまう可能性が。。。
0016デフォルトの名無しさん2006/01/11(水) 19:56:39
>>9
新しいファイルに一行書いて、そこに古いファイルを付け足す
0017デフォルトの名無しさん2006/01/11(水) 20:02:59
>>15
仕様と実装しだい

そもそもあの長文をわかりやすく短くまとめれるかどうかがまず問題

あんなドキュメント仕事で出されたらやりなおしだよ
0018デフォルトの名無しさん2006/01/11(水) 20:10:45
>>17
そんなに怒るなって。
長く書いたのかないと質問の背景を勝手に推測されて、
質問と関係のない答えが返ってきたりするもんでして。
0019デフォルトの名無しさん2006/01/11(水) 20:12:46
要点をまとめるってことできんのか。
0020デフォルトの名無しさん2006/01/11(水) 20:12:57
>>18実際に>>14とかは答えになってないし。
できるのかできないのかYes or Noの質問なのにね。
0021デフォルトの名無しさん2006/01/11(水) 20:14:36
>>19
君も知識と読解能力を身に着けるように。
0022デフォルトの名無しさん2006/01/11(水) 20:17:14
あの文章が怒ってるように見えるのか
0023デフォルトの名無しさん2006/01/11(水) 20:21:45
>>22
見えた。
やり直しとか言われるとねー
0024デフォルトの名無しさん2006/01/11(水) 20:23:10
>>17
通常テキストとして表示させておいて、
裏でhiddenとして持たせてサーバーに送信する、ということでしょうか?
hidden書かないで、通常テキストをサーバーに送信することはできないんでしょうか?
この答えは?
分からないなら分からないって言ってくれ、それで諦めがつく。
0025デフォルトの名無しさん2006/01/11(水) 21:07:18
>>24
そのままの主旨で話つづけたいなら、
Javaの話じゃないんで他所でやってね。

まぁそうだな、通常テキストと同じように見えるように
うまくCSSを書いて<input type="text">並べれば良いんじゃない?
これならhidden使わないけど、どお?

これ以上はもうホントに他所でやってね。


>それとも他の回避方法はありますか?

Javaの話で回避方法考えるなら
セッション使うのが1番に挙げられるだろうけど、
>>15で却下されちゃってるしねぇ。

0026デフォルトの名無しさん2006/01/11(水) 21:45:34
HTML知識ない奴がサーブレットやるな
0027デフォルトの名無しさん2006/01/11(水) 21:54:00
釣れた
0028デフォルトの名無しさん2006/01/11(水) 22:26:39
出ました
出ました
出ました
出ました
釣り宣言
0029デフォルトの名無しさん2006/01/11(水) 22:45:11
>>24
HTTPのPOSTについて勉強しよう
0030デフォルトの名無しさん2006/01/11(水) 22:55:44
Java BeansであってJava Beanでは無い
0031デフォルトの名無しさん2006/01/11(水) 23:09:03
インターフェースを使うメリットって
クラスをインスタンス化ではなく、実態のないインターフェースをインスタンス化させて
そのインターフェースがそれぞれ自分を実装している
クラスのメソッドを見に行くって感覚?
つまりその事で振る舞いがクラスの自由に出来る

でも、それだと
どのクラスが自分(インターフェース)を実装してるのかってわかるの?
0032名無し募集中。。。2006/01/11(水) 23:13:18
何で親が子を意識せなきゃいけないのか
0033デフォルトの名無しさん2006/01/11(水) 23:59:57
>>1にあるとは思いますが上記のWEBを見てもどうしても
分からなかったので質問です。

コンパイルしたのちプログラムを実行しても
下記のようなエラーが出て実行できません。
Exception in thread "main" java.lang.NoClassDefFoundError

ソースはまず間違いがないと思います。↓
public class SampleD1L3 {
public static void main(String args[]) {
System.out.println("はじめてのJavaアプリケーション");
}
}

環境変数の設定も間違ってないと思いますし、なぜ実行出来ないのか
どうしても分かりません。ご親切な方教えて頂けませんか?
0034& ◆R7PNoCmXUc 2006/01/12(木) 00:02:40
set CLASSPATH=%CLASSPATH%;.
0035332006/01/12(木) 00:03:30
>>34
環境変数の設定は間違いないっていってんだろ
0036デフォルトの名無しさん2006/01/12(木) 00:12:09
すいません。33は私ですが。
このスレIDないんですね。
0037デフォルトの名無しさん2006/01/12(木) 00:26:00
class Super{
static int d=10;
static void meth(){
System.out.println(d);
}
}
class Sub extends Super{
static double d=30.0;

static void meth(){
System.out.println(d);
}
}
class InstanceChk {
public static void main(String[] args) {

Super s = new Sub();
System.out.println(s.d);
s.meth();

}
}
0038デフォルトの名無しさん2006/01/12(木) 00:27:32
class Super{
static int d=10;
static void meth(){
System.out.println(d);
}
}
class Sub extends Super{
static double d=30.0;

static void meth(){
System.out.println(d);
}
}
class InstanceChk {
public static void main(String[] args) {

Super s = new Sub();
System.out.println(s.d);
s.meth();

}
}
上のコードでは10 30.0 下のコードでは10 10が
出力されます。javaを1ヶ月やってみたのですがどうしても
わからないのです。ご教授ください。


0039デフォルトの名無しさん2006/01/12(木) 00:28:20
public void mouseClicked(MouseEvent e){
int x = e.getX() ;
int y = e.getY() ;
bd.p1.set(x , y);
repaint();
}

画面上でクリックした座標を、
Interfaceで共通化したプレイヤーのp1クラスに投げsetメソッドを呼びたいのですが、
うまくいきません。一体どの辺りに問題があるのでしょうか・・
コンパイルは通りますが、クリックするとコンソールに以下のエラーが吐かれます
↓(最初の2行)
「thread "AWT-EventQueue-0" java.lang.NullPointerException
at BP.mouseClicked(BP.java:460)」
0040382006/01/12(木) 00:30:37
ちなみに上と下の違いはstaticがあるかないかの違いです。
0041382006/01/12(木) 00:32:47
37は間違えです すいません

class Super{
int d=10;
void meth(){
System.out.println(d);
}
}
class Sub extends Super{
double d=30.0;

void meth(){
System.out.println(d);
}
}
class InstanceChk {
public static void main(String[] args) {

Super s = new Sub();
System.out.println(s.d);
s.meth();

}
}
0042デフォルトの名無しさん2006/01/12(木) 00:34:08
>>31
たとえば、二つの実装
Collection aCollection = new ArrayList();
aCollection.add(newElement);
-----------------------------------------------
Collection aCollection = new HashSet();
aCollection.add(newElement);

このとき、別にCollectionというインターフェースが、
ArrayListやHashSetのaddメソッドを見つけにいっているわけではない。

インターフェースはあくまで、aCollectionと言う変数が参照している
オブジェクトに特定のシグニチャのメソッドが存在することを保証する
ためのもの。(例ではadd()というメソッドが保証されている)

逆に、シグニチャが保証されているっていうことは、そのシグニチャの
メソッドを呼び出している限り、相手先がどのクラスのインスタンスで
あるかは関係なく、好きなように変えられるってのがメリット。

たとえば、集合に対する操作をインターフェースとして定義しておけば
・集合に要素を追加する
・集合から要素を取り除く
・集合の要素数を調べる

構造が異なる集合であっても、上記の操作は自由に行える
・重複を許さない集合
・重複を許す集合

インターフェースではなく、抽象クラスでも同様なことは実現不可能ではないけどね。
0043デフォルトの名無しさん2006/01/12(木) 00:34:27
>>41
エスパーに対する挑戦かと思った
static はオーバライドできない
0044382006/01/12(木) 00:35:09
41のコードでは10 30.0 38のコードでは10 10が
出力されます。javaを1ヶ月やってみたのですがどうしても
わからないのです。ご教授ください。
0045382006/01/12(木) 00:44:53
早速ありがとうございます。staticはオーバーライドできないのですか
気づきませんでした。
あと参照変数の型ですがSuperだとなんでスーパークラスの
フィールドをつかうのでしょうか。Subにすると当然なのかもしれませんが
型をかえただけで30.0 30.0となります。
0046デフォルトの名無しさん2006/01/12(木) 00:47:02
>>44
ちなみに>>37のコード

Super s = null;
System.out.println(s.d);
s.meth();

としても、NullPointerExceptionはスローされません。
staticメソッドやstaticフィールドを参照する場合、
変数の型は評価されますが、変数の中身までは評価されません。

そんなわけで、staticなメソッドはフィールドを扱うときは
クラス名.メソッドやクラス名.フィールド名
とした方がバグが少なくなります。
Super.dやSuper.meth()ってことね。

>>45
フィールドはオーバーライドできません。
従ってs.dとやると、Superクラスの変数dが参照されます
0047デフォルトの名無しさん2006/01/12(木) 00:54:38
>>44
同名のインスタンス変数がある場合、intが優先されるから
0048382006/01/12(木) 00:55:11
>46 そのコードいれてみました。staticありのほうだと
10 10とでました。理由がよくわかりません。
入門書よく読んでるつもりだったのですが。べんきょう不足のようです。
0049デフォルトの名無しさん2006/01/12(木) 00:55:16
あっ
Super s = new Sub();
System.out.println(s.d);
はSuperクラスのdを参照して

Sub s = new Sub();
System.out.println(s.d);
はSubクラスのdを参照するってことね
0050デフォルトの名無しさん2006/01/12(木) 01:01:54
それがコードを見た瞬間に判断できないものだから
staticなメソッドやフィールドは変数でアクセスするのは禁止になってるのさ

クラス名.メソッドとしてアクセスする癖をつけること
0051デフォルトの名無しさん2006/01/12(木) 01:04:08
>>48
staticなメソッド・フィールドを参照している>>38のコード
Super s = new Sub();
System.out.println(s.d);
s.meth();

これは下のコードと同値になります
Super s = new Sub();
System.out.println(Super.d);
Super.meth();

つまり、staticなメソッドやフィールドを参照するときは
変数の中身までは評価されないってことです
→クラスメソッド、クラスメソッドと言われているとおり、
  どのクラスに属しているかだけが重要になっています。

変数sがSubのインスタンスを参照していても、
>>48で試されたとおり、null参照となっていても
変数sの型(クラス)はSuperですよね?
0052デフォルトの名無しさん2006/01/12(木) 01:15:52
これを読んでみるのもいいかもしれません。
ttp://www.amazon.co.jp/exec/obidos/ASIN/4894716895/

おれJavaよく知ってるぜ、って方も「へぇ」って思うこと結構かかれてます。
0053382006/01/12(木) 01:42:33
みなさんありがとう、ここ最近この問題ばかりやってました。もやもやが
やっと取れそうです
>staticなメソッドやフィールドは変数でアクセスするのは禁止になってるのさ
禁止だったのですか、eclipseにオレンジの下線はいってましたが、あれはそういう意味なのかな。
コンパイルできてたから問題ないと思ってました。
>→クラスメソッド、クラスメソッドと言われているとおり、
  どのクラスに属しているかだけが重要になっています。

変数sがSubのインスタンスを参照していても、
>>48で試されたとおり、null参照となっていても
変数sの型(クラス)はSuperですよね?

これはすごい参考になりました。つまりクラス名.メソッド名
と参照変数でs.メソッド名は同じ意味だったんですね。
つまりSuperのs変数が参照してるってことでしょうか。
参照先ばかり気になってました。


ありがとうございましたm(__)m
0054382006/01/12(木) 01:59:01
staticつけるとオーバーライドされた内容までひょうかされず、
Superのs.meth()が実行されて、
デフォルトだとその内容まで評価されて、サブクラスのメソッドが
使われてるようにみえるということなのでしょうか。
フィールドにはオーバーライドのようなものはないってことですよね。
まちがってたらすいません。頭を整理してるところです。
0055デフォルトの名無しさん2006/01/12(木) 02:10:00
変数の型には静的な型(プログラムの文面上の型)と動的な型(実行時の実際の型)が
ありまして、static を付けているものの場合は静的な型のものが使われるというだけです。

Super s = new Sub(); とした場合、s の静的な型は Super で動的な型は Sub ですから
static void meth() の場合は Super のが、void meth() の場合は Sub のが使われます。
0056デフォルトの名無しさん2006/01/12(木) 02:11:33
>>54
>staticつけるとオーバーライドされた内容までひょうかされず、
static やフィールドは、オーバライドされない。

同名のモノを使った場合は、裏に隠れるだけ。
だから、明示的にスーパクラスを指定すれば表に出てくる。

>staticなメソッドやフィールドは変数でアクセスするのは禁止になってるのさ
言語仕様上は禁止にはなってない(利点は全くないと思われるが)。
まあ、「便所の落書き」だし、釣りも少なくない。信用するのも own risk ということで
0057デフォルトの名無しさん2006/01/12(木) 02:13:36
ちなみにオーバライドの場合は動的な型によってメソッド呼び出しが切り替わりますが
オーバロードの場合は常に静的な型によってメソッド呼び出しが決まります。

public class Test {
static void meth(Test t) { System.out.println("Test"); }
static void meth(Object o) { System.out.println("Object"); }

public static void main(String[] args) {
Object o = new Test(); Test.meth(o); // Object と表示される。
}
}
0058デフォルトの名無しさん2006/01/12(木) 02:29:00
>>38
ちょっと、長文ですが読んでみてください。

�@staticなフィールドやメソッドにアクセスすることについて
変数(sのこと)でstaticのメソッドやフィールドを参照するのは、
禁止されているわけではありません。

クラスに属するという意味は、個々のインスタンスに関連付けされていないということ。
言い換えると、全てのインスタンスで共通のフィールド(メソッド)という意味です。

なので、クラスに属しているフィールドやメソッドを、インスタンスが格納されている変数で
参照するのは考え方が違いますよ!クラス名で参照して下さい!ってeclipseに警告されているだけです。

�Aスーパークラス/サブクラス間のフィールドやメソッドについて
スーパークラスと同じシグネチャ(メソッド名と引数の型と引数の順番のこと)を持つメソッドを
サブクラスで定義することをオーバーライドと呼びます。
「オーバーライド = 上書き」と思って下さい

スーパークラスと同名のフィールドをサブクラスで定義することを
オーバーライドとは呼びません。隠蔽と呼びます。
「隠蔽 = 隠しているだけ」と思って下さい。

なので、>>41 の例で説明すると
Super s = new Sub(); <-- 型はSuperでもインスタンスはSubを参照
System.out.println(s.d); <-- 隠蔽されているSuperのインスタンス変数dを参照
s.meth(); <-- 上書きされているSubクラスのインスタンスメソッドmeth()を参照

以上です。少しでも理解につながれば幸いです。
0059582006/01/12(木) 02:56:07
>>38
�B>>54について
staticなメソッドはオーバーライドされません。また、>>58の�@でも説明したとおり、
staticは個々のインスタンスには関連しません。
さらに言い換えると、staticを参照するにはインスタンスは無くても構わないということです。

つまり、以下のコードの1行目は必要無いということです。
1行目: Super s = new Sub();
2行目: System.out.println(Super.d);
3行目: Super.meth();

以上です。理解できました?

0060382006/01/12(木) 03:15:24
もうわかったからお前ら黙ってろ。
0061デフォルトの名無しさん2006/01/12(木) 04:32:11
質問です。

wikiのページを読んで、Javaでは参照渡しが
出来ないという事はわかったのですが、その場合、
引数に渡す値に参照値を入れるにはどうしたらいいでしょうか。

Object A;
method( A );

void method(Object a) {
Object b = new Object();

a = b;
}

このようなコードを書いたのですが、これでは引数として渡す値Aには
bの参照値を入れられません。どのようにしたらいいでしょうか。
低レベルな質問かもしれませんが、よろしくお願いいたします。
0062デフォルトの名無しさん2006/01/12(木) 07:42:00
class RefA { public Object A; }

void method(RefA ref) {
    Object b  new Object();
    ref.A = b;
}
0063デフォルトの名無しさん2006/01/12(木) 08:41:51
配列にしとく
0064デフォルトの名無しさん2006/01/12(木) 08:52:02
例えばlog.txtというテキストファイルの指定行の
内容を取ってくるメソッドを作りたいのですが
どのようにやればいいのでしょう?
ご教授願います
0065デフォルトの名無しさん2006/01/12(木) 09:01:27
もうちょっと考えてから具体的に質問して欲しいものです
0066デフォルトの名無しさん2006/01/12(木) 10:16:30
JMFを使って動画再生ソフトを作っているのですが、
動画を再生しながらその上に文字を表示するにはどうすればいいでしょうか?
0067デフォルトの名無しさん2006/01/12(木) 11:28:31
>>56
事実上の禁止だろ
そんなバグ出してくださいよというコード書くところに仕事はださん
null代入並みのおろかなことだ
0068382006/01/12(木) 11:47:31
レスおくれました。ごめんなさい。
学校があるので寝てしまいました。60は私ではありません。
ご指導ありがとうございます。家に帰ったらゆっくり見たいと思います。
0069デフォルトの名無しさん2006/01/12(木) 12:45:59
>>61
Object[] A = new Object[1];
method( A );

void method(Object[] a) {
Object b = new Object();

a[0] = b;
}

で、上の関数外ではA[0]で扱うとか、ワンクッション置くようにすれば。。。
0070デフォルトの名無しさん2006/01/12(木) 12:58:48
そんなバグ出してくださいよというコード書くところに仕事はださん 。ウッキー
0071デフォルトの名無しさん2006/01/12(木) 12:59:40
答えのある質問と言うよりは、なぜ、とか是非の部分についてなのですが
(疑問自体が変というのであれば申し訳ありません…)

ttp://www.javanews.jp/javap/newsletter017.html
の「DB2 向けの JDBC の最適化」の章(※)で、

| カラムのメタデータを取得するために getcolumns() メソッドを使うよりも、
| ダミーのクエリを使いましょう。

とあるのですが、これはなぜなのでしょうか?
ダミーのクエリの場合、一つもレコードが無いと実行出来ない気もするのですが...

(※)文中の原文のリンクが切れていますが
ttp://web.archive.org/web/20030113090231/www.sys-con.com/java/article2a.cfm?id=725&count=1745&tot=11&page=2
で閲覧できるようです。が、こちらを見ても決定的な理由というのが今ひとつ…単に英語が読めてないでしょうが。
0072デフォルトの名無しさん2006/01/12(木) 13:11:45
>>71
DBごとの最適化の話はDB板へいったほうがいいかと

でも実際通常1以下のクエリ出すほうが早いね
DatabaseMetaDataからの取得でカラムの名前覚えてるやつはそうそういないし
結果セットで受け取るためにコンパイルエラーにならんし
0073デフォルトの名無しさん2006/01/12(木) 13:29:30
>>72
やっぱり速度面なのですかね...
と、データベース板を見落としていました。有り難うございます。
0074デフォルトの名無しさん2006/01/12(木) 13:34:11
後は目的かと

DatabaseMetaDataはDB管理ツールを作る場合に使うが
実際の運用ベースではResultSetMetaData使ったほうがいいとか
0075デフォルトの名無しさん2006/01/12(木) 14:14:25
>>71
そういうもんだと思えばいいんじゃ?
getColumnsだとたぶん実装はDB2のデータディクショナリ(システムテーブル)を問い合わせてカラム情報を
取得してると思うけど、それより、ダミーの問い合わせの方が早いってことでいいんじゃ??
DB2やJDBCの内部の実装をしってる人が言ってるのかわからんが、
余り悩んでもね。
0076デフォルトの名無しさん2006/01/12(木) 14:22:38
DatabaseMetaDataからのカラム情報取得はフィルタ条件があるから
ほとんどの実装で遅いのは普通

ま、それがネックになるような場所ってあんまりかんがえられないけどな

0077デフォルトの名無しさん2006/01/12(木) 14:40:00
>>74-76
おお…ありがとうございます。その理由で納得出来そうです。
仰るとおり実際に問題やネックとして悩んでいるわけでは全くありません。
お呪い程度として捉えておきます。
0078デフォルトの名無しさん2006/01/12(木) 14:40:57
たぶん、俺が思うにDB2側の問題じゃない?
フィルタ条件があっても、まさか、全レコードをDBから取ってきて
「DB2側」でフィルタかけるわけじゃないでしょ?
フィルタ条件に指定された条件のSQL文を組立てて最小限のデータとってきてるはずだよね?
まぁ、組み立てる分もちろん遅くなるわけだが。

まぁ、ResultSetMetaDataの方が早いとは思う。
通常、クエリー発行すれば、データとともに、カラム情報も入ってくるわけだし、
ネットワークトラフィックも余りかからんと思うけど、

そこまで、差が現れるのかが謎だ。
0079デフォルトの名無しさん2006/01/12(木) 14:42:18
つかさ、実際に試して時間はかってみん。それがベスト。
差がでるかわからんけど。
0080デフォルトの名無しさん2006/01/12(木) 14:43:48
あ、あと>>71で「一つもレコードがないと…」などと宣っていましたが、
ResultSetMetaData から取ればいいので別にダミーのクエリの
結果レコードが無くても構いませんね。すみません。実際取得できました。
ダミーのクエリはどうすんのって話(↑では全部 SELECT してみましたが)はありますが。
0081デフォルトの名無しさん2006/01/12(木) 14:46:28
>>78-79
あ、ありがとうございます。
非常に貧相な測定ですが、実際試したところ誤差のレベルでした。少なくとも私の用途的には。
0082デフォルトの名無しさん2006/01/12(木) 14:46:40
>>80
ダミーのクエリは例えば、絶対に存在しないようにクエリーを組み立てる。
例えば、主キーの列Aがあって、絶対0以上なら、
select * from table where a = -1とか。
まぁ、工夫してくれ。
0083デフォルトの名無しさん2006/01/12(木) 14:50:37
条件指定なしの検索結果リミット設定すればいいだけでは?
リミット設定しなくてもたとえばFIRST_ROWSのようなヒントでも
最初の1件だけを高速に返すとかでもいいかもしれんし
インデックスがあるなら1件も返されないとすぐに分かるのをかくとかいくらでもね

カラム情報を積極的に利用したいのであればDatabaseMetaDataを使う

とにかくSQLを発行後、カラム名を自動で取得してループで処理させたいなら
ResultSetMetaDataを使う

この2択でいいんでね?
0084デフォルトの名無しさん2006/01/12(木) 14:57:55
う…スレ違いなのに立て続けにアドバイスが。ありがとうございます。
>>82
なるほど。セオリーはそうなのですね。
今回は対象のテーブル構成が事前に分かってないので、>>83 さんの言うような
制限する形にしようと思っています。FETCH FIRST 1 ROWS ONLY と付けたのみですが...
0085デフォルトの名無しさん2006/01/12(木) 18:03:36
>>61
Object A;
A = method();

Object method() {
Object b = new Object();

return b;
}

これじゃ、だめかい?
0086デフォルトの名無しさん2006/01/12(木) 18:37:53
質問です。
eclipse3.0を使ってます。
JSPからPOST送信でサーブレットを呼び出すにはどうすればよいのでしょうか?
現在普通に<form>に記述しています。
web.xmlを書かないとだめなんでしょうか?
ちなみに、プロジェクト名はkeijiban、パッケージ名もkeijiban
ファイル名はbbs.jspとBbsMain.javaです。
お願いします。
0087デフォルトの名無しさん2006/01/12(木) 18:46:53
web.xmlを書かないとだめだね
0088862006/01/12(木) 18:54:12
>>87
ありがとうございます。
自分でweb.xmlを書いて一発で動いたためしがないので、
不安です。
0089デフォルトの名無しさん2006/01/12(木) 19:48:03
Java 1.4.2とTomcat4.1を使ってJSPを作ってるんですが、メインのJSPに別のJSPをincludeして表示させたときに、includeしたものだけ文字化けしてしまいます。

%TOMCAT_HOME%\conf\web.xmlに
<servlet>
<servlet-name>jsp</servlet-name>
<servlet-class>org.apache.jasper.servlet.JspServlet</servlet-class>
    …
<init-param>
<param-name>javaEncoding</param-name>
<param-value>Windows-31J</param-value>
</init-param>
<load-on-startup>3</load-on-startup>
</servlet>

のように書いたりしたのですがなおりません。

ただ同じようにJava 1.4.2とTomcat4.1をいれている別のPCでは文字化けしていないので、
%TOMCAT_HOME%\conf\のservlet.xmlやweb.xmlをそれと同じにしたのですが、それでもなおりません。

自分のPCのJava 1.4.2かTomcat4.1かどこかの設定がおかしいのだと思うのですが、見当が付きません。
ご教授願いたします。
0090SWT2006/01/12(木) 19:54:37
すみません質問したいのですが。
javaアプレットでJFrameからJFrameを実行することが出来るのですが、
JLabelで画像を載せると実行できなくなります。
JFrameから新たなJFrameをたちあげそこに画像を載せるには
どうすればよろしいでしょうか?
0091デフォルトの名無しさん2006/01/12(木) 20:14:44
onclickをつかって「jspでデータベースに追加入力」ということは可能ですか?

例:データをtextエリアに入力
         ↓
      ボタンを押す
         ↓
    DBに追加登録される

よろしければご教授お願いします m( __ __ )m
0092名無し募集中。。。2006/01/12(木) 20:24:53
>>90
実行できなくなるってどういうことか詳しく書け
0093SWT2006/01/12(木) 20:34:39
>>92
説明不足で申し訳ないです。
ActionEventでJFrameが立ち上がるようにしているのですが、
JLabel img = new JLabel(new ImageIcon("ファイル名"));
の一文を加えるだけで立ち上がらなくなってしまいます。
なぜでしょうか?
0094デフォルトの名無しさん2006/01/12(木) 20:38:11
つーかマルチやめれ>>90
0095SWT2006/01/12(木) 20:39:11
>>94
どうしても必要な作業なんです。
0096デフォルトの名無しさん2006/01/12(木) 20:41:19
>>61です。

>>62>>63>>69>>85
レスありがとうございます。

返り値で取得するのが最も自然なのでしょうが、
返り値ではこのメソッドの成否を返す必要があるのでそれはできず、
ケータイ用アプリなのでできれば新たなオブジェクトを作成せずに、
かつエレガントに取得できないものかと思ったのですが、
良い方法はないのかもしれませんね。諦めました。

いろいろとアドバイスしていただき、ありがとうございました。
0097デフォルトの名無しさん2006/01/12(木) 20:41:47
なんでマルチが必要な作業なんだよ
しかもあっちのスレでは返信なしだし
0098デフォルトの名無しさん2006/01/12(木) 20:44:18
>>96
成否は null が返るかどうかで判定すれば?
null が返ったら失敗、それ以外は成功とか。
0099デフォルトの名無しさん2006/01/12(木) 20:46:23
すいません本当に初心者的な質問なんですが

set CLASSPATH=%CLASSPATH%;.

でクラスパスを設定すると、コマンドプロントを開く度に再setしないといけないみたいなので、
ウィンドウズのプロパティから環境変数を開き、CLASSPATHに直接登録しようと思ったのですが、
その書き方がわかりません。

Wikiに環境変数の書き方について書かれているリンクを見つけたのですが、リンク切れでした。
ぐーぐる先生に聞いてみたのですが古いバージョンのものなのかJ2SDK1.4.2_10にはありませんでした。

C:\java\にclassファイルを置いているのですがどうすればいいでしょうか。
0100デフォルトの名無しさん2006/01/12(木) 20:56:22
OSは?
0101992006/01/12(木) 21:03:43
>>100
忘れていました。WindowsXPです。
■ このスレッドは過去ログ倉庫に格納されています