Archive for the ‘ Java Technology ’ Category

[Java] Convert เลขฐาน 2 เป็นเลขฐาน 10

รื้อฟื้นเรื่องเดิม สมัยที่ทำ Application ตัวหนึ่งซึ่งต้องทำการแปลงเลขฐาน 2 ไปเป็นฐาน 10 และ แปลงเลขฐาน 10 มาเป็นเลขฐาน 2 ซึ่งแรกกะว่าจะเขียนเอง ลงทุนไปหาสูตรมาเรียบร้อย ที่ไหนได้มันอยู่ใกล้ตัวนี่เอง ง่ายมากๆ เส้นผมบางภูเขาหัวโล้นเลยละ แค่ใช้ Class Integer ก็จบงานแล้วครับ ดังตัวอย่างนี้เลย

/**
 * File Name : BinaryBase.java
 * Created Date : Sep 21, 2010 : 9:48:55 AM
 * Copyright © 2010 www.fun4station.com
 */
package com.fun4station.example;

/**
 * @Author Supot Saelao 
 * @Version 1.0
 */
public class BinaryBase {

	public static void main(String[] args) {
		//Convert 101010 (Binary base) to Decimal
		int dec = Integer.parseInt("101010", 2);
		
		//Convert Binary to Decimal 
		String biStr = Integer.toBinaryString(dec);
		
		System.out.println("101010 => " + dec);
		System.out.println(dec + " => " + biStr);
	}
}

ผลที่ได้ก็ประมาณนี้ครับ

101010 => 42
42 => 101010

นอกจากนี้ ดังสามารถแปลงไปเป็นเลขฐานอื่นๆได้อีกครับ เช่นฐาน 8 , ฐาน 16 ส่วนผมเจอข้อมูลนี้ได้ไงก็จากอ่าน เอกสารประกอบ method parseInt ของ Class Integer

[Java] Example Connect to DB2

เนื่องจากมีโอกาสได้มาใช้ DB2 ของ IBM เลยบันทึกการใช้งานคร่าวๆดังนี้
1. Connection ใช้รูปแบบดังนี้
JDBC : com.ibm.db2.jcc.DB2Driver
URL : jdbc:db2//[host]:[port]/[Database Name]

private static Connection getConnection() throws Exception {
	Connection db2Conn = null;
	try {
		String url = "jdbc:db2://localhost:50000/sample";
		Class.forName("com.ibm.db2.jcc.DB2Driver");
		db2Conn = DriverManager.getConnection(url,"DB2ADMIN","java");
	} catch (ClassNotFoundException e) {
		e.printStackTrace();
	} catch (SQLException e) {
		e.printStackTrace();
	}
	
	return db2Conn;
}

ทดลองดึงข้อมูลมาแสดง

public static void main(String[] args) {
	try {
		Connection db2Conn = getConnection();
		
		String sql = "SELECT DEPTNO, DEPTNAME FROM DEPARTMENT";
		Statement stmt = db2Conn.createStatement();
		ResultSet rs = stmt.executeQuery(sql);
		while(rs.next()){
			System.out.print(rs.getString("DEPTNO"));
			System.out.println(" - "+rs.getString("DEPTNAME"));
		}
		
		rs.close();
		stmt.close();
		closeConnection(db2Conn);
	} catch (Exception e) {
		e.printStackTrace();
	}
}

Read more

[Java] การใช้งาน Batch Updates/Insert

มีงานที่ต้องอ่านข้อมูลขนาดใหญ่จาก text file(ประมาณไฟล์ละ 800M) แล้วทำการบันทึกลงฐานข้อมูล ซึ่งต้องใช้เวลามาก นอกจากวิธีนี้ก็ไม่รู้จะใช้วิธีการแบบไหนในการนำข้อมูลขนาดใหญ่(กลางๆ) แบบนี้ลงไปในฐานข้อมูลได้เพราะข้อมูลที่จัดเก็บนั้นต้องตรวจสอบว่าตรงตามเงื่อนไขหรือไม่ ก่อนทำการบันทึก ทดลองใช้ insert แบบธรรมดาสามัญสุดๆ แล้วก็พบว่าแทบตายครับช้ามาก กว่าจะอ่านเสร็จแต่ละไฟล์ และ บันทึกข้อมูลเสร็จ เลยทดลองมาใช้ Batch Update/Insert แทน ซึ่งเร็วกว่าเดิมมาก แต่มาติดปัญหาตรง
1. เวลาข้อมูลซ้ำกับที่ Insert ไปแล้วก็ไม่ต้องสนใจ ข้ามไปยังรายการถัดไปเลย แต่ Batch Update ทำไมไ่ด้ครับ เช่น เราเคยบันทึกข้อมูล

1001
1002 

ไปแล้ว เมื่อต้องบันทึกข้อมูลดังกล่าวซ้ำไปอีก แต่เป็น

1003 
1001 
1004

รายการ 1003 ลงได้ปกติ 1001 จะเกิด Exception ทำให้รายการ 1004 ไม่ลงไปด้วย ผมก็ลองสรรหาวิธีทำให้ Batch Insert ทำรายการต่อไปถึงแม้จะเกิด Exception ลองอ่านเอกสารของ executeBatch() ได้ใจความว่า

If one of the commands in a batch update fails to execute properly, this method throws a BatchUpdateException, and a JDBC driver may or may not continue to process the remaining commands in the batch. However, the driver’s behavior must be consistent with a particular DBMS, either always continuing to process commands or never continuing to process commands……

จากนั้นไปทดลองใช้ Class ของ Oracle เองก็ไม่ได้เหมือนกัน หมดหวังกันที่เดียวเลย สุดถ้ายก็กลับไปตายด้วยวิธีเดิม

หมายเหตุ : จากงานนี้ทำให้รู้ว่า เวลาจะประมวลผลอะไรใหญ่ๆ หนักๆ ควรจะรัน Java ใน Server Mode และกำหนดหน่วยความจำเพิ่มขึ้นเช่น

java -server -Xms512m -Xmx1024m com/fun4station/BatchExecute

แหล่งข้อมูล
java – the Java application launcher
Performance Extensions
Java HotSpot VM Options
Batch Updates
Statement

[Java]Run batch file in Java class

มีงานที่ต้องใช้ Java ไปรัน batch ไฟล์ ในเครื่อง Windows (class นี้รันภายใต้ Windows) จากการสืบเสาะหา และ ถามไถ่จาก อ.google แล้ว ก็ได้หนทางดังนี้

/**     
 * File Name : RuntimeExample.java
 * Create Date : Aug 22, 2010 13:20:26 PM
 */ 
package com.fun4station.batch;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
/**     
 * @author Supot Saelao
 * @version 1.0    
 */
public class RuntimeExample {

	public static void main(String[] args) {
		Process process = null;
		BufferedReader bufferRead = null;
		try{
			//If you don't want to see a window open
			//Runtime.getRuntime().exec("cmd /c start /MIN mybatch.bat");
			process = Runtime.getRuntime().exec("cmd /C mybatch.bat");
			bufferRead = new BufferedReader(new InputStreamReader(process.getInputStream()));
			
			String line = null;
			while ((line = bufferRead.readLine()) != null) {
				System.out.println(line);
			}
			
			if(process.exitValue() == 0){
				System.out.println("Command start mybatch.bat sucess...");
			}else{
				System.out.println("Command start mybatch.bat fail...");
			}
		}catch (Exception e){
			e.printStackTrace();
		}finally{
			try {
				process.destroy();
				bufferRead.close();
			} catch (IOException e) {}
		}
	}
}

แหล่งข้อมูล
How do I run a batch file from my Java Application?
Java Servlet – Running a batch file in Java.

[Java]การติดตั้ง Certificate(SSL) ใน Weblogic 8.1

ต่อจาก [Java]การ Generate Web Service Client ใน Weblogic 8.1
ตามติดด้วยงานติดตั้ง Certificate (SSL) ของ Web Servcie วิธีการก็ตามนี้ครับ
1. เข้าไปที่ C:\bea\jdk142_08\jre\lib\security (เปลี่ยน path ตามที่ติดตั้ง)

keytool -import -alias [alias_name] -file [Path of .cer] -keystore [keystore_name] -storepass [password]

[alias_name] : ชื่อ alias ที่ต้องการ
[Path of .cer] : path ของไฟล์ Certificate.cer
[keystore_name] : ชื่อ keystore
[password] : รหัสผ่าน
ตัวอย่างเช่น

keytool -import -alias example -file D:\example.cer -keystore cacerts -storepass exmpass

2. ดูว่ามี Certificate อะไรที่ติดตั้งบ้าง

keytool -list -keystore [keystore_name] -storepass [password]

[keystore_name] : ชื่อ keystore
[password] : รหัสผ่าน
ตัวอย่างเช่น

keytool -list -keystore cacerts -storepass exmpass