Java Call PL/SQL

การเรียก PL/SQL ในจาวา มีรูปแบบง่ายๆสองแบบ คือ
1. แบบไม่มีการคืนค่า ใช้รูปแบบ {call PL_NAME(?,?,?)}
เครื่องหมาย ? ในวงเล็บคือ parameter ที่จะทำการส่งไปให้ PL/SQL เวลาเรียกจาก Java จะเขียนเหมือน Code ตัวอย่างด้านล่าง

public void execute(Connection conn) throws SQLException{
 String plName = "{call PL_NAME(?,?,?)}";
 CallableStatement stmt = conn.prepareCall(plName);

 //set PL parameter & value
 stmt.setInt(1,5);
 stmt.setString(2,"TEST");
 stmt.setDate(3,new Date());
 stmt.execute();
 stmt.close();
}

2. แบบมีการคืนค่า ใช้รูปแบบ {? = call PL_NAME(?,?,?)}
เครื่องหมาย ? ในวงเล็บคือ parameter ที่จะทำการส่งไปให้ PL/SQL ส่วน ? ก่อน call นั้นคือค่าที่ return จาก PL/SQL เวลาเรียกจาก Java จะเขียนเหมือน Code ตัวอย่างด้านล่าง

public String execute(Connection conn) throws SQLException {
 String plName = "{? = call PL_NAME(?,?,?)}";
 CallableStatement stmt = conn.prepareCall(plName);
 //Set output data type
 stmt.registerOutParameter(1, OracleTypes.VARCHAR);

 //set PL parameter & value
 stmt.setInt(2,5);
 stmt.setString(3,"TEST");
 stmt.setDate(4,new Date());
 stmt.execute();
 String returnValue = stmt.getString(1);
 stmt.close();
 return returnValue;
}

หมายเหตุ :
1. registerOutParameter สามารถ return เป็นข้อมูลหลายแบบ เช่น Cursor , Double และ อื่นๆ
2. สังเกต หากไม่มีการคืนค่าจากการเรียก PL/SQL CallableStatementจะทำการ Set ค่า Parameter เริ่มจาก 1 และถ้ามีการคืนค่าจาก PL/SQL CallableStatementจะเริ่ม Set ค่า Parameter เริ่มจาก 2 เนื่องจากตำแหน่งที่ 1 นั้นเป็น output parameter ไปแล้ว

Shorthand CSS

เวลาเขียน Shorthand CSS อย่างเช่น

padding: x1px x2px x3px x4px; 

ตำแหน่ง และ ความหมายคือ top, right, bottom, left ดังนั้นหากเขียนว่า

.test{padding: 20px 10px 20px 10px;}  

หมายความว่า element ใดก็ตามที่ใช้ style class test นั้นจะมี padding ห่างจากข้างบน 20px ข้างขวา 10px ข้างล่าง 20px และ ทางด้านซ้าย 10px

การติดต่อฐานข้อมูลใน Java

เนื่องจากความจำไม่ดี Code ก็ไม่แม่นเท่าไรลืมทุกที ก็เลยมาเขียนไว้เตือนความจำหน่อย

1. เป็นการติดต่อ Database แบบโดยตรงไม่ผ่าน DataSource

public static Connection getJDBCConnection() {
	Connection conn = null;
	try {
		Class.forName("jdbc.drive");
		conn = DriverManager.getConnection ("jdbc.url","user","pass");
	} catch (ClassNotFoundException e) {
		e.printStackTrace();
	}catch (SQLException e) {
		e.printStackTrace();
	}

	return conn;
}

2. การติดต่อ Database แบบผ่าน DataSource

public static Connection getDataSourceConnection() {
	InitialContext context = null;
	DataSource ds = null;
	Connection conn = null;
	try {
		context = new InitialContext();
		ds = (DataSource) context.lookup("DataSourceName");
		conn = ds.getConnection();
	} catch (SQLException e) {
		e.printStackTrace();
	} catch (NamingException e) {
		e.printStackTrace();
	}

	return conn;
}

การ split จุดทศนิยมใน Java

เคยเจอปัญหาในการตัดข้อความหรือ คำ โดยใช้ method split ของ String แล้วติดปัญหา ว่าไม่สามารถตัดได้ จากการหาทางแก้ปัญหาโดยถามอาจารย์ Google ก็ได้แนวทางมาดั้งนี้
จากข้อมูลเดิมของเราเช่น 172.35.100.23 ถ้าต้องการตัด หรือ แบ่งข้อมูลออกมาโดยให้ “.” ในการแบ่ง จะไม่สามารถใช้ เครื่องหมาย “.” โดยตรงได้ ให้หลีกเลี่ยงไปใช้ ตามรูปแบบนี้ครับ

จากเดิม

String data = "172.0.0.1";
String[] datas = data.split(".");

เปลี่ยนมาเป็น

String data = "172.0.0.1";
String[] datas = data.split("\\."); // หรือ "\\." แทนด้วย "[.]"

นอกจากเครื่องหมาย “.” แล้วเครื่องหมายอย่างเช่น “|” เองก็ต้องใช้รูปแบบเดียวกันครับ สำหรับปัญหานี้ผมคิดว่าในภาษาอื่นๆอาจเจอปัญหาเหมือนกันเพียงแต่ไม่ได้ทดสอบครับ