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();
}
}