Wednesday, October 29, 2008

NumberFormat: Remove decimal point

Back again w00t w00t. Ahahaha. Dua hari lepas dapat lagi satu ilmu dalam java programming ni. Okay first kita tengok dulu apa problem kat sini. Aku boleh ringkaskan masalah aku ni kepada 4 peringkat:

1 - get double value (exp: 678.1) daripada database dan formatkan kepada 2 decimal point/places (exp: 678.10).
2 - bila dah di formatkan double value ni akan di'cast'kan kepada String, so nak tukar balik kepada Double supaya aku boleh darab dengan 100.
3 - sebab aku darab pulak dengan 100 ialah untuk mendapatkan data macam (678.10 > 67810). So senang cerita aku nak jadikan (678.1 kepada 67810)

Kita start dengan import dulu library/API yang diperlukan
import java.text.NumberFormat;

Pastu set Max/Min fraction digit menggunakan NumberFormat. Untuk contoh ni aku setkan Max/Min kepada 2 titik perpuluhan
NumberFormat form = NumberFormat.getInstance();
form.setMinimumFractionDigits(2);
form.setMaximumFractionDigits(2);

Untuk assign value, aku guna for loop + Iterator. Kat bawah ni korang boleh nampak macam mana dtlIterator.getTotal() diformatkan kepada 2 titik perpuluhan menggunakan from.format(). Pada tahap ni, value getTotal() akan ber'type' String dengan 2 titik perpuluhan. Double.parseDouble pulak akan tukar Stiing ni kepada Double and darabkan dengan 100 ( *100 ).
for (Iterator dtl = dtlList.iterator(); dtl.hasNext(); ) {
PendPaymentLogDtl dtlIterator = dtl.next();
Double tempTotal = Double.parseDouble(form.format(dtlIterator.getTotal())) * 100;
System.out.println("test lagi double >>> " + tempTotal.longValue());
}

Harapnya korang faham apa yang aku nak buat kat sini. Harap dapat membantu, walaupun tak byk. Daaa...

Wednesday, October 22, 2008

Regex tokenizer

Seperti tajuk post kali ni, aku nak sembang sikit pasal tokenizer (dalam java). Baru - baru dapa assignment baru dari bos, yang mana aku kena buat satu Servlet. And the purpose of this Servlet ialah aku kena capture HTTPRequest (post) dan guna paramiter/string yang dihantar.

So secara ringkasnya penyelesaian aku ialah guna tokenizer. Baca punya baca punya baca, banyak site cakap java.util.StringTokenizer dah diklafisikasikan sebagai lagacy class and cadangkan untuk guna split method dalam String atau java.util.regex. Oleh itu aku pun guna dua - dua method ngan API.

Takyah la sembang bebanyak la kan, ok kat bawah ni ialah contoh coding yang aku guna. Simple jela untuk rujukan je.

First import dulu API ni.

import java.util.regex.Pattern;

Second ni simple coding yang aku cakap tu.

String regex = ",";
String fullString = null;

String fullString = request.getParameter("payment").toString();
System.out.println("payment = " + fullString);

Pattern pattern = Pattern.compile(regex);
String[] subString = pattern.split(fullString);

for (int i = 0; i <>
subString[i] = subString[i];
}

Basicnya, request.getParameter("payment").toString() akan capture String dari HTTPPost aku tadi dan assign kepada variable fullString. pastu pattern.split akan tokenize fullString kepada subString. Delimiter dia ialah regex ataupun ",". Katakan aku dapat satu full sting mcm "hello,world", so subString[0] akan simpan value "hello" manakala subString[1] akan simpan value "world". Emmm tu je kot, haaa lupa lagi satu, kalau korang takut ada exception apa ke, letak la try catch kan. Aku malas je nak tulis sini sebab tu bukan tujuan utama.

Tu je kot. Sama - sama belajar okay!. <3

Thursday, July 10, 2008

Oracle SQL: RPAD and LPAD




Haaa sekali lagi. Aku nak merapu dalam blog yang tak seberapa ni. Kali ni aku nak cetita pulak pasai "Padding". Pada dasarnya, padding ni membawa maksud penambahan kepada sesuatu benda tu, untuk meningkatkan saiz barang tersebut. Yey, jangan percaya sangat, sebab tu aku tulis berdasarkan apa yg aku paham.

Okay dalam asas programming pulak padding membawa maksud penambahan character kepada sesuatu struktur data untuk melengkapkan bahagian yg kosong pada data tu. Contoh la sesuatu machine ni dia cuma terima input yang panjangnya 10. Tetapi input yang kita ada cuma panjangnya 6. Oleh itu kena la tambah blank space kat belakang input tu. Katakan nak hantaq input "saya", so data tu kita kena cukupkan 10 dengan buat macam ni "saya++++++" (katakan + adalah blank spaces). Haaa paham dak, takpa la kalau tak paham pun, ahahaha.

Ini cara macam mana kita guna padding dalam sql:

Contoh1
SELECT RPAD (test_id, 15)
FROM table_test
WHERE test_id = '1234567890';
Output1
"1234567890+++++" (exclude "") (katakan + adalah spaces)
tengok macam mana RPAD tambah 5 blank spaces pada bahagian kanan output.

Contoh2
SELECT RPAD (test_id, 5)
FROM table_test
WHERE test_id = '1234567890';
Output2
"12345" (exclude "")
dalam output ni pulak RPAD dah potong output tadi sebab panjang yang kita nak cuma 5.

Contoh3
SELECT LPAD (test_id, 15)
FROM table_test
WHERE test_id = '1234567890';
Output3
"+++++1234567890" (exclude "") (katakan + adalah spaces)
kat sini pulak LPAD dah lengkap kan output tu dengan menambah blank spaces kat belah kiri output.

Contoh4
SELECT LPAD (test_id, 15, '+')
FROM table_test
WHERE test_id = '1234567890';
Output4
"+++++1234567890" (exclude "")
bukan spaces saja, blank tu pun boleh diganti dengan character lain macam contoh kat atas ni.

Friday, June 13, 2008

Oracle SQL: GRANT function




Hehehe post baru untuk harini. Penat gak keje siang malam ni. Satgi nak balik kampung pulak. Okay ni aku jumpa satu benda baru (bagi diri aku la). Secara tak sengaja aku nyer senior DBA bagi kat aku benda GRANT ni. Okay sebenarnya GRANT ni untuk bagi permission system privileges dan object privileges kepada users ataupun roles. Ahaha kalau tak paham, abaikan, sebab aku pun cilok dari website lain.

Nak bagi senang/pendek cerita, GRANT ni akan membolehkan hampa(korang) buat sql query atas sesuatu table walaupun dekat object/schema lain. Ok kat bawah ni contoh bila kita nak select records dalam table user_table dalam object/schema user/user@userdatabase kat object/schema lain iaitu admin/admin@userdatabase.
GRANT SELECT ON user_table TO admin;

Sebenaqnya selain daripada select pun boleh contohnya insert, update, delete, trigger dan etc. Ok berbalik pada perbincangan, atas tadi cuma nak bagi permission ja, kat bawah ni pulak cara nak guna.

ni hampa kena masuk admin/admin@userdatabase dulu:
SELECT *
FROM USER.user_table USE, admin_table adm
WHERE USE.ID = adm.ID;

Senang kan? Terus ja boleh connect antara dua schema. Eheheh tu ja kot. Kalau hampa rasa salah takyah la ikut. ehehe.

Wednesday, June 11, 2008

Oracle SQL: select N records




Macam programmer yang lain, aku selalu ada masalah bila nak handle data yang banyak dalam database. Tambah pulak bila nak buat select statement pastu dapat beratus - ratus ribu data. So bila masa nak copy masuk dalam texteditor dah macam - macam masalah pulak yang keluaq. Memory tak cukup la, editor hang la and macam macam lagi. So kan baguih kalau dapat select data - data sikit sikit. Contoh kalau ada 200 ribu data, kita boleh select 100 ribu dulu, pastu save dalam texteditor, pastu buat benda yang sama untuk 100 ribu data yang seterusnya.

Nasib baik semua ni takda masalah dalam SQL. Untuk aku yang more kepada Oracle, ada satu function dalam Oracle SQL yang boleh buat benda ni iaitu 'ROWNUM'. Okay script yang first ni adalah untuk select first 1000 records.
SELECT column_name
FROM table_name
WHERE ROWNUM <= 1000;

Tapi masalah jugak kan? Bila nak dapatkan data yang 1000 seterusnya takkan kita nak buat <= 2000, so data 1000 yang awal pun ada jugak. Oleh tu kita kena pulak guna script yang bawah ni. Script kat bawah ni akan select data yang ke 1000 sampai 2000.
SELECT *
FROM (SELECT ROWNUM rnum, a.*
FROM (SELECT *
FROM table_name) a
WHERE ROWNUM <= 2000) WHERE rnum >= 1000;

Tu saja kot untuk post ni, aku saja je tulis supaya aku pun tak lupa bila sampai time nak guna nanti.