memorandums

日々の生活で問題解決したこと、知ってよかったことなどを自分が思い出すために記録しています。

ソースコードをDBに格納するサンプル

異常処理もなにも考えていないごくごく素朴な方法ですが。。。ソースコードBase64を用いて変換してDBに格納したり取り出したりするJSPです。自己メモとして。なお、クラサバともmacで利用することを想定しています。

動作するための準備:
(1)ここを押してapache commons codecをダウンロードして参照できるところ(WEB-INF/lib等)使う。
(2)ここを押してSyntaxHilighterをダウンロードしてドキュメントルートに配置する。

<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>

<script type="text/javascript" src="shCore.js"></script>
<script type="text/javascript" src="shBrushJava.js"></script>
<link type="text/css" rel="stylesheet" href="shCoreDefault.css"/>
<script type="text/javascript">SyntaxHighlighter.all();</script>
<link rel="stylesheet" href="style.css" type="text/css" />

</head>
<body>
<%
request.setCharacterEncoding("utf-8");
String btn = request.getParameter("btn");
String code = request.getParameter("code");

if ("SEND".equals(btn)) {	
	Class.forName("org.apache.derby.jdbc.ClientDriver"); 
	Properties prop = new Properties();
	prop.put("user", "user");
	prop.put("password", "pass");
	Connection con = DriverManager.getConnection("jdbc:derby://localhost:1527/sample;create=true",prop);
	con.setAutoCommit(true);
	Statement stmt = con.createStatement();
	byte[] encodedCode = Base64.encodeBase64(code.getBytes());
	String encodedStr = new String(encodedCode);
	String sql = "INSERT INTO CODES (CODE) VALUES ('" + encodedStr + "')";
	int cnt = stmt.executeUpdate(sql);
	stmt.close();
	con.close();
}

Class.forName("org.apache.derby.jdbc.ClientDriver"); 
Properties prop = new Properties();
prop.put("user", "user");
prop.put("password", "pass");
Connection con = DriverManager.getConnection("jdbc:derby://localhost:1527/sample;create=true",prop);
con.setAutoCommit(true);
Statement stmt = con.createStatement();
String sql = "SELECT * FROM CODES";
ResultSet rest = stmt.executeQuery(sql);
while(rest.next())
{
     String storedCode = rest.getString("CODE");
     byte[] decoded = Base64.decodeBase64(storedCode.getBytes("utf-8"));
     String decodedStr = new String(decoded);
     out.print("<pre class=\"brush: java;\">" + decodedStr + "</pre>");
}
stmt.close();
con.close();
%>
</body>
  • index.html
<body>
<form action="b64.jsp" method="post">
<textarea name="code">
</textarea>
<br>
<input type="submit" name="btn" value="SEND">
</form>
</body>

ついでに、テーブルに関係するSQLは以下です。

CREATE TABLE CODES (
ID INT PRIMARY KEY GENERATED ALWAYS AS IDENTITY,
CODE VARCHAR(1000)
)

INSERT INTO CODES (CODE) VALUES ('class Hello {...')
SELECT * FROM CODES;
DELETE FROM CODES;