Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xv
Part I
J2ME Basics
1 J2ME Overview . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3
Java 2 Micro Edition and the World of Java . . . . . . . . . . . . . . . . . . . . 4
Enter Java . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
Java Virtual Machine . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6
J2EE and J2SE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6
The Birth of J2EE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
Back to the Future: J2ME . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
Inside J2ME . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
How J2ME Is Organized . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12
J2ME and Wireless Devices . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14
What J2ME Isn’t . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15
Other Java Platforms for Small Computing Devices . . . . . . . . . . . . 16
2 Small Computing Technology . . . . . . . . . . . . . . . . . . . . . 17
Wireless Technology . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18
Radio Transmission . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20
Limitations of Radio Transmissions . . . . . . . . . . . . . . . . . . . 20
Radio Data Networks . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22
Data Packets . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23
Microwave Technology . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24
Satellite Networks . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24
Mobile Radio Networks . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25
Cellular Telephone Networks . . . . . . . . . . . . . . . . . . . . . . . . 26
Digital Wireless Transmissions . . . . . . . . . . . . . . . . . . . . . . . 28
Cell Phones and Text Input . . . . . . . . . . . . . . . . . . . . . . . . . . 28
Messaging . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29
Personal Digital Assistants . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30
Mobile Power . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31
Set-Top Boxes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32
Inside Look at a Set-Top Box . . . . . . . . . . . . . . . . . . . . . . . . . 33
Smart Cards . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34
3 J2ME Architecture and Development Environment . . . 35
J2ME Architecture . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36
Small Computing Device Requirements . . . . . . . . . . . . . . . . . . . . . . 37
Run-Time Environment . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37
Inside the Java Archive File . . . . . . . . . . . . . . . . . . . . . . . . . . 38
Inside the Java Application Descriptor File . . . . . . . . . . . . . 40
MIDlet Programming . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42
Event Handling . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43
User Interfaces . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 44
Device Data . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 44
Java Language for J2ME . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 45
J2ME Software Development Kits . . . . . . . . . . . . . . . . . . . . . . . . . . . . 48
Hello World J2ME Style . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 50
Compiling Hello World . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 53
Running Hello World . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 54
Deploying Hello World . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 54
What to Do When Your MIDlet Doesn’t
Work Properly . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 56
Multiple MIDlets in a MIDlet Suite . . . . . . . . . . . . . . . . . . . . . . . . . . . 57
J2ME Wireless Toolkit . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 60
Building and Running a Project . . . . . . . . . . . . . . . . . . . . . . 61
Hello World Project . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 64
MIDlets on the Internet . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 67
J2ME Best Practices and Patterns . . . . . . . . . . . . . . . . . . . 71
The Reality of Working in a J2ME World . . . . . . . . . . . . . . . . . . . . . . 72
Best Practices . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 73
Keep Applications Simple . . . . . . . . . . . . . . . . . . . . . . . . . . . 73
Keep Applications Small . . . . . . . . . . . . . . . . . . . . . . . . . . . . 74
Limit the Use of Memory . . . . . . . . . . . . . . . . . . . . . . . . . . . . 75
Off-Load Computations to the Server . . . . . . . . . . . . . . . . . 76
Manage Your Application’s Use of a
Network Connection . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 77
Simplify the User Interface . . . . . . . . . . . . . . . . . . . . . . . . . . . 79
Use Local Variables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 81
Don’t Concatenate Strings . . . . . . . . . . . . . . . . . . . . . . . . . . . 81
Avoid Synchronization . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 82
Thread Group Class Workaround . . . . . . . . . . . . . . . . . . . . . 83
Upload Code from the Web Server . . . . . . . . . . . . . . . . . . . . 83
Reading Settings from JAD Files . . . . . . . . . . . . . . . . . . . . . . 84
Populating Drop-down Boxes . . . . . . . . . . . . . . . . . . . . . . . . 85
Minimize Network Traffic . . . . . . . . . . . . . . . . . . . . . . . . . . . 86
Dealing with Time . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 86
Automatic Data Synchronization . . . . . . . . . . . . . . . . . . . . . 88
Updating Data that Has Changed . . . . . . . . . . . . . . . . . . . . . 89
Be Careful of the Content of the startApp() Method . . . . . 90
Part II
J2ME User Interface
5 Commands, Items, and Event Processing . . . . . . . . . . . . 95
J2ME User Interfaces . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 96
Display Class . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 96
The Palm OS Emulator . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 102
Command Class . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 103
CommandListener . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 105
Item Class . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 111
Item Listener . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 114
Exception Handling . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 118
Throwing a MIDletStateChangeException . . . . . . . . . . . . . 120
Quick Reference Guide . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 125
6 High-Level Display: Screens . . . . . . . . . . . . . . . . . . . . . . . 129
Screen Class . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 130
Alert Class . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 131
Alert Sound . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 138
Form Class . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 139
Item Class . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 143
ChoiceGroup Class . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 144
DateField Class . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 154
Gauge Class . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 158
StringItem Class . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 166
TextField Class . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 170
ImageItem Class . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 178
List Class . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 182
Creating an Instance of a List Class . . . . . . . . . . . . . . . . . . . 184
TextBox Class . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 194
Creating an Instance of a TextBox Class . . . . . . . . . . . . . . . . 195
Ticker Class . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 199
Quick Reference Guide . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 203
7 Low-Level Display: Canvas . . . . . . . . . . . . . . . . . . . . . . . 213
The Canvas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 214
The Layout of a Canvas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 215
Proportional Coordinates . . . . . . . . . . . . . . . . . . . . . . . . . . . . 216
The Pen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 217
Painting . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 217
showNotify() and hideNotify() . . . . . . . . . . . . . . . . . . . . . . . 219
User Interactions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 219
Working with Key Codes . . . . . . . . . . . . . . . . . . . . . . . . . . . . 220
Working with Game Actions . . . . . . . . . . . . . . . . . . . . . . . . . 227
Working with Pointer Devices . . . . . . . . . . . . . . . . . . . . . . . . 233
Graphics . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 239
Stroke Style and Color . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 240
Lines . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 243
Rectangles . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 243
Arcs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 250
Text . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 257
Images . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 266
Repositioning Text and Images . . . . . . . . . . . . . . . . . . . . . . . 274
Clipping Regions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 279
Creating a Clipping Region . . . . . . . . . . . . . . . . . . . . . . . . . . 280
Animation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 284
Quick Reference Guide . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 286
Part III
J2ME Data Management
8 Record Management System . . . . . . . . . . . . . . . . . . . . . . 295
Record Storage . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 296
The Record Store . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 296
Record Store Scope . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 297
Setting Up a Record Store . . . . . . . . . . . . . . . . . . . . . . . . . . . . 298
Writing and Reading Records . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 302
Creating a New Record and Reading an
Existing Record . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 303
Writing and Reading Mixed Data Types . . . . . . . . . . . . . . . 309
Record Enumeration . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 316
Reading a Record of a Simple Data Type
into a RecordEnumeration . . . . . . . . . . . . . . . . . . . . . . . . . 319
Reading a Mixed Data Type Record into a
RecordEnumeration . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 324
Sorting Records . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 330
Sorting Single Data Type Records in a
RecordEnumeration . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 332
Sorting Mixed Data Type Records in a
RecordEnumeration . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 337
Searching Records . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 345
Searching Single Data Type Records . . . . . . . . . . . . . . . . . . 345
Searching Mixed Data Type Records . . . . . . . . . . . . . . . . . . 352
RecordListener . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 359
Quick Reference Guide . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 360
9 J2ME Database Concepts . . . . . . . . . . . . . . . . . . . . . . . . . . 365
Data . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 366
Databases . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 367
Tables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 367
Database Schema . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 368
Identifying Information . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 369
Decomposing Attributes to Data . . . . . . . . . . . . . . . . . . . . . . 372
Defining Data . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 375
Normalizing Data . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 377
Grouping Data . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 378
Creating Primary Keys . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 380
Functional Dependency . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 382
Transitive Dependencies . . . . . . . . . . . . . . . . . . . . . . . . . . . . 382
Foreign Keys . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 383
Referential Integrity . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 384
The Art of Indexing . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 385
An Index in Motion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 386
Drawbacks of Using an Index . . . . . . . . . . . . . . . . . . . . . . . . 386
Clustered Keys . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 387
Derived Keys . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 388
Selective Rows . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 388
Exact Matches and Partial Matches . . . . . . . . . . . . . . . . . . . . 389
Searching for Phonetic Matches . . . . . . . . . . . . . . . . . . . . . . 389
10 JDBC Objects . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 391
The Concept of JDBC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 392
JDBC Driver Types . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 393
Type 1 JDBC to ODBC Driver . . . . . . . . . . . . . . . . . . . . . . . . 393
Type 2 Java/Native Code Driver . . . . . . . . . . . . . . . . . . . . . 394
Type 3 JDBC Driver . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 394
Type 4 JDBC Driver . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 394
JDBC Packages . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 394
Overview of the JDBC Process . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 394
Load the JDBC Driver . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 395
Connect to the DBMS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 395
Create and Execute an SQL Statement . . . . . . . . . . . . . . . . . 395
Process Data Returned by the DBMS . . . . . . . . . . . . . . . . . . 396
Terminate the Connection to the DBMS . . . . . . . . . . . . . . . . 397
Database Connection . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 398
The Connection . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 398
Timeout . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 401
Connection Pool . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 402
Statement Objects . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 403
The Statement Object . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 403
PreparedStatement Object . . . . . . . . . . . . . . . . . . . . . . . . . . . 406
CallableStatement . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 407
ResultSet . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 409
Reading the ResultSet . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 410
Scrollable ResultSet . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 411
Specify Number of Rows to Return . . . . . . . . . . . . . . . . . . . 414
Updatable ResultSet . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 415
Transaction Processing . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 419
Savepoints . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 421
Batch Statements . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 422
Keeping ResultSet Objects Open . . . . . . . . . . . . . . . . . . . . . . 424
RowSet . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 424
Autogenerated Keys . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 426
Metadata . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 426
ResultSet Metadata . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 426
Data Types . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 427
Exceptions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 428
Quick Reference Guide . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 429
11 JDBC and Embedded SQL . . . . . . . . . . . . . . . . . . . . . . . . 453
Model Programs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 454
Model A Program . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 455
Model B Program . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 457
Tables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 460
Create a Table . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 460
Drop a Table . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 462
Indexing . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 463
Create an Index . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 463
Drop an Index . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 465
Inserting Data into Tables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 465
Insert a Row . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 466
Insert the System Date into a Column . . . . . . . . . . . . . . . . . 466
Insert the System Time into a Column . . . . . . . . . . . . . . . . . 467
Insert a Timestamp into a Column . . . . . . . . . . . . . . . . . . . . 467
Selecting Data from a Table . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 468
Select All Data from a Table . . . . . . . . . . . . . . . . . . . . . . . . . . 469
Request One Column . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 470
Request Multiple Columns . . . . . . . . . . . . . . . . . . . . . . . . . . 471
Request Rows . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 472
Request Rows and Columns . . . . . . . . . . . . . . . . . . . . . . . . . 472
AND, OR, and NOT Clauses . . . . . . . . . . . . . . . . . . . . . . . . . 473
Join Multiple Compound Expressions . . . . . . . . . . . . . . . . . 474
Equal and Not Equal Operators . . . . . . . . . . . . . . . . . . . . . . 475
Less Than and Greater Than Operators . . . . . . . . . . . . . . . . 477
Less Than or Equal to and Greater Than or Equal To . . . . 478
Between Operator . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 479
LIKE Operator . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 480
IS NULL Operator . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 480
DISTINCT Modifier . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 481
IN Modifier . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 482
Metadata . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 483
Number of Columns in ResultSet . . . . . . . . . . . . . . . . . . . . . 483
Data Type of Column . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 484
Name of Column . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 484
Column Size . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 484
Updating Tables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 485
Update Row and Column . . . . . . . . . . . . . . . . . . . . . . . . . . . 485
Update Multiple Rows . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 486
Deleting Data from a Table . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 490
Delete a Row from a Table . . . . . . . . . . . . . . . . . . . . . . . . . . . 490
Joining Tables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 491
Join Two Tables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 494
Parent-Child Join . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 495
Multiple Comparison Join . . . . . . . . . . . . . . . . . . . . . . . . . . . 496
Multitable Join . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 497
Create a Column Name Qualifier . . . . . . . . . . . . . . . . . . . . . 498
Create a Table Alias . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 499
Inner and Outer Joins . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 500
Calculating Data . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 504
SUM() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 506
AVG() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 507
MIN() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 507
MAX() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 508
COUNT() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 508
Count All Rows in a Table . . . . . . . . . . . . . . . . . . . . . . . . . . . 509
Retrieve Multiple Counts . . . . . . . . . . . . . . . . . . . . . . . . . . . . 509
Calculate a Subset of Rows . . . . . . . . . . . . . . . . . . . . . . . . . . 510
NULLs and Duplicates . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 511
Calculate Without Using Built-in Functions . . . . . . . . . . . . 511
Grouping and Ordering Data . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 512
GROUP BY . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 513
Group Multiple Columns . . . . . . . . . . . . . . . . . . . . . . . . . . . . 514
Conditional Grouping . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 515
Working with NULL Columns . . . . . . . . . . . . . . . . . . . . . . . 516
Sorting Data . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 516
Sorting on Derived Data . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 518
Subqueries . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 519
Create a Subquery . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 520
Conditional Testing . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 521
VIEWs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 525
Rules for Using VIEWs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 525
Create a VIEW . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 527
Select Columns to Appear in the VIEW . . . . . . . . . . . . . . . . 528
Create a Horizontal VIEW . . . . . . . . . . . . . . . . . . . . . . . . . . . 528
Create a Multitable VIEW . . . . . . . . . . . . . . . . . . . . . . . . . . . . 529
Group and Sort VIEWs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 529
Modify a VIEW . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 530
Part IV
J2ME Personal Information Manager Profile
12 Personal Information Manager . . . . . . . . . . . . . . . . . . . . 535
PIM Databases . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 536
The Contact Database . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 538
The Event Database . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 539
The To Do Database . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 540
Error Handling . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 541
A Model PIM Application . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 541
Quick Reference Guide . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 557
Part V
J2ME Networking and Web Services
13 Generic Connection Framework . . . . . . . . . . . . . . . . . . . 575
The Connection . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 576
Connection and Streams . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 577
Hypertext Transfer Protocol . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 580
Creating an HTTP Connection . . . . . . . . . . . . . . . . . . . . . . . . 580
Reading Data from an HTTP Connection . . . . . . . . . . . . . . 582
The File Protocol . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 589
Socket . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 592
Communication Management Using HTTP Commands . . . . . . . . . 597
HttpConnection . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 598
Session Management . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 608
Cookies . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 610
Transmit as a Background Process . . . . . . . . . . . . . . . . . . . . . . . . . . . 610
Quick Reference Guide . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 614
14 Web Services . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 617
Web Services Basics . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 618
The Tier . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 618
Clients, Resources, and Components . . . . . . . . . . . . . . . . . . 620
Accessing Services . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 621
J2EE Multi-Tier Web Services Architecture . . . . . . . . . . . . . . . . . . . . 621
Client Tier Implementation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 624
Classification of Clients . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 624
Web Tier Implementation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 625
Enterprise JavaBeans Tier Implementation . . . . . . . . . . . . . . . . . . . . 626
Enterprise Information Systems Tier Implementation . . . . . . . . . . . 627
Inside WSDL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 629
The WSDL Document . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 629
Types Element . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 632
Message Element . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 632
portType Element . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 633
Binding Element . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 634
Port Element . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 635
Service Element . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 635
J2ME MIDlets and Web Services . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 636
JAX-RPC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 637
Holder Classes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 637
Remote Method Invocation Concept . . . . . . . . . . . . . . . . . . . . . . . . . 639
Remote Interface . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 639
SOAP Basics . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 639
SOAP Functionality . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 640
The SOAP Message and Delivery Structure . . . . . . . . . . . . 640
WSDL and SOAP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 641
SOAP One-Way Transmission Primitive . . . . . . . . . . . . . . . 642
SOAP Request-Response Transmission Primitive . . . . . . . 643
SOAP Binding Element . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 645
SOAP Operation Element . . . . . . . . . . . . . . . . . . . . . . . . . . . . 645
SOAP Body Element . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 646
SOAP Fault Element . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 646
SOAP Header Element . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 646
SOAP Address Element . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 647
WSDL and HTTP Binding . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 647
Quick Reference Guide . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 649
Appendix: Quick Reference Guide . . . . . . . . . . . . . . . . . 653
Index . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 721
Download
No comments:
Post a Comment