My Photo

November 25, 2012

PostgreSQLのコマンドラインクライアントpsql

接続時のオプションや主なコマンドのメモ

psql [-h <ホスト名またはIPアドレス>] -U <ユーザ名> <DB名>DBに接続する

「-U <ユーザ名>」を省略するとOSのユーザ名で接続しに行くので、OSユーザ名とPostgreSQLのユーザ名が同じなら省略できるかも。確認していないが。
「-h <ホスト名またはIPアドレス>」はサーバを指定する。
接続のために必要なオプションに加えて以下のオプションで色々とできる。

-l DB一覧を表示
-c <SQL> SQLを実行
-e -f <SQLファイル> SQLファイルに書かれたSQLを実行
-e -f <SQLファイル> -o <出力ファイル> SQLファイルに書かれたSQLを実行し、実行結果を出力ファイルに出力

主なコマンド

\d [<テーブル名>] テーブルの情報の表示。引数無しの場合は全テーブルが対象。
\z 全テーブルのアクセス権を表示
\i <SQLファイル> SQLファイルに書かれたSQLを実行
\h [<SQLコマンド>] SQLコマンドのヘルプ
\? psqlコマンドのヘルプ
\q psqlを終了する
\pset pager ページャのON/OFF。OFFの場合、一画面毎に停止せず、画面端の折り返しもしない。

2014/07/20追記
文字化けする場合、下記でpsqlの文字コードを設定すると文字化けしなくなるかも。

set client_encoding to '<文字コード>';

文字コードの部分は "SJIS" とか。

参考ページ:
psql PostgreSQL 8.4.4文書
PostgreSQLの覚え書き

November 18, 2012

Android SDK tools, Revision 21 に更新

Android SDK が更新されたというので SDK Manager を起動してみた。
しかし新しいパッケージはAndroid4.2(API 17)の下に「Google APIs」しか表示されない。あれ?
API 17 のSDK Platform なしに Google API だけをインストールできるはずもなく。SDK Manager を再起動してみたが変わらず。
しばらくして、メニューの Packages に reload っていうのがあるのに気付いて実行したら、無事に SDK Platform やらドキュメントやら他の項目も出てきた。
#気付くのが遅い^^;

Android4.2(API 17)をインストール、更新された項目をアップデートし、Eclipse のADTも更新。
Eclipseを再起動する。
で、メニューの「Android Virtual Device Manager」をクリックしたが、AVDは起動しない。
Eclipse からではなく単独でなら起動する。あら?
Eclipse で適当なプロジェクトを実行してみたらエラー発生。エラーのダイアログには「内部エラーが発生しました。 /com/android/sdklib/ISdkLog」とか出ている。
さっそくgoogleさんに聞いてみると
「eclipse -clean すればいい」
と。
基本ですね^^;

しかし、まだすんなりとは行かない。
コマンドプロンプトを管理者権限で起動し、「start eclipse.exe -clean」とやってみたら、eclipseの画面は出てきたが「応答なし」orz
タスクマネージャでeclipseを殺してもう1回やってみたが、やはり「応答なし」になる。
-cleanオプションを付けずに、普段どおりにショートカットから起動したら立ち上がったが、AVDが起動しない状態はかわらない。うーん。。。

管理者権限がいけないのかと思い、普通にコマンドプロンプトから「eclipse.exe -clean」とやったら今度はちゃんと起動した。
念のため1回終了して、ショートカットからEclipseを起動しなおしたらEclipseからAVDが起動するようになった。プロジェクトの実行もできた。

ふーっ。時間かかった。
まあ、自分がボケていただけだが、毎度、すんなりいきませんなあ。


参考ページ:スマートラボラトリー開発記録

September 10, 2012

Androidアプリ開発メモ067:NDKのサンプルを動かしてみた

NDKのサンプル「com.example.hellojni.HelloJni」を動かしてみた。

WindowsでNDKを利用するにはCygwinが必要というので、まずCygwinをダウンロードしてインストール。Cygwinのバージョンは1.7.16。
#セットアップファイルがsetup.exeって嫌だなあ。ファイル名で何のインストールをするものなのかわからない。
インストールするパッケージはとりあえず参考ページ3を見てgcc4、make、gdblibexpat1を選択。依存関係で必要なものは「これも必要だけどインストールするか?」って聞かれるので一緒に入れる。
インストールが終わってスタートメニューかデスクトップのアイコンから起動すると /home の下にユーザのディレクトリ作られる。
あと、必要かどうかわからないが、Windowsのユーザ環境変数に、名前はHOMEで値は"/home/<ユーザ名>"を追加。

Cygwinのインストールが終わったらNDKをダウンロードして展開。NDKのリビジョンはRevision 8b。
Cygwinの /home/<ユーザ名>、Windowsから見れば <Cygwinのフォルダ>\home\<ユーザ名> に展開。
展開場所はCygwinのフォルダの配下じゃなくてもどこでもいいだんろうが、Cygwin配下ではない場合はパスが "/cygdrive/<ドライブ>/..."となってなんかかっこ悪い。せっかくCygwinを入れたのだからUNIXっぽいパスにしたかったので。
それから.bash_profileのPATHにNDKのディレクトリを追加。
これで準備完了。

Eclipseでサンプルのプロジェクトを作成する。新規>その他で「Android Project from Existing Code」で <NDKのフォルダ>\samples\hello-jni を選択。
アプリとプロジェクトとtestのプロジェクトが出てくる。アプリだけでいいんだろうけど、とりあえず両方選んでみた。
あとは参考サイト1の通り。Cygwinでhello-jniディレクトリに移動し、ndk-buildを実行すると共有ライブラリファイルlibhello-jnai.soが作成さる。

into@note02 ~
$ cd android-ndk-r8b/

into@note02 ~/android-ndk-r8b
$ cd samples/

into@note02 ~/android-ndk-r8b/samples
$ cd hello-jni/

into@note02 ~/android-ndk-r8b/samples/hello-jni
$ ndk-build
Gdbserver      : [arm-linux-androideabi-4.6] libs/armeabi/gdbserver
Gdbsetup       : libs/armeabi/gdb.setup
Cygwin         : Generating dependency file converter script
Compile thumb  : hello-jni <= hello-jni.c
SharedLibrary  : libhello-jni.so
Install        : libhello-jni.so => libs/armeabi/libhello-jni.so

libhello-jnai.so ができたらEclipseでプロジェクトを最新の状態で更新する。
これで通常のAndroidアプリケーションと同様にAVD上や実機上で実行できる。

参考文献:Androidアプリケーション開発標準資格教科書 10-5 NDKの概要

参考ページ:
1.Android NDKサンプルプログラムのビルドについて~その2~: TBヘッドライン
2.AndroidのNDK 1.5でHelloJNIを動かす手順 - Android(アンドロイド)情報-ブリリアントサービス
3.Android NDK開発環境の設定

July 08, 2012

Androidの開発環境壊れたかと思った

数日前、Androidの開発環境を更新した。
SDK Tools がRev.20、SDK Platform-tools がRev.12になって、ADTもそれに合わせて更新。
そしてEclipseを再起動すると、なんかおかしい。
まずEclipseのメニューからAVDが起動しない。AVD選択のダイアログは出るのだが、AVDを選択して開始ボタンを押しても Launch Options の画面が出てこない。AVDがない状態でAndroidプロジェクトを実行すると、AVDは立ち上がるのだが起動途中の画面で止まる。いつまでたってもホーム画面まで行ってくれない。
また、SDKマネージャも起動しない。こちらはうんともすんともいわない。
さらにLogCatのビューがおかしい。「LogCatのビューでつくれないよ。」みたいなエラーメッセージがビューに表示されてログは表示されない。前の2つは回避策(スタートメニューから起動する)があるのだが、LogCatビューが機能しないのは困る。
ADTをインストールしなおしてみたが状況は変わらず。SDKやEclilpseの再インストールは時間がかかりそうなので避けたい。

Eclipseのログを見るとクラスがないとかメソッドがないとかエラーが出ている。
ネットで調べても有用な情報なく、日本Androidの会にでも相談してみようかと思った。しかし、質問する直前に解決方法を見つけた。非常に簡単なことだった。というか、最初に気付けよ!っ て感じ。

解決策は、eclipse に-cleanオプションを付けて起動する。
恥ずかしいorz
日本Androidの会に相談しなくて良かった。バカな質問をするところだった。

たた、なぜか1回だけではだめで、2回やらないといけないかった。
1回目の-cleanオプション付けた起動でLogCatビューは直ったのだが、SDKマネージャとAVDの問題は直らなかった。
もう1回-cleanオプションで起動したら、残りの問題も解決した。

まあとにかく、この度の教訓。
Android SDKとADTを更新したら、次のEclipseの起動時には念のため-cleanオプションを付けろ。何か異常があればもう1回-cleanオプション付けて再起動しろ。

February 20, 2012

サーブレット・JSPメモ012:Eclipseで開発している場合のjarファイルを置く場所

動的WEBプロジェクトでWEBアプリを開発している場合、
そのWEBアプリだけで使うjarファイルは、

<プロジェクト>/WebContent/WEB-INF/lib

に置く。
すべてのWEBアプリで使うjarファイルは

<Tomcatのフォルダ>/lib

に置く。ここにあるjarファイルは、プロジェクトのビルドパスの Apache Tomcat v6.0 に入る。

February 17, 2012

MySQLメモ002:JDBCによる接続

JDBCドライバのダウンロード

以下からダウンロード。
MySQL :: Download Connector/J

動的WEBプロジェクトへのJDBCドライバの導入

プロジェクトの WebContent/WEB-INF/lib フォルダを選択し、
コンテキストメニューでインポートを選択し、
インポート・ソースの選択で一般>ファイルシステム
としてドライバのjarファイルをインポートする。

サンプルアプリ

package appsample;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;

public class DBSample {

  /**
   * DBへのコネクションを取得する。
   */
  public static Connection getConnection()
      throws ClassNotFoundException, SQLException {

    Class.forName("com.mysql.jdbc.Driver");

    // ホスト名:localhost データベース名:java_sample_db
    // ユーザ:java パスワード:password
    Connection conn = DriverManager.getConnection(
        "jdbc:mysql://localhost/java_sample_db",
        "java", "password");
    return conn;
  }

  public static void main(String[] args) throws Exception {

    String updateSql
      = "UPDATE ACCOUNT SET MONEY=? WHERE NAME=?";
    Connection conn = null;
    PreparedStatement ps = null;
    Statement stmt = null;

    try {
      conn = DBManager.getConnection();
      ps = conn.prepareStatement(updateSql);

      // PreparedStatementを使用した更新
      ps.setInt(1, 6000);
      ps.setString(2, "ボブ");
      int count = ps.executeUpdate();

      // 更新件数の表示
      System.out.println("update count=" + count);

      // 検索
      stmt = conn.createStatement();
      String selectSql = "SELECT * FROM ACCOUNT";
      ResultSet rs = stmt.executeQuery(selectSql);

      while (rs.next()) {
        System.out.println(
          "ID=" + rs.getInt("ID")
          + ",NAME=" + rs.getString("NAME")
          + ",MONEY=" + rs.getInt("MONEY"));
      }

    } finally {
      if (ps != null) {
        try {
          ps.close();
        } catch (Exception e) {
          // nop
        }
      }
      if (stmt != null) {
        try {
          stmt.close();
        } catch (Exception e) {
          // nop
        }
      }
      if (conn != null) {
        try {
          conn.close();
        } catch (Exception e) {
          // nop
        }
      }
    }
  }
}

参考ページ:JavaでJDBCを用いてMySQLへ接続する (前編) - devel-log.tar.gz

February 07, 2012

サーブレット・JSPメモ003:開発環境その2:WTP

関連記事:サーブレット・JSPメモ001:開発環境:Eclipseの設定

Context要素

WTPでは、WEBアプリケーションの設定を記述するContext要素は

<ワークスペース>\Servers\<サーバ名>-config\server.xml

に書き込まれる。

Tomcat5以降ではContext要素を

<WEBアプリケーションのフォルダ>/META-INF/context.xml

に書くことが推奨されているが、WTPでは上記のように server.xml に書き込まれる。
試しに server.xml のContext要素をカットし新規作成した /META-INF/context.xml をベーストした。そしてWEBアプリケーションを「サーバーから実行」してみたが、404になった。
WTP Tomcat FAQというサイトの3.9を見ると、サーバービューでサーバーを開いてサーバー・オプションの「XMLファイルを分割してモジュールコンテキストを公開」というのにチェックを入れればいいような気がしたが、それでもダメだった。
Context要素をserver.xmlから出してcontext.xmlだけに書くやり方はわからない。未解決のまま。

Tomcatの実行環境

WTPにおいてTomcatの実行環境は

<ワークスペース>\.metadata\.plugins\org.eclipse.wst.server.core\tmp0

にある。
"tmp0" の数字部分は変わることもあるらしい。

プロジェクト毎のファイルは

<ワークスペース>\.metadata\.plugins\org.eclipse.wst.server.core\tmp0\wtpwebapps\<プロジェクト名> …(1)

にコピーされる。
動的WEBプロジェクトでは "<プロジェクトのフォルダ>\WebContent" の下にWEB-INFフォルダ、HTMLファイル、JSPファイルなどがあり、実行時にはこのWebContent配下が(1)にコピーされる。
WebContentというフォルダはWTP(動的WEBプロジェクト)のフォルダである。動的WEBプロジェクトの作成ウィザードの中で設定したディレクトリで(デフォルトが WebContent で、別のフォルダ名に変更可能)、Tomcat(WEBアプリ)の設定のどこかに WebContent というのが書いてあるわけではないし、実際のWEBアプリの構造上に WebContent というフォルダがあるわけでもない。

参考ページ:
Eclipse Web開発環境メモ(Hishidama's Eclipse WTP Memo) Eclipsにおける 動的WEBプロジェクトとTomcatプロジェクトの違い | OKWave

February 06, 2012

サーブレット・JSPメモ001:開発環境

サーブレット・JSPの勉強のための環境を作った。インストールしたのは以下。

  • Tomcat 6.0.35
  • Eclipse 3.7.1 Indigo Windows 32bit ベース / Pleiades All in One 3.7.1.v20110924

Eclipse

Androidアプリ開発用とは別にもう1つEclipseをインストールした。
使ったのは「Pleiades All in One 3.7.1」のJREなし版。日本語化やプラグインで手間はかけたくなかったが、JDKは既にインストールされているので。

Tomcat

Tomcat 6.0.35 のインストーラー版でインストール。TomcatをWindowsのサービスとして使うためのもののようで、startup.bat などの起動や終了用のバッチファイルは付いていない。

このままだとTomcatを起動するとエラーのポップアップメッセージが出てくる。
起動はできていてブラウザで http://localhost:8080 を開けばTomcatの画面が出てくるが、起動のたびにエラーのポップアップが出てくるのは精神上良くない。
参考サイト2にあるように、tomcat6w.exe のプロパティの互換性タブで「管理者として実行する」にチェックを入れるとポップアップは出なくなる。

Eclipseの設定

#サーバーとTomcatはどっちが先に設定するんだったかなあ。どっちからでもいいのか、自信がない。

・JREの設定
メニューのウィンドウ>設定
-設定ダイアログで Java>インストール済みのJRE>追加>標準VM
JREホーム:C:\Program Files\Java\jdk1.6.0_24

・サーバーの設定
メニューのウィンドウ>設定
-設定ダイアログで サーバー>ラインタイム環境>追加>Apache Tomcat v6.0
パスと名前を設定。

・Tomcatのパスの設定
メニューのウィンドウ>設定
-設定ダイアログで Tomcat
Tomcatバージョン:バージョン 6.x
Tomcatホーム:C:\applications\Apache Software Foundation\Tomcat 6.0

・サーバービューの表示
メニューのウィンドウ>ビューの表示>サーバー

・サーバーの追加
「サーバー」ビュー上で右クリック、新規>サーバー
Tomcat v6.0 サーバー を追加

・JSPの文字コードの設定
メニューのウィンドウ>設定
-設定ダイアログで WEB>JSPファイル
エンコード:Windows環境ではデフォルトは「Windows-31J」。「UTF-8」などに変更した。

参考ページ:
1.Eclipse を使用しての Java サーブレット・プログラム開発
2.Tomcat Application System Error アクセスが拒否されました。 - 日々情報収集...
eclipse3.3 利用ガイド(J2EE アプリケーション開発編)

January 10, 2012

Android SDK tools r16 のアップデートでトラブル

Android SDKのアップデートをしばらくしてなかったので確認したら Android SDK tools のr16が出ていたのでアップデートをかけた。
しかし、途中で

「A folder failed to be moved. On Windows this typically means that a program is using that folder (for example Windows Explorer or your anti-virus software.)…」

みたいな警告が出てきた。
指示に従ってウイルスバスターを切ってアップデートしなおしてみたがまた同じ警告が出た。
r15の時も同じ状況になって、その時はAndroid SDKをアンインストールしてからインストールしなおすという後ろ向きな方法で解決したw
しかしまたインストールしなおすのも嫌なのでググってみたら解決策が書いてある下記のページを見つけ、そこに書いてある方法でアップデートできた。

どうやら問題の原因は、SDKのアップデートにおいてSDKのインストール先フォルダをリネームをしようとするが、SDK Managerがそのフォルダにあるために自身がそのフォルダをロックしていてリネームできない、ということらしい。
間抜けだ。
これって必ず起きる問題なのでは?環境によっては問題なくアップデートできる場合もあるのか?
#Linux上やMac上の場合はよくわからないが。

以前、SDKのパスにスペースが入っている(たとえばデフォルトのインストール先である"C:\Program Files\android\android-sdk")場合にSDK Managerが起動しないってアホくさい問題があったが、今回の問題もなんかずいぶん低レベルだよなあ。
こんな入り口で躓くような問題はちゃんとつぶしてからリリースして欲しいよ。

参考ページ:[Android] Android SDKのAndroid SDK Toolsアップデート時に"A folder failed to be moved." エラーが発生する

December 07, 2011

Eclipse環境作り直し

前記事:Subversion関連をインストール:

昨日はTortoiseSVNとEclipseのSubversiveプラグインをインストールして、TortoiseSVNでローカルリポジトリを作成し、Eclipseから既存のプロジェクトをレジストリにインポート(プロジェクトの共有)した。
しかし、バージョン管理する必要ないフォルダ(binフォルダのその配下のファイル)までインポートしてしまったので、これを取り除こうと思った。

ググったら「svn:ignore属性を追加する」というのが出てきた。
Subversionでバージョン管理したくないファイルの設定について - suusuke@Hatena

しかし、Eclipseのコンテキストメニューで「svn:ignore属性を追加する」 はdisableになっていて実行できない。
この操作はまだバージョン管理になっていないファイルに対して行う操作のようだ。

今度はコマンドラインでバージョン管理から外す方法。
ローカルのファイルは残しつつsvn管理下から外す - (゚∀゚)o彡 sasata299's blog
TortoiseSVNをインストールするときにコマンドラインツールも入れたはずなので、コマンドプロンプトから

svn delete <外すファイル> --keep-local
とやってみたら、
svn: E155036: Please see the 'svn upgrade' command
svn: E155036: Working copy 'C:\Users\into\workspace\Twinto\bin' is too old (for at 10, created by Subversion 1.6)
というエラーメッセージが。
TortoiseSVNは Subversion 1.7 対応で、Subversiveは Subversion 1.6 対応ということか。あらー。
C:\>"\Program Files\TortoiseSVN\bin\svn.exe" --version
svn, version 1.7.2 (r1207936)
   compiled Nov 30 2011, 18:38:18

なんかEclipseからリポジトリにインポートしたプロジェクトのフォルダをエクスプローラで見るとバージョン管理されている印が付いてないのでおかしいなと思っていたが、1.7対応のTortoiseSVNでは1.6でバージョン管理されたファイル・フォルダを正しく認識できないということかな。
Subclipseは1.7対応版が出ているが、Subversiveは未対応。
困ったな。

この後、SubversiveをアンインストールせずにSubclipseをインストールしてしまったりしてなんか訳わからなくなったので、Eclipseをアンインストールして最初からやり直しw

これを参考にした。
第1回 Androidアプリの開発環境を作る | Think IT
今まではHelios(3.6)だったが、これを機にIndigo(3.7)の"Eclipse IDE for Java Developers"を入れてみた。それからPleiadesで日本語化。
そしてADTとSubclipseをインストール。

昨日はSubclipseが使えなかったが、どうやら古いバージョンのSubclipseをインストールしていたようだ。
メニューの「ヘルプ>新規ソフトウェアのインストール」に進み、「作業対象」に
http://subclipse.tigris.org/update_1.8.x
と入力すれば、Subversion 1.7 に対応する Subclipse 1.8 をインストールできる。
昨日は「作業対象」に古いURLを入れていたような気がする。
subclipse: Download and Install

Eclipseからプロジェクトをインポートし、コミットできるようになった。
エクスプローラで見てもアイコンにSVN管理のマークが付いている。
時間かかったが、とりあえずSubversionでバージョン管理できる環境が完成。
たぶん、完成^^;

June 2021
Sun Mon Tue Wed Thu Fri Sat
    1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30      
無料ブログはココログ

日本blog村

  • にほんブログ村 IT技術ブログへ
  • にほんブログ村 アニメブログへ
  • にほんブログ村 サッカーブログ アルビレックス新潟へ

好きな音楽家

メモ

XI-Prof