2019年07月28日

中括弧でブロック作る範囲を間違え、必要なクラスもimportされてなくて2時間も疲弊。「x.intro();」で、他クラスの自己紹介用のメソッド呼び出してるのわからず…Systemクラスのinフィールドで標準入力を取得して…BufferedReader br = new BufferedReader(new InputStreamReader(System.in));の謎について

昨日、クラムボンがツイッターのトレンド入りしてみたい。どうやらフジロックがあったみたいで、

波よせて
1.KANADE DANCE
2.シカゴ
3.Lush Life!
4.nein nein
5.グラデーション
6.yet
7.タイムライン
8. reflection eternal with toe.徳澤青弦

のセットリストだったらしく、特にラストの「reflection eternal with toe.徳澤青弦」が「感動すぎた」「やばい」といった感じで絶賛の嵐だったそうよ。
あ〜いいなー。そういう感動体験、味わいたいね。
マイナスの方向の感動体験ばかりよ。そんな今日も、家でjavaのコード見ないといけない。
なんてったって、やるって決めたからには、簡単に逃げ出すわけにもいかない。
負け犬になっちゃう、そんなすぐ、自分のやると決めたこと曲げるなんてな。
1年やった負け犬と、3年やった負け犬なら、3年やった負け犬の方が信頼できるっていうか、評価できるはず…とはいえ誰かに評価してほしいとかいう人の目をそんな気にしてるというわけではないんだけど。

とかいって、変に自分を鼓舞したり、熱いメッセージ言ったり、人から聞かされるの、すごく苦手というかこそばゆい感じになる。
いわゆるルーキーズ的な、ちょっと喩えが古いけど。佐藤隆太的な熱血教師とか、夢を追う若者みたいな、そりゃステキかもしれんけど、ドラマなら耐えられるけど、そういうムードが日常にふと出てくると、ちょっと寒気が走る。

そういう時、なんて俺は冷たい人間だと思う時もあったが、そうでもないことに気付いた。
寒気が走ったのは、たぶん、美化してるからだろうからな。
自分の人生とか、仕事とか、活動とか、熱い思いを、美化して語る。
そのパフォーマンスが、「すごいですね」待ちみたいになって、疲れるんだよな。
そんなに自分の人生を美化したり、神聖化して語るけど、それ自慢と変わりないし。聞かされて太鼓持ちする方の気持ちも考えてくれということね。まあ太鼓持ちが嫌ってわけじゃないけど。「もうそのぐらいでええでしょ」というラインはあるのに、度が過ぎて語りをやめないケースもあったりね。

かといって俺のように自分の人生を卑下する方向に走りがちなのもよくないかもしれんけど。
「もうかりまっか」と言われたら、「ぼちぼちでんな」「全然ですよ」というコミュニケ―ションは実は温かくて、ここで「いや〜調子いいですよ!」とか「ばんばん売れてますね」みたいに正直に自慢するの、まあすごく正直な感じだと逆に気持ち良かったりするけど。
それがうまくないと、自慢にしか聞こえなくて。
謙虚に「ぼちぼちでんな」「全然ですよ」といって、変に自分のライフワークを美化したりせずに、相対的に自分ばかりが持ち上がらないように、ピエロになるまではいかなくと主役感を出し過ぎないというこの応え方は、デリカシーがあると思うね。

俵万智のサラダ記念日にある「「寒いね」と話しかければ「寒いね」と答える人のいるあたたかさ」は、「ぼちぼちでんな」「全然ですよ」にあるってことよ。相手に共感して、自分を持ち上げない謙虚さね。

とかだらだら、全然、プログラム書いてない。前に書いた?というか、古いメールに残ってて記載されてたコードが、エラーだったせいもある。
そのプログラムは、

public static void main(String[] args) throws IOException

の1行だけに、

この行に複数マーカーがあります

- 変数 main に void は無効な型です
- トークン "(" に構文エラーがあります。正しくは ; です
- 構文エラーがあります。";" を挿入して LocalVariableDeclarationStatement を完了し
てください

っていうエラーがあって。そのコードに「うーん」と昨日、スタバで1〜2時間は悩まされたりしたけど。
大したミスでもなくて、

package dj_shikabane;
public class Game {
{
public static void main(String[] args) throws IOException
・・・

の全文のコードで、中括弧 "{"が1個、いらなったってことだった。そんで、

package dj_shikabane;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

public class Game {
public static void main(String[] args) throws IOException
・・・

の3つの「import java.io.BufferedReader;」「import java.io.IOException;」「import java.io.InputStreamReader;」の3文が足りなかった。ioライブラリのBufferedReader、IOException、InputStreamReaderクラス入れてなかったから、そのクラスにあるreadLine();メソッドも、使えないわな。

「Integer.parseInt」のころではエラーはなかった。IntegerクラスのparseIntメソッドは、imput文を省略してもいいlangライブラリに属してるからだろうな。

あと、他クラスのメソッド呼んでたのも気付くのにすごい時間かかった。

BufferedReader br =
new BufferedReader(new InputStreamReader(System.in));

っていうコードも、すぐには読み解けない。

まずBufferedReaderクラスの型を、クラス型の変数brに格納してる。
InputStreamReader(System.in)は何だ、これよくわらかん。
たぶんInputStreamReader型の、引数にSystem.inってことは…わからん。
入力のあるプログラム(演習2)http://www.ibe.kagoshima-u.ac.jp/edu/gengo2j/p6.html に、解説があった。

Systemクラスのinフィールドで標準入力を取得、まずこれが最初っぽいな。Systemクラスは、Exlipse上でF3キーを押せば、その中身が読める。たしかにフィールドの部分に、

// フィールド記述子 #21 Ljava/io/InputStream;
public static final java.io.InputStream in;

って、記述されてた。まあここまではよしとしよう。
全体を見ると、インスタンス、オブジェクトを生成しているのはわかる。new演算子があるからな。
・・・

解説
• readLineメソッド
▫ String line = reader.readLine(); ▫ 文字列を1行分取得するメソッド

• readerは?
▫ BufferedReader型の変数 ▫ 参照型のクラス
▫ データの読み込みを行うためのクラス

• new
▫ newの後にクラス名と()を付けると、そのクラスに属するオブジェクト生成を行う →これをインスタンス生成と言う


を読むと、何かわかってきそうな気がする。BufferedReaderクラスとInputStreamReaderクラス使うには、単にimport文だけ書けばいいってわけじゃなくて。クラス使うためのオブジェクト(インスタンス)を生成しないといけないって話。

よくわからないのは、BufferedReader(new InputStreamReader(System.in))と、入れ子構造みたいに、BufferedReaderクラスとInputStreamReaderクラスが、同時にインスタンス生成してるっぽくなってる点よ。
たぶん、引数とコンストラクタについて、まだ俺がちゃんと理解してないからだろうな。

コンストラクタはクラス名と同じ、というルールがある。
いや、違うな…コンストラクタは、この段階では出てきてない。

まだインスタンスを生成しただけの段階。

InputStreamReaderはInputStreamからbyte型データを受け取りUnicodeの文字に変換して文字(char型)として読み取れるようにするオブジェクトです。

 byteデータをSystem.inから読み、JISの文字コードを自動判定し、Unicode文字に変換して読むインスタンスは次のように作ります。このインスタンスからreadメソッドを使ってchar型のデータを読み出せます。http://www.ibe.kagoshima-u.ac.jp/edu/gengo2j/p6.html

new InputStreamReader(System.in, "JISAutoDetect");
っていう解説が、たぶん正しいんだと思う。Systemクラスのinフィールドから読み込む、どういう機構なのかわらないが、標準入力の仕組みは脇に置いとこう。それで沼にはまってる場合じゃないし。

つまり、まとめると。

BufferedReader br =
new BufferedReader(new InputStreamReader(System.in));

は、オブジェクト生成してる。BufferedReaderクラスを使うためのオブジェクトと、InputStreamReaderを使うためのオブジェクトの2つを。
そんでオブジェクトを作る時に、事前に処理を定義しておけば、それを自動的行ってくれる。いわば初期処理がコンストラクタ。

でもそれは勘違いで、コンストラクタ作ってるわけじゃなくて。
そもそもBufferedReaderクラスとInputStreamReaderクラスは、ioライブラリにある既に完成されたクラスだから、なんでjavaの利用者がコンストラクタを定義せないかんの?って話だ。

だからコンストラクタの話は関係ない。

これはフィールドとかメソッド、を呼び出すための準備。
オブジェクト生成なんだから。
InputStreamReaderクラスを使うためのオブジェクト生成時に、引数としてSystem.inからbyteデータを受け取る。
BufferedReaderクラスを使うためのオブジェクト生成時に、引数として、InputStreamReaderクラスによってUnicode文字に変換された文字「new InputStreamReader(System.in)」を、受け取る。

一旦、そういう風な理解で留めておこう。

おまじない、で覚えておいて、さっさと色々なコードを書いて慣れた方が気もするけどな。
どうも性格的に、一行一行、理屈を知りたくなるんだな、ほんとに。
posted by DJしかばね at 13:18 | Comment(0) | Java学習 | このブログの読者になる | 更新情報をチェックする

2019年07月27日

SQL Developerが「C:\Users\★ユーザー名★\AppData\Roaming\SQL Developer\system4.1.4.21.21\o.ide.12.2.1.0.42.151001.541\projects」とかいう訳の分からない階層に

あったせいで、なかなか勉強をスタートできんかった。
やっぱデスクトップにショートカップ的なの置いとくべきか、すぐに着手するように。
はぁ、しかし面倒臭い。が、風呂入るとなぜか疲労感が飛んで、やる気が湧いてきたので。
この勢いにまかせてやるとするか。

CREATE USER (ユーザー名) IDENTIFIED BY (パスワード);
GRANT ALL PRIVILEGES TO (ユーザー名);

で、スキーマとかいうのを作れる。まあユーザーごとのデータベース、みたいなもの。
そんで「接続」からOracleに接続できる…と、思いきや。
ORA-12505エラーで、全く接続できない。本来なら調べるべきだか、今日は「既存のスキーマでいいかぁ」と思って、既に作ることに成功してたスキーマを利用することにする。

そんでEclipseのJDBCドライバを利用して、DBに接続する。
プロジェクト作って、libフォルダ作って、jdbdドライバをコピーして。
プロジェクト上で右クリックして外部Jarを追加。
Jarどこに置いたかわかんなくなった。

C:\eclipse-jee-oxygen\workspace\jdbc_sample\lib\ojdbc7.jar

にあったけどね。
そんでDB接続処理のメソッドを呼び出すために、そのメソッドが入ってるJDBCドライブクラスをJVMに登録するって話。

private static final String DRIVER = "oracle.jdbc.driver.OracleDriver";

のおまじないを、データベース接続する時に書くとか何とかいう話ね。

てか、プロジェクト作らなくてよかった。zipファイルは持ってたから、適当にどっか既存のパッケージにインポートすればよかった…。
いやでも、それでインポートしてみたらしてみたで、文字化けしてるから腹立つな〜ほんと。
けどサクラエディタで開いたら、文字化けしてないから。
サクラエディタの内容をコピペして、Eclipse上でに貼り付けたらこれは解決。

なぜかインポートしたら、javaファイルが、

/(クラス名)/jdbc_sample/src/jp/co/sss/jdbc/(javaファイル名).java

みたいな、超深い階層にあることに気付いた。
これだと、javaファイルをコンソール上でなぜか実行できない。
いや、パッケージ作らずにインポートしたからってのもあるかもしれない。
ああ〜わかった。srcフォルダにインポートしてなかったから、実行できなかったんだ。
なんでsrcフォルダにインポートしなきゃいけないのかはよくわからんけど、まあいいや。

さっそく実行。

java.lang.ClassNotFoundException: oracle.jdbc.driver.OracleDriver

とかいうエラー。だが、これは想定内。「・・・lib\ojdbc7.jarがない」っていうエラーか、たぶん。
同じパッケージ内の同じ階層、javaファイルと外部jarファイルが同居してないといけないのか。
と思って試したら、今度はこんなエラー。

java.sql.SQLException: ORA-01017: ユーザー名/パスワードが無効です。ログオンは拒否されました。

朝からもう〜って感じだな〜。
posted by DJしかばね at 17:32 | Comment(0) | Oracle | このブログの読者になる | 更新情報をチェックする

2019年07月21日

名言

なにもしないないら
posted by DJしかばね at 03:18 | Comment(0) | 説教・持論・駄文 | このブログの読者になる | 更新情報をチェックする
×

この広告は90日以上新しい記事の投稿がないブログに表示されております。