<?xml version="1.0" encoding="UTF-8" ?><rdf:RDF 
  xmlns="http://purl.org/rss/1.0/"
  xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
  xmlns:atom="http://www.w3.org/2005/Atom"
  xmlns:dc="http://purl.org/dc/elements/1.1/"
  xml:lang="ja">
  <channel rdf:about="http://w.atwiki.jp/collectosssrccord/">
    <title>使えるソースコードたち</title>
    <link>http://w.atwiki.jp/collectosssrccord/</link>
    <atom:link href="https://w.atwiki.jp/collectosssrccord/rss10.xml" rel="self" type="application/rss+xml" />
    <atom:link rel="hub" href="https://pubsubhubbub.appspot.com" />
    <description>使えるソースコードたち</description>

    <dc:language>ja</dc:language>
    <dc:date>2007-12-23T01:18:48+09:00</dc:date>
    <utime>1198340328</utime>

    <items>
      <rdf:Seq>
                <rdf:li rdf:resource="https://w.atwiki.jp/collectosssrccord/pages/12.html" />
                <rdf:li rdf:resource="https://w.atwiki.jp/collectosssrccord/pages/11.html" />
                <rdf:li rdf:resource="https://w.atwiki.jp/collectosssrccord/pages/1.html" />
                <rdf:li rdf:resource="https://w.atwiki.jp/collectosssrccord/pages/2.html" />
                <rdf:li rdf:resource="https://w.atwiki.jp/collectosssrccord/pages/5.html" />
                <rdf:li rdf:resource="https://w.atwiki.jp/collectosssrccord/pages/6.html" />
                <rdf:li rdf:resource="https://w.atwiki.jp/collectosssrccord/pages/8.html" />
                <rdf:li rdf:resource="https://w.atwiki.jp/collectosssrccord/pages/9.html" />
              </rdf:Seq>
    </items>
	
		
    
  </channel>
    <item rdf:about="https://w.atwiki.jp/collectosssrccord/pages/12.html">
    <title>SQL文を実行したい</title>
    <link>https://w.atwiki.jp/collectosssrccord/pages/12.html</link>
    <description>
      &amp;bgcolor(green)/**
 * Copyright (c) 2000-2007 Liferay, Inc. All rights reserved.
 *
 * Permission is hereby granted, free of charge, to any person obtaining a copy
 * of this software and associated documentation files (the &quot;Software&quot;), to deal
 * in the Software without restriction, including without limitation the rights
 * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
 * copies of the Software, and to permit persons to whom the Software is
 * furnished to do so, subject to the following conditions:
 *
 * The above copyright notice and this permission notice shall be included in
 * all copies or substantial portions of the Software.
 *
 * THE SOFTWARE IS PROVIDED &quot;AS IS&quot;, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
 * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
 * SOFTWARE.
 */

import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileReader;
import java.io.IOException;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.sql.SQLException;
import java.sql.Statement;

import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import java.util.Properties;
import java.util.StringTokenizer;

/**
 * &lt;a href=&quot;LiferaySQL.java.html&quot;&gt;&lt;b&gt;&lt;i&gt;View Source&lt;/i&gt;&lt;/b&gt;&lt;/a&gt;
 *
 * @author Brian Wing Shun Chan
 *
 */
public class LiferaySQL {

	public static void main(String[] args) {
		String sql = &quot;&quot;;

		for (int i = 0; i &lt; args.length; i++) {
			sql += args[i] + &quot; &quot;;
		}

		if (!sql.equals(&quot;&quot;)) {
			new LiferaySQL(sql.trim());
		}
	}

	public LiferaySQL(String sql) {
		System.out.println(sql);

		Connection con = null;
		PreparedStatement ps = null;
		ResultSet rs = null;

		try {
			Properties props = new Properties();

			try {
				props.load(new FileInputStream(new File(&quot;db.properties&quot;)));
			}
			catch (IOException ioe) {
				ioe.printStackTrace();

				return;
			}

			String driver = props.getProperty(&quot;driver&quot;);
			String url = props.getProperty(&quot;url&quot;);
			String user = props.getProperty(&quot;user&quot;);
			String password = props.getProperty(&quot;password&quot;);

			Class.forName(driver);

			con = DriverManager.getConnection(url, user, password);

			con.setAutoCommit(false);

			File sqlFile = new File(sql);

			if (sqlFile.exists()) {
				StringBuffer sb = new StringBuffer();

				BufferedReader br = new BufferedReader(new FileReader(sqlFile));

				String line = null;

				while ((line = br.readLine()) != null) {
					if (!line.startsWith(&quot;--&quot;)) {
						sb.append(line);
					}
				}

				br.close();

				StringTokenizer st = new StringTokenizer(sb.toString(), &quot;;&quot;);

				while (st.hasMoreTokens()) {
					line = st.nextToken();

					System.out.println(line + &quot;;&quot;);

					ps = con.prepareStatement(line);
					ps.executeUpdate();
				}
			}
			else if (sql.toLowerCase().startsWith(&quot;insert &quot;) ||
					 sql.toLowerCase().startsWith(&quot;update &quot;)) {

				ps = con.prepareStatement(sql);
				ps.executeUpdate(sql);
			}
			else {
				ps = con.prepareStatement(sql);
				rs = ps.executeQuery(sql);
				ResultSetMetaData rsmd = rs.getMetaData();

				int[] width = new int[rsmd.getColumnCount() + 1];

				StringBuffer sb = new StringBuffer();

				for (int i = 1; i &lt;= rsmd.getColumnCount(); i++) {
					width[i] = rsmd.getColumnLabel(i).length();
				}

				List results = new ArrayList();

				while (rs.next()) {
					String[] rowResult = new String[rsmd.getColumnCount() + 1];

					for (int i = 1; i &lt;= rsmd.getColumnCount(); i++) {
						Object obj = rs.getObject(i);

						if (obj != null) {
							rowResult[i] = obj.toString();

							int objWidth = obj.toString().length();

							if (width[i] &lt; objWidth) {
								width[i] = objWidth;
							}
						}
						else {
							rowResult[i] = &quot;&quot;;
						}
					}

					results.add(rowResult);
				}

				_printLine(rsmd, width, sb);

				for (int i = 1; i &lt;= rsmd.getColumnCount(); i++) {
					String label = rsmd.getColumnLabel(i);

					sb.append(&quot;| &quot;).append(label);

					for (int j = 0; j &lt;= width[i] - label.length(); j++) {
						sb.append(&quot; &quot;);
					}
				}

				sb.append(&quot;|\n&quot;);

				_printLine(rsmd, width, sb);

				Iterator itr = results.iterator();

				while (itr.hasNext()) {
					String[] rowResult = (String[])itr.next();

					for (int i = 1; i &lt;= rsmd.getColumnCount(); i++) {
						String s = rowResult[i];

						sb.append(&quot;| &quot;).append(s);

						for (int j = 0; j &lt;= width[i] - s.length(); j++) {
							sb.append(&quot; &quot;);
						}
					}

					sb.append(&quot;|\n&quot;);
				}

				_printLine(rsmd, width, sb);

				System.out.println(sb.toString());
			}

			con.commit();
		}
		catch (SQLException sqle) {
			while (sqle != null) {
				sqle.printStackTrace();

				sqle = sqle.getNextException();
			}
		}
		catch (Exception e) {
			e.printStackTrace();
		}
		finally {
			_cleanUp(con, ps, rs);
		}
	}

	private void _cleanUp(Connection con, Statement s, ResultSet rs) {
		if (rs != null) {
			try {
				rs.close();
			}
			catch (Exception e) {
			}
		}

		if (s != null) {
			try {
				s.close();
			}
			catch (Exception e) {
			}
		}

		if (con != null) {
			try {
				con.close();
			}
			catch (Exception e) {
			}
		}
	}

	private void _printLine(
			ResultSetMetaData rsmd, int[] width, StringBuffer sb)
		throws SQLException {

		for (int i = 1; i &lt;= rsmd.getColumnCount(); i++) {
			sb.append(&quot;+&quot;);

			for (int j = 0; j &lt;= width[i] + 1; j++) {
				sb.append(&quot;-&quot;);
			}
		}

		sb.append(&quot;+\n&quot;);
	}

}    </description>
    <dc:date>2007-12-23T01:18:48+09:00</dc:date>
    <utime>1198340328</utime>
  </item>
    <item rdf:about="https://w.atwiki.jp/collectosssrccord/pages/11.html">
    <title>Java</title>
    <link>https://w.atwiki.jp/collectosssrccord/pages/11.html</link>
    <description>
      **[[SQL文を実行したい]]    </description>
    <dc:date>2007-12-23T01:05:05+09:00</dc:date>
    <utime>1198339505</utime>
  </item>
    <item rdf:about="https://w.atwiki.jp/collectosssrccord/pages/1.html">
    <title>トップページ</title>
    <link>https://w.atwiki.jp/collectosssrccord/pages/1.html</link>
    <description>
      **使えるソースコードたち
オープンソースソフトウェアのコードを読んでいくうちに、今後使えそうなものをとりあえずメモっとくwikiです。


**メニュー
-[[Java]]
-[[Ruby]]    </description>
    <dc:date>2007-12-23T01:01:38+09:00</dc:date>
    <utime>1198339298</utime>
  </item>
    <item rdf:about="https://w.atwiki.jp/collectosssrccord/pages/2.html">
    <title>メニュー</title>
    <link>https://w.atwiki.jp/collectosssrccord/pages/2.html</link>
    <description>
      **メニュー
-[[トップページ]]
-[[プラグイン紹介&gt;プラグイン]]
-[[メニュー]]
-[[メニュー2]]

----

**リンク
-[[@wiki&gt;&gt;http://atwiki.jp]]
-[[@wikiご利用ガイド&gt;&gt;http://atwiki.jp/guide/]]

**他のサービス
-[[無料ホームページ作成&gt;&gt;http://atpages.jp]]
-[[無料ブログ作成&gt;&gt;http://atword.jp]]
-[[無料掲示板レンタル&gt;&gt;http://atbbs.jp]]
-[[2ch型掲示板レンタル&gt;&gt;http://atchs.jp]]
-[[お絵かきレンタル&gt;&gt;http://atpaint.jp/]]

// リンクを張るには &quot;[&quot; 2つで文字列を括ります。
// &quot;&gt;&quot; の左側に文字、右側にURLを記述するとリンクになります


**更新履歴
#recent(20)
    </description>
    <dc:date>2007-12-22T22:39:10+09:00</dc:date>
    <utime>1198330750</utime>
  </item>
    <item rdf:about="https://w.atwiki.jp/collectosssrccord/pages/5.html">
    <title>プラグイン/編集履歴</title>
    <link>https://w.atwiki.jp/collectosssrccord/pages/5.html</link>
    <description>
      * 更新履歴
@wikiのwikiモードでは
 #recent(数字)
と入力することで、wikiのページ更新履歴を表示することができます。
詳しくはこちらをご覧ください。
＝＞http://atwiki.jp/guide/17_117_ja.html


-----


たとえば、#recent(20)と入力すると以下のように表示されます。


#recent(20)
    </description>
    <dc:date>2007-12-22T22:39:10+09:00</dc:date>
    <utime>1198330750</utime>
  </item>
    <item rdf:about="https://w.atwiki.jp/collectosssrccord/pages/6.html">
    <title>プラグイン/アーカイブ</title>
    <link>https://w.atwiki.jp/collectosssrccord/pages/6.html</link>
    <description>
      * アーカイブ
@wikiのwikiモードでは
 #archive_log()
と入力することで、特定のウェブページを保存しておくことができます。
詳しくはこちらをご覧ください。
＝＞http://atwiki.jp/guide/25_171_ja.html


-----


たとえば、#archive_log()と入力すると以下のように表示されます。
保存したいURLとサイト名を入力して&quot;アーカイブログ&quot;をクリックしてみよう


#archive_log()
    </description>
    <dc:date>2007-12-22T22:39:10+09:00</dc:date>
    <utime>1198330750</utime>
  </item>
    <item rdf:about="https://w.atwiki.jp/collectosssrccord/pages/8.html">
    <title>プラグイン</title>
    <link>https://w.atwiki.jp/collectosssrccord/pages/8.html</link>
    <description>
      @wikiにはいくつかの便利なプラグインがあります。

-----


#ls

-----

これ以外のプラグインについては@wikiガイドをご覧ください
=&gt;http://atwiki.jp/guide/
    </description>
    <dc:date>2007-12-22T22:39:10+09:00</dc:date>
    <utime>1198330750</utime>
  </item>
    <item rdf:about="https://w.atwiki.jp/collectosssrccord/pages/9.html">
    <title>プラグイン/関連ブログ</title>
    <link>https://w.atwiki.jp/collectosssrccord/pages/9.html</link>
    <description>
      * 関連ブログ
@wikiのwikiモードでは
 #bf(興味のある単語)
と入力することで、あるキーワードに関連するブログ一覧を表示することができます

詳しくはこちらをご覧ください。
＝＞http://atwiki.jp/guide/17_161_ja.html

-----


たとえば、#bf(ゲーム)と入力すると以下のように表示されます。


#bf(ゲーム)
    </description>
    <dc:date>2007-12-22T22:39:10+09:00</dc:date>
    <utime>1198330750</utime>
  </item>
  </rdf:RDF>
