開発環境
AWS Lambda ランタイム:Java8
aws-lambda-java-core :1.2.0.jar
eclipse version :Oxygen.3a Release (4.7.3a)
PostgreSQL :42.2.4.jar
SRE System Library :JavaSE-1.8
やりたいこと
Lambda 上でjavaを動かし、S3からのイベントを検知してRDS(Postgre)にINSERTしたい
現状
INSERT 用のメソッドがエラーにならず実行されることは確認できたのですが、以下のように、全てNULLの行が挿入されてしまいます。
●テストデータ
json
1{ 2 "name": "Chris", 3 "pass": "XmasParty", 4 "age": 20 5}
●ソース
java
1public class InsertRecord implements RequestHandler<Request, Response>{ 2 // 省略:DB接続部分 3 public Response handleRequest(Request request, Context context) { 4 Response response = new Response(); 5 try { 6 System.out.println(request); 7 8 String sql = "INSERT INTO test(name, pass, age) values(" + request.getName() + ", " + request.getPass() + ", " + request.getAge() + ")"; 9 10 conn = DriverManager.getConnection(url, user, pass); 11 Statement stmt = conn.createStatement(); 12 13 int result = stmt.executeUpdate(sql); 14 15 ResultSet resultSet = stmt.executeQuery("SELECT * FROM test WHERE name = " + request.getName()); 16 17 // フィールド一覧を取得 18 List<String> fields = new ArrayList<String>(); 19 ResultSetMetaData rsmd = resultSet.getMetaData(); 20 for (int i = 1; i <= rsmd.getColumnCount(); i++) { 21 fields.add(rsmd.getColumnName(i)); 22 } 23 24 //結果の出力 25 int rowCount = 0; 26 while (resultSet.next()) { 27 rowCount++; 28 29 System.out.println("---------------------------------------------------"); 30 System.out.println("--- Rows:" + rowCount); 31 System.out.println("---------------------------------------------------"); 32 33 //値は、「resultSet.getString(<フィールド名>)」で取得する。 34 for (String field : fields) { 35 response.setFields(field, resultSet.getString(field)); 36 } 37 } 38 39 stmt.close(); 40 conn.close(); 41 42 } catch(SQLException e) { 43 e.printStackTrace(); 44 } 45 return response; 46 } 47} 48
上記のコードは各種Webページを参考にさせていただきながら記述したのですが、
結果は次のようなエラーとなります。
Java
1START RequestId: 59f2199d-9072-11e8-8a69-5b2ce4631401 Version: $LATEST 2lambda.Request@1f28c152 3org.postgresql.util.PSQLException: ERROR: column "chris" does not exist 4 Position: 42 5 at org.postgresql.core.v3.QueryExecutorImpl.receiveErrorResponse(QueryExecutorImpl.java:2103) 6 at org.postgresql.core.v3.QueryExecutorImpl.processResults(QueryExecutorImpl.java:1836) 7 at org.postgresql.core.v3.QueryExecutorImpl.execute(QueryExecutorImpl.java:257) 8 at org.postgresql.jdbc2.AbstractJdbc2Statement.execute(AbstractJdbc2Statement.java:512) 9 at org.postgresql.jdbc2.AbstractJdbc2Statement.executeWithFlags(AbstractJdbc2Statement.java:374) 10 at org.postgresql.jdbc2.AbstractJdbc2Statement.executeUpdate(AbstractJdbc2Statement.java:302) 11 at lambda.InsertRecord.handleRequest(InsertRecord.java:66) 12 at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 13 at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) 14 at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 15 at java.lang.reflect.Method.invoke(Method.java:498) 16 at lambdainternal.EventHandlerLoader$PojoMethodRequestHandler.handleRequest(EventHandlerLoader.java:259) 17 at lambdainternal.EventHandlerLoader$PojoHandlerAsStreamHandler.handleRequest(EventHandlerLoader.java:178) 18 at lambdainternal.EventHandlerLoader$2.call(EventHandlerLoader.java:888) 19 at lambdainternal.AWSLambda.startRuntime(AWSLambda.java:283) 20 at lambdainternal.AWSLambda.<clinit>(AWSLambda.java:64) 21 at java.lang.Class.forName0(Native Method) 22 at java.lang.Class.forName(Class.java:348) 23 at lambdainternal.LambdaRTEntry.main(LambdaRTEntry.java:94) 24END RequestId: 59f2199d-9072-11e8-8a69-5b2ce4631401 25REPORT RequestId: 59f2199d-9072-11e8-8a69-5b2ce4631401 Duration: 864.50 ms Billed Duration: 900 ms Memory Size: 512 MB Max Memory Used: 49 MB
上記のエラーの解決方法をご教示いただけますでしょうか。
また、オリジナルのPOJOクラスは以下となりますが、InsertRecordクラスの中に含まなければならない、などの制約はあるのでしょうか。
java
1public class Request { 2 String name; 3 String pass; 4 int age; 5 6 public String getName() { 7 return name; 8 } 9 public String getPass() { 10 return pass; 11 } 12 public String getAge() { 13 return String.valueOf(age); 14 } 15 16 public void setName(String name) { 17 this.name = name; 18 } 19 public void setPass(String pass) { 20 this.pass = pass; 21 } 22 public void setAge(String age) { 23 this.age = Integer.parseInt(age); 24 } 25 26 public Request(String name, String pass, String age) { 27 this.name = name; 28 this.pass = pass; 29 this.age = Integer.parseInt(age); 30 } 31 public Request() { 32 } 33} 34
以上です。
よろしくお願いします。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。