วันอังคารที่ 11 ตุลาคม พ.ศ. 2554

Error ResultSet is closed.

ช่วงนี้ได้แก้ไขระบบงานของ บ เอกชนแห่งหนึ่งย่านสาทร ซึ่งระบบงานค่อนข้างซับซ้อนมากมายเนื่องจากข้อมูลเยอะมากและเกี่ยวเนื่องกัน สิ่งที่ต้องเจอในการ code program คงหนีไม่พ้นเรื่อง query,insert,update ,delete ตาม logic business แน่นอนครับ เมื่อระบบงานที่มี logic เยอะแยะมากมายตามความต้องการของระบบหรือ ตาม privacy ก็ตามแต่ program ทีี่เราเขียนก็มีความจำเป็นต้องมีการการพวก Result set, statement มากกว่า 1 Object ในการจัดการกับ database เพื่อดึงข้อมูลหรือ update ข้อมูล ดังนั้นจึงมีการเขียน statement ซ้อน statement จึงเป็นสาเหตุให้เราต้องเจอ Errors ResultSet is closed.

วิธีแก้ ให้ตรวจสอบ statement ,result set จากข้างใน ว่าเป็น object เดียวกันไหม แล้วค่อยไล่ statement ข้างนอกก็จะเจอ bug ตัวใหญ่

ซึ่งเกิดจากการเขียน code ผิดของเราเอง ^^!

java class to String

บางครั้งในการเขียนโปรแกรมซึ่งเรามีความจำเป็นต้องสร้าง java class ขึ้นมาเพื่อเป็นที่พักข้อมูลที่เป็น Object เช่น Bean ต่างๆ ซึ่งใน class java จะมี method สำหรับ get,set สำหรับกำหนดค่าและนำค่าไปใช้ ดังนี้ เรามีความจำเป็นต้องการรู้ค่าต่างๆใน java class นั้นๆ โดยใช้ method toString() ซึ่งในตัวอย่างเป็น code Override toString โดยไม่ต้องไปสนใจว่าเรามีจำนวน Field หรือ attribute ใน class มากขนาดไหน โดยเขียน code ได้ดังนี้

public class testBean{

private String id;

private String name;

.....

getXX,setXX

....

@Override

public String toString() {
Class cl = this.getClass();
StringBuilder buffer = new StringBuilder();
for (Field field : cl.getDeclaredFields()) {
try {
buffer.append(" ");
buffer.append(field.getName());
buffer.append(":");
buffer.append(field.get(this));
} catch (IllegalArgumentException ex) {
ex.fillInStackTrace();
} catch (IllegalAccessException ex) {
ex.printStackTrace();
}
}
return buffer.toString();

}

}

จะเห็นว่า method toString จะเป็นการ วนวูบ get ชื่อ attribute และ value มาใส่ StringBuffer เพื่อแสดงข้อมูล ซึ่งสามารถนำเอาไปใช้ประโยชน์ทั้งการดู data ,print out console,debug ต่างๆ เป็นต้น