2008年11月2日日曜日

Oracle Database XE でパスワードを忘れた場合

Oracle Database XEのデータベースのホームページでログインしようと思ったが、パスワードを忘れてログインできなかった。この場合、パスワードを変更してログインできるようにする方法を記しておく。ただし、OS認証が有効になっていることを前提とする。

①コマンドプロンプトを立ち上げsqlplusにログインする。
C:\>sqlplus /nolog

②sysでログインする。
SQL>conn sys as sysdba

③ユーザーのパスワードを変更する(例えば、sysのパスワードをpasswordに変更するには以下のようにする)
SQL>ALTER USER sys IDENTIFIED BY password;

2008年11月1日土曜日

javaでファイルアップロード

まず、以下のJakarta Commonsの以下の2つのライブラリを用いる。
 ①commons-fileupload
 ②commons-io


まず、jspの設定。
以下のフォームを記述する。

<!-- (1)<FORM>タグにmultipart/form-dataを指定 -->
<form method="POST"
enctype="multipart/form-data"
action="アップロードサーブレットのパス">
<!-- (2)ファイルを選択する<input type="file">タグを指定 -->
<input type="file" name="fileName" />
<input type="submit" value="送信" />
</form>

次に、サーブレットの記述。

Collection ItemList = new ArrayList();


InputStream inputStream = null;
InputStreamReader inputStreamReader = null;
BufferedReader bufferedReader = null;


DiskFileItemFactory factory = new DiskFileItemFactory();
ServletFileUpload sfu = new ServletFileUpload(factory);

try {
List fileItemList = sfu.parseRequest(request);

if (fileItemList.get(0).getName() == null
|| fileItemList.get(0).getName().equals("")) {
// ファイルが選択されていない場合はアップロード画面へ遷移
request.setAttribute("message", "ファイルを選択してください。");
request.getRequestDispatcher(
"アップロード画面").forward(
request, response);
return;
}

for (FileItem fileItem : fileItemList) {
if (fileItem == null) {
break;
}

inputStream = fileItem.getInputStream();
inputStreamReader = new InputStreamReader(inputStream);
bufferedReader = new BufferedReader(inputStreamReader);

String line = null;
while ((line = bufferedReader.readLine()) != null) {
itemList.add(line);
}

new uploadService().itemUpload(itemList);
}
// アップロード画面へ遷移
aRequest.setAttribute("message", "アップロードに成功しました。");
request.getRequestDispatcher(
"アップロード先").forward(
request, response);
return;
} catch (FileUploadException e) {
//例外処理記述
} catch (SQLException e) {
//例外処理記述
} catch (NamingException e) {
//例外処理記述
}

/*ここまで。*/

javaでファイルダウンロード

Javaでファイルダウンロードを行ってみたが、期待する動作にならない。

/*
ItemServiceクラスのfindItems()メソッドを呼び出して、ItemのリストitemListを得る。
そのリストの値を一つずつ読み込んで、toCSV()メソッドでCSV形式にしてからファイルに保存したい。
firefox2.0.0.17ではファイルに保存できる。
IE7ではブラウザにファイルの内容が書き出されてしまう。なぜ?
*/

public class ItemDownloadServlet extends HttpServlet {

@Override
protected void doGet(HttpServletRequest request,
HttpServletResponse response) throws ServletException, IOException {
process(request, response);
}

@Override
protected void doPost(HttpServletRequest request,
HttpServletResponse response) throws ServletException, IOException {
process(request, response);
}
request.setCharacterEncoding("Windows-31J");
response.setContentType("application/octet-stream");
String downloadFileName = "itemData.csv";
response.setHeader("Content-Disposition", "attachement:filename="
+ downloadFileName);

OutputStream os = null;
OutputStreamWriter osw = null;
BufferedWriter writer = null;

os = response.getOutputStream();
osw = new OutputStreamWriter(os);
writer = new BufferedWriter(osw);

try {
List itemList = (List) new ItemService().findItems();
for (Item item : itemList) {
writer.write(toCSV(item));
}
writer.flush();
} catch (SQLException e) {
// TODO 自動生成された catch ブロック
e.printStackTrace();
} catch (NamingException e) {
// TODO 自動生成された catch ブロック
e.printStackTrace();
} catch (NotFoundException e) {
// TODO 自動生成された catch ブロック
e.printStackTrace();
} finally {
if (os != null) {
os.close();
}
if (osw != null) {
osw.close();
}
}

2008年10月14日火曜日

MySQLで接続中のスレッドや実行中のSQLを確認する

MySQLで、接続中のスレッドや実行中のSQLを確認するには以下のようにすれば良い。

mysql> show processlist;
+-----+------+-----------------+----------+---------+------+-------+------------------+
| Id | User | Host | db | Command | Time | State | Info |
+-----+------+-----------------+----------+---------+------+-------+------------------+
| 270 | user | localhost:19549 | dbname | Query | 0 | NULL | show processlist |
+-----+------+-----------------+----------+---------+------+-------+------------------+
1 row in set (0.00 sec)

MySQLでログイン中のユーザーを確認する

ログイン中のユーザーを確認するには以下のようにすると良い。

mysql>select USER();
+---------------+
| USER() |
+---------------+
| user@localhost |
+---------------+
1 row in set (0.03 sec)

2008年10月13日月曜日

MySQLのコメント

MySQLでコメント文を書く方法と注意点を述べる。

コメントスタイルは以下の3つ。


① #(行末まで)、
② --(行末まで)、
③ /*(行中または複数行)*/

をサポートしている。

ここで注意だが、

--(ダッシュ2つ)のコメントスタイルでは、2 つ目のダッシュの後にスペースを 1 つ以上挿入する必要がある。


これを知らずに苦労した経験があるので、注意すること。

MySQLでデータベース一覧と表一覧を確認する

MySQLでデータベース一覧、表一覧、表のフィールドを見る方法をメモしておく。

・データベース一覧はshow databasesを用いる。
・表一覧はshow tablesを用いる。

-- データベース一覧の表示
mysql>show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| bookshop |
| foods |
| mysql |
| sqldrill |
+--------------------+
5 rows in set (0.00 sec)

-- テーブル一覧の表示
mysql>show tables from foods;
+-----------------+
| Tables_in_foods |
+-----------------+
| foodslist |
+-----------------+
1 row in set (0.06 sec)

-- フィールド一覧の表示
mysql>show fields from foods.foodslist;
+----------+-------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+----------+-------------+------+-----+---------+----------------+
| id | int(11) | NO | PRI | NULL | auto_increment |
| foodname | varchar(30) | YES | | NULL | |
| maker | varchar(30) | YES | | NULL | |
| category | varchar(20) | YES | | NULL | |
| price | int(11) | YES | | NULL | |
+----------+-------------+------+-----+---------+----------------+
5 rows in set (0.00 sec)