Tuesday, September 29, 2009

Date Formatter

Is the ParseException happens?

SimpleDateFormat df = new SimpleDateFormat("dd-MM-yyyy");
Date date = null;
try {
//1
date = df.parse("12-34-2007");
} catch (ParseException e) {
System.out.println("Wrong date");
}
System.out.println(date.toString());

Actually not. To prevent this add to //1
df.setLenient(false);

Letient parameter is true by default that's why to match format strictly need
setting parameter to false

Sunday, September 20, 2009

Monday, May 25, 2009

Converting image

As our Designer was fired because of crisis - I had to change images size. So imagemagic is excelent for this use.

mogrify -gravity Center -crop 30X22+0+0 *.png
mogrify -format png *.jpg
mogrify -resize 30x22+0+0 *.*
mogrify -resize 120% *.*

identify -format "%wx%h \n" *.*

Friday, May 8, 2009

Hibernate Custom Type

Database has for example wrong state and can't save 1 or 0, 'Y' or 'N', 'YES' or 'NO'
So you need to save state as 1 and 2. Seems that database need refactoring... yes you are right but if you can't? Here is decision - custom type

package com.types;

import java.io.Serializable;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Types;

import org.hibernate.HibernateException;
import org.hibernate.usertype.UserType;

public class OneTwoBooleanType implements UserType{

private final static int DB_TRUE = 1;
private final static int DB_FALSE = 2;

public Object assemble(Serializable cached, Object owner) throws HibernateException {
return cached;
}

public Object deepCopy(Object value) throws HibernateException {
return value;
}

public Serializable disassemble(Object value) throws HibernateException {
return (Serializable) value;
}

public boolean equals(Object x, Object y) throws HibernateException {
if(x==null){
return false;
}
return ((Boolean)x).equals(y);
}

public int hashCode(Object x) throws HibernateException {
return x.hashCode();
}

public boolean isMutable() {
return false;
}

public Object nullSafeGet(ResultSet rs, String[] names, Object owner) throws HibernateException, SQLException {
Number val = (Number) rs.getObject(names[0]);
if(val==null){
return false;
}
return val.intValue() == DB_TRUE ? true : false;
}

public void nullSafeSet(PreparedStatement st, Object value, int index) throws HibernateException, SQLException {
int dbValue;
if(value==null){
dbValue = DB_FALSE;
} else {
dbValue = (Boolean) value ? DB_TRUE : DB_FALSE;
}
st.setInt(index, dbValue);
}

public Object replace(Object original, Object target, Object owner) throws HibernateException {
return original;
}

public Class returnedClass() {
return Boolean.class;
}

public int[] sqlTypes() {
return new int[]{Types.SMALLINT};
}

}

And It's usage

@Column(name="INTERNAL_STATUS_ID")
@Type(type="com.types.OneTwoBooleanType")
private boolean isVisible;

Tuesday, April 21, 2009

Substract queries

If you need to check differences between tables use this query:

select * from t1
minus
select * from t2

Tuesday, April 7, 2009

Java version number


import java.io.DataInputStream;
import java.io.FileInputStream;
import java.io.IOException;

public class ClassVersionChecker {
public static void main(String[] args) throws IOException {
for (int i = 0; i < args.length; i++)
checkClassVersion(args[i]);
}

private static void checkClassVersion(String filename) throws IOException {
DataInputStream in = new DataInputStream(new FileInputStream(filename));

int magic = in.readInt();
if (magic != 0xcafebabe) {
System.out.println(filename + " is not a valid class!");
}
int minor = in.readUnsignedShort();
int major = in.readUnsignedShort();
System.out.println(filename + ": " + major + " . " + minor);
in.close();
}
}


1.Compile

javac ClassVersionChecker.java

2.Execute in unix console

find . -name *.class|xargs java -cp /c/tmp ClassVersionChecker|grep 50

where last number is class version

major minor Java platform version
45 3 1.0
45 3 1.1
46 0 1.2
47 0 1.3
48 0 1.4
49 0 1.5
50 0 1.6

Friday, March 27, 2009

Statistical SQL query



For example you need to count how many companies in which source system:

select count(*), source_system_id from company group by rollup(source_system_id)