|
Prerequisites:
Jdeveloper
version 3.2.3 ( Build 1018 )
- JBO 3.2.3.995
- COMMON 3.2.3.323
- OJVM 1.2.351
- Oracle Database 8.17
Assumption:
Installed oracle database and configured oracle network.
Attendees:
Java
developer, BC4J developer (beginner)
Purpose:
To create simple java client program for learning and testing
application module
Step-by-Step
Example:
This
article we will show you a simple java application program that
interact with Oracle BC4J in local mode. We will describe by the
following details.
0.
Creating connection with local mode by am.getTransaction().connect()
1.
Retrieve Data
1.1.
Retrieve all data by getAllRowsInRange()
1.2.
Retrieve a row by findByKey
2.
DML and control transaction
2.1
Insert a new record by createRow()
2.2
Update current row by setAttribute()
2.3
Remove current row by remove()
2.4
Commit transaction by am_Member.getTransaction().commit()
3.
Setting WHERE condition
3.1
Setting static WHERE cause and condition
by setWhereClause("MEM_ID
= " + somevalue)
3.2
Unsetting WHERE cause by setWhereClause("")
3.3
Setting WHERE cause, condition and parameter online
by setWhereClauseParam()
or setWhereClauseParams()
4.
Disconnect by am.getTransaction().disconnect()
0.
Creating connection with local mode by am.getTransaction().connect()
|
Hashtable
env = new Hashtable(2);
String
jdbcURL = "jdbc:oracle:thin:skull/vertigo@localhost:1521:fuju";
env.put(Context.INITIAL_CONTEXT_FACTORY, JboContext.JBO_CONTEXT_FACTORY);
env.put(JboContext.DEPLOY_PLATFORM, JboContext.PLATFORM_LOCAL);
// Create an JNDI initial context
Context ic = new InitialContext(env);
// Lookup a home interface (factory) for the AppModule by
name
ApplicationModuleHome home =(ApplicationModuleHome)ic.lookup(amDefName);
// Create an instance of the AppModule using the home/factory
am = home.create();
// Connect the application module to the database
am.getTransaction().connect(jdbcConnStr);
|
1.
Retrieve Data
1.1
Retrieve all data by getAllRowsInRange()
|
vo_Member.setRangeSize(-1);
vo_Member.first();
rows = vo_Member.getAllRowsInRange();
show(" MemberView Data ");
for(int i=0; i< rows.length;i++)
{
// MemID,MemFirstname,MemLastname,MemEmail,MemTimestamp
show("--->MemberVeiw Data");
show("=================");
show("MemberView:MemID: " + rows[i].getAttribute("MemId"));
show("MemberView:MemFirstname: " + rows[i].getAttribute("MemFirstname")
);
show("MemberView:MemLastname: " + rows[i].getAttribute("MemLastname")
);
show("MemberView:MemEmail: " + rows[i].getAttribute("MemEmail")
);
show("MemberView:MemTimestamp: " + rows[i].getAttribute("MemTimestamp")
);
}
|
1.2
Retrieve a row by findByKey
|
// We'll
try to find Member id 13
String keyValue = "13";
// Construct a Key object for Customer 205
Key k = new Key(new Object[] { keyValue });
// Find a Row by its Key
rows = vo_Member.findByKey(k,1);
if(rows.length == 0 ){
show("Member Key not
found. ");
}else{
show("--->Member details
for : ");
show("=================");
show("MemberView:MemID: " + rows[0].getAttribute("MemId"));
show("MemberView:MemFirstname:
" + rows[0].getAttribute("MemFirstname")
);
show("MemberView:MemLastname:
" + rows[0].getAttribute("MemLastname") );
show("MemberView:MemEmail:
" + rows[0].getAttribute("MemEmail") );
show("MemberView:MemTimestamp:
" + rows[0].getAttribute("MemTimestamp")
);
}
|
2.
DML and control transaction
2.1
Insert a new record by createRow()
|
Row r
= vo_MemberDml.createRow();
// MemID,MemFirstname,MemLastname,MemEmail,MemTimestamp
// MemID is created in create method of Entity objcet
// and get number from sequence
r.setAttribute("MemFirstname","Bruce");
r.setAttribute("MemLastname","Archer");
r.setAttribute("MemEmail","archer@exzilla.net");
// MemTimestamp
is created in create method
vo_MemberDml.insertRow(r);
am_Member.getTransaction().commit();
|
2.2
Update current row by setAttribute()
In
this sample I use findByKey function for pointing that record
that I just added in last step.
|
String
bannerKeyValue=r.getAttribute("MemId").toString();
Key
memberK = new Key(new Object[] { bannerKeyValue } );
Row[]
memberFound = vo_MemberDml.findByKey(memberK,1);
if(memberFound.length
== 0 ){
show(" No! Member found ");
}else{
show("Hi
member " + memberFound[0].getAttribute("MemEmail").toString()
);
memberFound[0].setAttribute("MemEmail","archer@khwai.com");
}
|
2.3
Remove current row by remove()
Delete
last current record that we updated.We can do that because the
pointer still point that record.
2.4
Commit transaction by am_Member.getTransaction().commit()
|
am_Member.getTransaction().commit();
|
3.
Setting WHERE condition
3.1
Setting static WHERE cause and condition by setWhereClause("MEM_ID
= " + somevalue)
|
String
memberRowindex="12";
// we must use column name in where condition.
vo_Member.getViewObject().setWhereClause("MEM_ID =
" + memberRowindex );
vo_Member.executeQuery();
vo_Member.first();
rows
= vo_Member.getAllRowsInRange();
show("--->MemberView Data with where MEM_ID
");
for(int
i=0; i< rows.length;i++)
{
show("Member email " + rows[i].getAttribute("MemEmail"));
}
|
3.2
Unsetting WHERE cause by setWhereClause("")
|
vo_Member.getViewObject().setWhereClause("");
vo_Member.executeQuery();
vo_Member.first();
rows = vo_Member.getAllRowsInRange();
// For testing we can get all data.
show("--->MemberView Data with where MEM_ID
");
for(int i=0; i< rows.length;i++)
{
show("Member email :: "
+ rows[i].getAttribute("MemEmail"));
}
|
3.3
Setting WHERE cause, condition and parameter online by setWhereClauseParam()
or setWhereClauseParams()
First
way using setWhereClauseParam()
|
memberRowindex="14";
// We must use column name in where condition with oracle
style
vo_Member.setWhereClause("MEM_ID = :1 ");
try{
//3.3.1 First way using setWhereClauseParam
vo_Member.setWhereClauseParam(0,new oracle.jbo.domain.Number(memberRowindex));
}
catch(java.sql.SQLException ex) {
throw new RuntimeException(ex.getMessage());
}
vo_Member.executeQuery();
vo_Member.first();
rows = vo_Member.getAllRowsInRange();
show("--->MemberView
Data with where MEM_ID ");
for(int
i=0; i< rows.length;i++)
{
show("Member email " + rows[i].getAttribute("MemEmail"));
}
|
Second
way using setWhereClauseParams()
|
memberRowindex="14";
// we
must use column name in where condition with oracle style
vo_Member.setWhereClause("MEM_ID = :1 ");
try{
// 3.3.2 Second way using setWhereClauseParams
Object[] params =
new Object[]
{ new oracle.jbo.domain.Number(memberRowindex) };
vo_Member.setWhereClauseParams(params);
} catch(java.sql.SQLException ex){
throw new RuntimeException(ex.getMessage());
}
vo_Member.executeQuery();
vo_Member.first();
rows = vo_Member.getAllRowsInRange();
show("--->MemberView
Data with where MEM_ID ");
for(int
i=0; i< rows.length;i++)
{
show("Member email " + rows[i].getAttribute("MemEmail"));
}
|
4.
Disconnect
by
am.getTransaction().disconnect()
|
// Disconnect
the application module
am_Member.getTransaction().disconnect();
|
Note:
After set WHERE condition and parameter for VO. I've still got problems
, I could't unset the WHERE condition.They still ask me bind variable.
If anyone know, please let me know :)
Complete Sample code:
- Database objects
creation script
- Completed source code project
(Jdev323)
- Completed source code
project (Jdev903)
References:
- http://otn.oracle.com/products/jdev/content.html
More
Information:
- http://otn.oracle.com/products/jdev/content.html
Keywords:
bc4j
findByKey setWhereClause getAllRowsInRange getAttribute setAttribute
setWhereClauseParam getTransaction
|