Samarstan Java Notes

J2SE

Version 0.00 15/12/2003 by Samar

  1. java.lang
  2. jfc: awt, swing, java2d, i18n
  3. Jdbc
  4. Collections
  5. Tools (eclipse, ant)

Conventions: s - string, i - int, b - boolean, l - long, f - float MyClass - subclass of Class oMyClass - instance of MyClass - 1 public class / src f required - any nu nonpublic classes - f name must = public clas name + .java.


I. java.lang

a. Wrapper Classes

TYPE CONVERSION 

Long.parseLong(s);
Long.toString(l); 
Integer.toString(i);	// int -> string	
Integer.parseInt(s);	// string -> int
List oList = oStringArray.asList(oStringArray);	// string array -> list


      String str = Integer.toString(i);
      or
      String str = "" + i
    String str = Double.toString(d);

  String str = Long.toString(l);

  String str = Float.toString(f);

 String to integer :

    str = "25";
    int i = Integer.valueOf(str).intValue();
    or
    int i = Integer.parseInt(str);

   double d = Double.valueOf(str).doubleValue();

   long l = Long.valueOf(str).longValue();
   or
   long l = Long.parseLong(str);

    float f = Float.valueOf(str).floatValue();

 decimal to binary :

    int i = 42;
    String binstr = Integer.toBinaryString(i);

 decimal to hexadecimal :

    int i = 42;
    String hexstr = Integer.toString(i, 16);

    or
    String hexstr = Integer.toHexString(i);


  hexadecimal (String) to integer :

     int i = Integer.valueOf("B8DA3", 16).intValue();
     or
     int i = Integer.parseInt("B8DA3", 16);

  ASCII code to String

     int i = 64;
     String aChar = new Character((char)i).toString();

  integer to ASCII code (byte)

     char c = 'A';
     int i = (int) c; // i will have the value 65 decimal

   To extract Ascii codes from a String

        String test = "ABCD";
        for ( int i = 0; i < test.length(); ++i ) {
          char c = test.charAt( i );
          int j = (int) c;
          System.out.println(j);
          }

   integer to boolean

      b = (i != 0);

   boolean to integer

      i = (b)?1:0;

   note :To catch illegal number conversion, try using the try/catch mechanism.

   try{
     i = Integer.parseInt(aString);
     }
   catch(NumberFormatException e)
     {
     }

II. Tools

a. Eclipse Java IDE Market share is: eclipse 45%, Borland JBuilder 16%, IDEA IntelliJ 10%, Others 29% (QA Systems 2003). Alternatives; Struts Studio, RoamingStudio (www.roamingmedia.com ) etc.

Adding New Project:

File > New > Project > Java: Java Project > 
Proj.Name: atb40 & Proj contents: c:\atb40\atbiws60
> Java Settings: 
Src: i/p: WEB-INF/src + o/p: WEB-INF/classes 
& Order and Export: "Select All" 

[shift] --> | ← (select text)
^C (copy)
^V (paste)
^L (line no)
^F (find)

- auto gen comments + javadoc:
  Window > Preferences > Java > Code Generation > Code and Comments

- auto gen getter/setter for formbean/dto: def all vars;
  r(anywhere in prog) > Source > Gen. Getter + Setter > Select All

- makg new divisn: drag prog by title bar --> on boundary, arrow becoms +

- org imports: r(Prog) > Source > Organize Imports

- make as tab: drag till cascaded notebook icon appears ->
usu. Outline, Hierarchy, Pkg Explorer as tabs in one window

- cvs comments: eclipse:Window>Preferences>Java>Code Generation>Code and Comments
/*
 * $$Header$$
 * $$Author$$
 * $$Date$$
 * $$Revision$$
 * $$Id$$
 * $$Log$$
 *
 * ==============================================================
 *
 * Copyright (c) ${year},  All rights reserved.
 */


- line width / margin: Project Code Style > Edit Global Settings > 
General > Right margin = 80


- "server Error" & window: "Compilation Problems" -> stop Sun One,
rebuild all in eclipse.

- eclipse copies src/*.properties to src/*.classes

b. ant


<project name="MyStrutsProject" default="dist" basedir="."> <description> struts ant buildfile </description> <property name="xsrc" location="WEB-INF/src"/> <!-- set global properties for this build --> <property name="xbuild" location="WEB-INF/classes"/> <property name="xdist" location="WEB-INF/dist"/> <target name="init"> <tstamp/> <!-- create time stamp --> <mkdir dir="${xbuild}"/> </target> <target name="compile" depends="init" description="compile srcs"> <!-- Compile the java code from ${src} into ${build} --> <javac srcdir="${xsrc}" destdir="${xbuild}" classpath="WEB-INF/lib"/> </target> <target name="dist" depends="compile" description="make war"> <war warfile="f-${DSTAMP}.war" webxml="web.xml"> <fileset dir="."> <!-- include all JSPs in root level --> <include name="*.jsp"/> <include name="*.xml"/> </fileset> <lib dir="./WEB-INF/lib"> <include name="*.jar"/> </lib> <!-- include all tag libraries in WEB-INF, but not web.xml (that's handled separately) --> <webinf dir="WEB-INF/"> <include name="*.tld"/> </webinf> <classes dir="./WEB-INF/classes"/> <!-- include all compiled classes --> </war> </target> <target name="deploy"> <!-- Copy the war file to the JBoss deploy directory --> <copy file="f.war" todir="."/> </target> <target name="all" depends="dist,deploy"/> </project>
<project name="ATB3.2" default="compile" basedir="."> <description> ATB 3.2 ant buildfile <property name="psrc" location="WEB-INF/src"/> <property name="pbuild" location="WEB-INF/classes"/> <property name="pdist" location="WEB-INF/dist"/> <property name="plib" location="WEB-INF/lib"/> <target name="init"> <tstamp/> <mkdir dir="${pbuild}"/> </target> <target name="compile" depends="init" description="compile srcs"> <!-- Compile the java code from ${src} into ${build} --> <javac srcdir="${psrc}" destdir="${pbuild}"> <classpath path="${plib}"> <fileset dir="${plib}"> <include name="*.jar"/> </fileset> </classpath> </javac> </target> <target name="build" depends="compile" description="make war"> <war warfile="f-${DSTAMP}.war" webxml="WEB-INF/web.xml"> <fileset dir="."> <!-- include all JSPs in root level --> <include name="*.jsp"/> <include name="*.xml"/> </fileset> <lib dir="WEB-INF/lib"> <include name="*.jar"/> </lib> <!-- include all tag libraries in WEB-INF, but not web.xml (that's handled separately) --> <webinf dir="WEB-INF/"> <include name="*.tld"/> </webinf> <classes dir="./WEB-INF/classes"/> </war> </target> </project>

II. JDBC

String query = "SELECT T_NAME, PRICE FROM TOFFEES"; 
ResultSet rs = stmt.executeQuery(query);

while (rs.next()) 
{
  String s = rs.getString("T_NAME");
  float n = rs.getFloat("PRICE");
  System.out.println(s + " " + n);
  String s = rs.getString | getInt (1); // usg col index, 1 = 1st col
  float n = rs.getFloat(2);

}

while (oResultSet.next())
{
	oVector.addElement( oResultSet.getLong("task_type_id"));
   v.add(r.getString("name"));
...
}

 List list = new ArrayList ();
 while (rs.next ()) {
  list.add (report);
 }

...
  ArrayList arrayList = new ArrayList();
  while (resultSet.next()) {
     String isbn = resultSet.getString(1);
     arrayList.add(isbn);
  }

  preparedStatement.close();
  return arrayList;

...
   int colType = rs.getColumnType(1);
correspond to sql data types:
 -7    BIT
 -6    TINYINT
 -5    BIGINT
 -4    LONGVARBINARY
 -3    VARBINARY
 -2    BINARY
 -1    LONGVARCHAR
  0     NULL
  1     CHAR
  2     NUMERIC
  3     DECIMAL
  4     INTEGER
  5     SMALLINT
  6     FLOAT
  7     REAL
  8     DOUBLE
  12    VARCHAR
  91    DATE
  92    TIME
  93    TIMESTAMP
  1111  OTHER

...
  ResultSetMetaData oResultSetMetaData = oResultSet.getMetaData();
  int numCols = oResultSetMetaData.getColumnCount();



"jdbc:oracle:thin" - "thin driver" as it doesn't require Oracle native libs to be installed on clt jdbc:oracle:thin:@192.255.132.46:1521:orcl

ResultSets

for (int i = 0; rs.next(); i++)
   {
  	selectedCheckBoxes[i] = rs.getString(1);	
   }



Scrollable ResultSets


 try {
     conn = checkAndOpenTransaction(this);
     stmt = conn.createStatement();
     rs = stmt.executeQuery(selectProcessorSQL);
     while (rs.next()) {
         ProcessorLogDTO dto = new ProcessorLogDTO();
         dto.setName(rs.getString(PRTSConstants.NAME));
     	}... 
    checkAndCommitTransaction();
    }
    finally {
                   DBUtil.cleanUp(conn, ps, rs);
                   checkAndCloseTransaction();
     }

... Obtaining Size of Scrollable ResultSet
			rs = ps.executeQuery();
			// goto last row 
			rs.last();
			// obtain row position which is also number of rows in the result set.
			int numberRows = rs.getRow();
			PRTSLogger.log(
								className,
								PRTSConstants.LOG_DEBUG,
								"size of resultset = " + numberRows);
			
			selectedCheckBoxes = new String[numberRows];
			// reposition at beginning of resultset
			rs.beforeFirst();

stmt = conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_READ_ONLY);
ps = conn.prepareStatement( oString_sql, ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_READ_ONLY);
ps.setLong(1, Long.parseLong(requestServiceID) ); 
	// requestServiceID query string .prtsdo?requestServiceID=5 + get/set in ActionForm + optnal hidden var)
rs = ps.executeQuery();
rs.last(); 		// goto last line
int i_nurows = rs.getRow(); // obtain row position which is also number of rows in the result set.
String[] oStringArray = new String[i_nurows];
rs.beforeFirst(); // reposition at beginning of resultset

for (int i = 0; rs.next(); i++)
{ 	oStringArray[i] = rs.getString(1);	}
		    
PreparedStatement
- execute  | executeQuery | executeUpdate = any kind of sql | return ResultSset | insert/update/delete

- oConnection = checkAndOpenTransaction(this); // XA transactn, must be immediately before ps line
  PreparedStatement ps = oConnection.prepareStatement(sql);


		Connection conn = null;
		PreparedStatement ps = null;
		Statement stmt = null;
		ResultSet rs = null;
		try {
			conn = checkAndOpenTransaction(this);
					
			ps = conn.prepareStatement(insertProcessorSQL);
			ps.setString(NAME,procname);
			PRTSLogger.log(className,PRTSConstants.LOG_DEBUG,"MSG: ## added procname" );	
			ps.setLong(CUMULATIVE_HOURS,cumulative_hours);

			int rowsChanged = ps.executeUpdate(); 
			checkAndCommitTransaction();
		}
		catch(SQLException) ... 
org.postgresql.jdbc2.PreparedStatement ps2 = (org.postgresql.jdbc2.PreparedStatement) ps;
Sop(ps2.toString() );


SQL errors

- ORA-00001: unique constraint (PATH_DEV.PK_EM_TASK_DET_ID) violated: 
  col_seq.nextval | currval  already exists in the table.

- ORA-01006: bind variable does not exist -> 
  in preparedstmt
  remove single quotes from query while convertg from sql stmt to preparedstmt

- error: 'pg cannot be displayed' + app not available before login --> 
eclipse compile error, stop sun one, recompile (as src/* cp'd to classes/, 
in turn used + locked by sun one)


TOAD 

- Extracting sql from gui insert: 
Tables > r(TABLE) > Export Data > Options : Destination = To File & 
Filename = _ ; 
then replace TO_Date(...) with sysdate.


PL-SQL

select * from tab;
select * from table order by col; | order by col DESC; 

INSERT INTO PTH_REQUEST_SERVICE 
( REQUEST_SERVICE_ID, REQUEST_ID, SERVICE_TYPE_ID, INSTRUCTIONS, 
INSERT_USER, INSERT_DATE, UPDATE_USER, UPDATE_DATE, STATUS_ID, HAS_INSTRUCTION_CHANGED ) 
VALUES ( 901, 2, 1, 'new instructions', 1,  sysdate, 1,  sysdate, 1, NULL); 


select a.col1, b.col2 from table1 a, table2 b 
 where a.col1 = b.col1 
 and a.col3 = b.col3
 and a.col4 = 'ostring';
commit; (if sql+)

Scrollable ResultSets

stmt = conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_READ_ONLY);
prts method signature method skeleton

	public ClinPathDTO get(long clinPathId) throws ApplicationException
	{ 
		PreparedStatement ps = null;
		ResultSet rs = null;

		ClinPathDTO clinPathDTO = new ClinPathDTO();
		
		try
		{
			Connection conn = checkAndOpenTransaction(this);
			ps = conn.prepareStatement(insertClinPathSQL);
			... 
			checkAndCommitTransaction();
		}
		catch(SQLException sqle)
		{
			rollbackTransaction();
			throw new DataAccessException(sqle,0,"An error occured while accessing db");
		}
		catch(ApplicationException ae)
		{
			rollbackTransaction();
			throw new ApplicationException(ae,0,"An error occured in the get method");
		}
		finally
		{
			DBUtil.cleanUp(ps,rs);
			checkAndCloseTransaction();
		}
		return clinPathDTO;		

	}


JavaDoc

package ...
/**
 * MyClass displays a square garden field using  Graphics .
 *
 * @author		Samar Abbas
 * @version	 	%I%, %G%
 * @param mapping	the ActionMapping used to select this instance
 * @param form		the optional ActionForm bean for this request (if any)
 * @return		the ActionForward for the next view
 * @exception		{= @throws} an exception
 * @see			ProcessorLogController
 * @see			"A Java Book"
 */


II. Collections

a. Arrays (Array Lists, String Arrays)


Cloneable
cloning: 

for(int i = 0; i < oArrayList.size(); i++)
{
System.out.println( oArrayList.get(i) );
}
for(int i = 0; i < oStringArray.length; i++)
{
 System.out.println( oStringArray[i] );

}

Strings

if ((s == null) || (s.equalsIgnoreCase("null")) || (s.trim().length() == 0))
{ ... }

dont use s == ""


1.
usg java.util.AbstractSet class.

 AbstractSet setA = new AbstractSet();		// error by samar! dec. 30/03
 setA.addAll(Arrays.asList(arrayA)); // string array A
 AbstractSet setB = new AbstractSet();
 setB.addAll(Arrays.asList(arrayB)); // string array B
 setA.removeAll(setB);
 String[] cleanedA = setA.toArray(new String[]{});

     In Reply To: Re: Difference of two int arrays, help please!
    public static void oppositeIntersection(int[] arr1, int[] arr2)
    {
      for(int i = 0; i < arr1.length; ++i)
      {
        boolean foundIt = false;
        for(int j = 0; j < arr2.length; ++j)
        {
           if(arr1[i] == arr2[j])
           {
             foundIt = true;
             break;
           }
        }
        if(foundIt)
          System.out.println(arr1[i] + " exists in both arrays");
       }
    }
..
    for (int x=0; x

a.

Obfuscation

mocha decompiler, crema obfuscator http://www.brouhaha.com/~eric/computers/mocha.html http://www.zelix.com/klassmaster http://www.mochasoft.dk/ http://www.e-t.com/jshrink.html http://www.sbktech.org/hashjava.html

References