ibm-information-center/dist/eclipse/plugins/i5OS.ic.rzaha_5.4.0.1/jniex.htm

496 lines
33 KiB
HTML
Raw Permalink Normal View History

2024-04-02 14:02:31 +00:00
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html
PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html lang="en-us" xml:lang="en-us">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<meta name="security" content="public" />
<meta name="Robots" content="index,follow" />
<meta http-equiv="PICS-Label" content='(PICS-1.1 "http://www.icra.org/ratingsv02.html" l gen true r (cz 1 lz 1 nz 1 oz 1 vz 1) "http://www.rsac.org/ratingsv01.html" l gen true r (n 0 s 0 v 0 l 0) "http://www.classify.org/safesurf/" l gen true r (SS~~000 1))' />
<meta name="DC.Type" content="reference" />
<meta name="DC.Title" content="Examples: Use the Java Native Interface for native methods" />
<meta name="abstract" content="This example program is a simple Java Native Interface (JNI) example in which a C native method is used to display &#34;Hello, World.&#34; Use the javah tool with the NativeHello class file to generate the NativeHello.h file. This example assumes that the NativeHello C implementation is part of a service program that is called NATHELLO." />
<meta name="description" content="This example program is a simple Java Native Interface (JNI) example in which a C native method is used to display &#34;Hello, World.&#34; Use the javah tool with the NativeHello class file to generate the NativeHello.h file. This example assumes that the NativeHello C implementation is part of a service program that is called NATHELLO." />
<meta name="DC.Relation" scheme="URI" content="codedisclaimer.htm" />
<meta name="DC.Relation" scheme="URI" content="codedisclaimer.htm" />
<meta name="DC.Relation" scheme="URI" content="literal.htm" />
<meta name="DC.Relation" scheme="URI" content="codedisclaimer.htm" />
<meta name="DC.Relation" scheme="URI" content="jni.htm" />
<meta name="DC.Relation" scheme="URI" content="codeex.htm" />
<meta name="DC.Relation" scheme="URI" content="intdatex.htm" />
<meta name="DC.Relation" scheme="URI" content="intnumex.htm" />
<meta name="DC.Relation" scheme="URI" content="intlocex.htm" />
<meta name="DC.Relation" scheme="URI" content="accesspropertytest.htm" />
<meta name="DC.Relation" scheme="URI" content="putgetblobs.htm" />
<meta name="DC.Relation" scheme="URI" content="callex.htm" />
<meta name="DC.Relation" scheme="URI" content="usingpositioneddelete.htm" />
<meta name="DC.Relation" scheme="URI" content="putgetclobs.htm" />
<meta name="DC.Relation" scheme="URI" content="udbdatasourcebind.htm" />
<meta name="DC.Relation" scheme="URI" content="udbdatasourceuse2.htm" />
<meta name="DC.Relation" scheme="URI" content="udbdatasourcebind2.htm" />
<meta name="DC.Relation" scheme="URI" content="dataex.htm" />
<meta name="DC.Relation" scheme="URI" content="udbdatasourcebind.htm" />
<meta name="DC.Relation" scheme="URI" content="putgetdatalinks.htm" />
<meta name="DC.Relation" scheme="URI" content="distinct.htm" />
<meta name="DC.Relation" scheme="URI" content="sqljex.htm" />
<meta name="DC.Relation" scheme="URI" content="jtatxend.htm" />
<meta name="DC.Relation" scheme="URI" content="invalidconnect.htm" />
<meta name="DC.Relation" scheme="URI" content="basicjdbc.htm" />
<meta name="DC.Relation" scheme="URI" content="jtamulticonn.htm" />
<meta name="DC.Relation" scheme="URI" content="udbdatasourceuse.htm" />
<meta name="DC.Relation" scheme="URI" content="pmd.htm" />
<meta name="DC.Relation" scheme="URI" content="usingpositionedupdate.htm" />
<meta name="DC.Relation" scheme="URI" content="resultex.htm" />
<meta name="DC.Relation" scheme="URI" content="sensitive2.htm" />
<meta name="DC.Relation" scheme="URI" content="sensitive.htm" />
<meta name="DC.Relation" scheme="URI" content="connectionpoolingsetup.htm" />
<meta name="DC.Relation" scheme="URI" content="exceptionexample.htm" />
<meta name="DC.Relation" scheme="URI" content="jtatxsuspend.htm" />
<meta name="DC.Relation" scheme="URI" content="jtatxeffect.htm" />
<meta name="DC.Relation" scheme="URI" content="connectionpoolingtest.htm" />
<meta name="DC.Relation" scheme="URI" content="statementpoolingtest.htm" />
<meta name="DC.Relation" scheme="URI" content="updateblobs.htm" />
<meta name="DC.Relation" scheme="URI" content="updateclobs.htm" />
<meta name="DC.Relation" scheme="URI" content="jtamultitx.htm" />
<meta name="DC.Relation" scheme="URI" content="useblobs.htm" />
<meta name="DC.Relation" scheme="URI" content="useclobs.htm" />
<meta name="DC.Relation" scheme="URI" content="jtacommit.htm" />
<meta name="DC.Relation" scheme="URI" content="safegetudts.htm" />
<meta name="DC.Relation" scheme="URI" content="getconnections.htm" />
<meta name="DC.Relation" scheme="URI" content="prepex.htm" />
<meta name="DC.Relation" scheme="URI" content="crdb2cac.htm" />
<meta name="DC.Relation" scheme="URI" content="stateex.htm" />
<meta name="DC.Relation" scheme="URI" content="jaaswrld.htm" />
<meta name="DC.Relation" scheme="URI" content="sampthrd.htm" />
<meta name="DC.Relation" scheme="URI" content="rzahajgsssrcl.htm" />
<meta name="DC.Relation" scheme="URI" content="rzahajgsssrsr.htm" />
<meta name="DC.Relation" scheme="URI" content="rzahajgssjacl.htm" />
<meta name="DC.Relation" scheme="URI" content="rzahajgssjasr.htm" />
<meta name="DC.Relation" scheme="URI" content="rzahajsseexmpls.htm" />
<meta name="DC.Relation" scheme="URI" content="callclex.htm" />
<meta name="DC.Relation" scheme="URI" content="clcommex.htm" />
<meta name="DC.Relation" scheme="URI" content="jvlngex1.htm" />
<meta name="DC.Relation" scheme="URI" content="callcex.htm" />
<meta name="DC.Relation" scheme="URI" content="calrpgex.htm" />
<meta name="DC.Relation" scheme="URI" content="iostrmex.htm" />
<meta name="DC.Relation" scheme="URI" content="invapiex.htm" />
<meta name="DC.Relation" scheme="URI" content="rzahapaseexmpls.htm" />
<meta name="DC.Relation" scheme="URI" content="socketex.htm" />
<meta name="DC.Relation" scheme="URI" content="runjpdex.htm" />
<meta name="DC.Relation" scheme="URI" content="sqljex.htm" />
<meta name="DC.Relation" scheme="URI" content="sslcex01.htm" />
<meta name="DC.Relation" scheme="URI" content="sslcex03.htm" />
<meta name="DC.Relation" scheme="URI" content="sslcex02.htm" />
<meta name="DC.Relation" scheme="URI" content="sslcex04.htm" />
<meta name="copyright" content="(C) Copyright IBM Corporation 2006" />
<meta name="DC.Rights.Owner" content="(C) Copyright IBM Corporation 2006" />
<meta name="DC.Format" content="XHTML" />
<meta name="DC.Identifier" content="jniex" />
<meta name="DC.Language" content="en-us" />
<!-- All rights reserved. Licensed Materials Property of IBM -->
<!-- US Government Users Restricted Rights -->
<!-- Use, duplication or disclosure restricted by -->
<!-- GSA ADP Schedule Contract with IBM Corp. -->
<link rel="stylesheet" type="text/css" href="./ibmdita.css" />
<link rel="stylesheet" type="text/css" href="./ic.css" />
<title>Examples: Use the Java Native Interface for native methods</title>
</head>
<body id="jniex"><a name="jniex"><!-- --></a>
<!-- Java sync-link --><script language="Javascript" src="../rzahg/synch.js" type="text/javascript"></script>
<h1 class="topictitle1">Examples: Use the Java Native Interface for native methods</h1>
<div><p>This example program is a simple Java™ Native Interface (JNI) example in which
a C native method is used to display "Hello, World." Use the <samp class="codeph">javah</samp> tool
with the NativeHello class file to generate the NativeHello.h file. This example
assumes that the NativeHello C implementation is part of a service program
that is called NATHELLO.</p>
<div class="section"><div class="note"><span class="notetitle">Note:</span> The library where the NATHELLO service program is located must
be in the library list for this example to run.</div>
<p><strong>Example 1:</strong> NativeHello
class</p>
<div class="note"><span class="notetitle">Note:</span> By using the code examples, you agree to the terms of the <a href="codedisclaimer.htm">Code license and disclaimer information</a>.</div>
<pre>public class NativeHello {
// Declare a field of type 'String' in the NativeHello object.
// This is an 'instance' field, so every NativeHello object
// contains one.
public String theString; // instance variable
// Declare the native method itself. This native method
// creates a new string object, and places a reference to it
// into 'theString'
public native void setTheString(); // native method to set string
// This 'static initializer' code is called before the class is
// first used.
static {
// Attempt to load the native method library. If you do not
// find it, write a message to 'out', and try a hardcoded path.
// If that fails, then exit.
try {
// System.loadLibrary uses the iSeries library list in JDK 1.1,
// and uses the java.library.path property or the LIBPATH environment
// variable in JDK1.2
System.loadLibrary("NATHELLO");
}
catch (UnsatisfiedLinkError e1) {
// Did not find the service program.
System.out.println
("I did not find NATHELLO *SRVPGM.");
System.out.println ("(I will try a hardcoded path)");
try {
// System.load takes the full integrated file system form path.
System.load ("/qsys.lib/jniexample.lib/nathello.srvpgm");
}
catch (UnsatisfiedLinkError e2) {
// If you get to this point, then you are done! Write the message
// and exit.
System.out.println
("&lt;sigh&gt; I did not find NATHELLO *SRVPGM anywhere. Goodbye");
System.exit(1);
}
}
}
// Here is the 'main' code of this class. This is what runs when you
// enter 'java NativeHello' on the command line.
public static void main(String argv[]){
// Allocate a new NativeHello object now.
NativeHello nh = new NativeHello();
// Echo location.
System.out.println("(Java) Instantiated NativeHello object");
System.out.println("(Java) string field is '" + nh.theString + "'");
System.out.println("(Java) Calling native method to set the string");
// Here is the call to the native method.
nh.setTheString();
// Now, print the value after the call to double check.
System.out.println("(Java) Returned from the native method");
System.out.println("(Java) string field is '" + nh.theString + "'");
System.out.println("(Java) All done...");
}
}</pre>
<p><strong>Example 2:</strong> Generated NativeHello.h header file</p>
<div class="note"><span class="notetitle">Note:</span> Read
the <a href="codedisclaimer.htm">Code example disclaimer</a> for important
legal information.</div>
<pre>/* DO NOT EDIT THIS FILE - it is machine generated */
#include &lt;jni.h&gt;
/* Header for class NativeHello */
#ifndef _Included_NativeHello
#define _Included_NativeHello
#ifdef __cplusplus
extern "C" {
#endif
/*
* Class: NativeHello
* Method: setTheString
* Signature: ()V
*/
JNIEXPORT void JNICALL Java_NativeHello_setTheString
(JNIEnv *, jobject);
#ifdef __cplusplus
}
#endif
#endif</pre>
<p>This NativeHello.c example shows the implementation of the
native method in C. This example shows how to link Java to native methods. However, it points
out complications that arise from the fact that the iSeries™ server is internally an extended
binary-coded decimal interchange code (EBCDIC) machine. It also shows complications
from the current lack of true internationalization elements in the JNI.</p>
<p>These
reasons, although they are not new with the JNI, cause some unique iSeries server-specific
differences in the C code that you write. You must remember that if you are
writing to stdout or stderr or reading from stdin, your data is probably encoded
in EBCDIC form.</p>
<p>In C code, you can easily convert most <a href="literal.htm">literal
strings</a>, those that contain 7-bit characters only, into the UTF-8 form
that is required by the JNI. To do this, bracket the literal strings with
code-page conversion pragmas. However, because you may write information directly
to stdout or stderr from your C code, you might allow some literals to remain
in EBCDIC.</p>
<div class="note"><span class="notetitle">Note:</span> The #pragma convert(0) statements convert character data
to EBCDIC. The #pragma convert(819) statements convert character data to American
Standard Code for Information Interchange (ASCII). These statements convert
character data in the C program at compile time.</div>
<p><strong>Example 3:</strong> NativeHello.c
native method implementation of the NativeHello Java class</p>
<div class="note"><span class="notetitle">Note:</span> Read the <a href="codedisclaimer.htm">Code
example disclaimer</a> for important legal information.</div>
<pre>#include &lt;stdlib.h&gt; /* malloc, free, and so forth */
#include &lt;stdio.h&gt; /* fprintf(), and so forth */
#include &lt;qtqiconv.H&gt; /* iconv() interface */
#include &lt;string.h&gt; /* memset(), and so forth */
#include "NativeHello.h" /* generated by 'javah-jni' */
/* All literal strings are ISO-8859-1 Latin 1 code page (and with 7-bit
characters, they are also automatically UTF-8). */
#pragma convert(819) /* handle all literal strings as ASCII */
/* Report and clear a JNI exception. */
static void HandleError(JNIEnv*);
/* Print an UTF-8 string to stderr in the coded character */
set identifier (CCSID) of the current job. */
static void JobPrint(JNIEnv*, char*);
/* Constants describing which direction to covert: */
#define CONV_UTF2JOB 1
#define CONV_JOB2UTF 2
/* Convert a string from the CCSID of the job to UTF-8, or vice-versa. */
int StringConvert(int direction, char *sourceStr, char *targetStr);
/* Native method implementation of 'setTheString()'. */
JNIEXPORT void JNICALL Java_NativeHello_setTheString
(JNIEnv *env, jobject javaThis)
{
jclass thisClass; /* class for 'this' object */
jstring stringObject; /* new string, to be put in field in 'this' */
jfieldID fid; /* field ID required to update field in 'this' */
jthrowable exception; /* exception, retrieved using ExceptionOccurred */
/* Write status to console. */
JobPrint(env, "( C ) In the native method\n");
/* Build the new string object. */
if (! (stringObject = (*env)-&gt;NewStringUTF(env, "Hello, native world!")))
{
/* For nearly every function in the JNI, a null return value indicates
that there was an error, and that an exception had been placed where it
could be retrieved by 'ExceptionOccurred()'. In this case, the error
would typically be fatal, but for purposes of this example, go ahead
and catch the error, and continue. */
HandleError(env);
return;
}
/* get the class of the 'this' object, required to get the fieldID */
if (! (thisClass = (*env)-&gt;GetObjectClass(env,javaThis)))
{
/* A null class returned from GetObjectClass indicates that there
was a problem. Instead of handling this problem, simply return and
know that the return to Java automatically 'throws' the stored Java
exception. */
return;
}
/* Get the fieldID to update. */
if (! (fid = (*env)-&gt;GetFieldID(env,
thisClass,
"theString",
"Ljava/lang/String;")))
{
/* A null fieldID returned from GetFieldID indicates that there
was a problem. Report the problem from here and clear it.
Leave the string unchanged. */
HandleError(env);
return;
}
JobPrint(env, "( C ) Setting the field\n");
/* Make the actual update.
Note: SetObjectField is an example of an interface that does
not return a return value that can be tested. In this case, it
is necessary to call ExceptionOccurred() to see if there
was a problem with storing the value */
(*env)-&gt;SetObjectField(env, javaThis, fid, stringObject);
/* Check to see if the update was successful. If not, report the error. */
if ((*env)-&gt;ExceptionOccurred(env)) {
/* A non-null exception object came back from ExceptionOccurred,
so there is a problem and you must report the error. */
HandleError(env);
}
JobPrint(env, "( C ) Returning from the native method\n");
return;
}
static void HandleError(JNIEnv *env)
{
/* A simple routine to report and handle an exception. */
JobPrint(env, "( C ) Error occurred on JNI call: ");
(*env)-&gt;ExceptionDescribe(env); /* write exception data to the console */
(*env)-&gt;ExceptionClear(env); /* clear the exception that was pending */
}
static void JobPrint(JNIEnv *env, char *str)
{
char *jobStr;
char buf[512];
size_t len;
len = strlen(str);
/* Only print non-empty string. */
if (len) {
jobStr = (len &gt;= 512) ? malloc(len+1) : &amp;buf;
if (! StringConvert(CONV_UTF2JOB, str, jobStr))
(*env)-&gt;FatalError
(env,"ERROR in JobPrint: Unable to convert UTF2JOB");
fprintf(stderr, jobStr);
if (len &gt;= 512) free(jobStr);
}
}
int StringConvert(int direction, char *sourceStr, char *targetStr)
{
QtqCode_T source, target; /* parameters to instantiate iconv */
size_t sStrLen, tStrLen; /* local copies of string lengths */
iconv_t ourConverter; /* the actual conversion descriptor */
int iconvRC; /* return code from the conversion */
size_t originalLen; /* original length of the sourceStr */
/* Make local copies of the input and output sizes that are initialized
to the size of the input string. The iconv() requires the
length parameters to be passed by address (that is as int*). */
originalLen = sStrLen = tStrLen = strlen(sourceStr);
/* Initialize the parameters to the QtqIconvOpen() to zero. */
memset(&amp;source,0x00,sizeof(source));
memset(&amp;target,0x00,sizeof(target));
/* Depending on direction parameter, set either SOURCE
or TARGET CCSID to ISO 8859-1 Latin. */
if (CONV_UTF2JOB == direction ) {
source.CCSID = 819;
}
else {
target.CCSID = 819;
}
/* Create the iconv_t converter object. */
ourConverter = QtqIconvOpen(&amp;target,&amp;source);
/* Make sure that you have a valid converter, otherwise return 0. */
if (-1 == ourConverter.return_value) return 0;
/* Perform the conversion. */
iconvRC = iconv(ourConverter,
(char**) &amp;sourceStr,
&amp;sStrLen,
&amp;targetStr,
&amp;tStrLen);
/* If the conversion failed, return a zero. */
if (0 != iconvRC ) return 0;
/* Close the conversion descriptor. */
iconv_close(ourConverter);
/* The targetStr returns pointing to the character just
past the last converted character, so set the null
there now. */
*targetStr = '\0';
/* Return the number of characters that were processed. */
return originalLen-tStrLen;
}
#pragma convert(0)</pre>
<p>See <a href="jni.htm">Use the Java Native Interface for native methods</a> for
background information.</p>
</div>
</div>
<div>
<div class="familylinks">
<div class="parentlink"><strong>Parent topic:</strong> <a href="codeex.htm" title="The following is a list of code examples for the IBM Developer Kit for Java.">Code examples for the IBM Developer Kit for Java</a></div>
</div>
<div class="relconcepts"><strong>Related concepts</strong><br />
<div><a href="rzahapaseexmpls.htm" title="The IBM i5/OS PASE native method for Java example calls an instance of a native C method that then uses Java Native Interface (JNI) to call back into Java code. Rather than accessing the string directly from Java code, the example calls a native method that then calls back into Java through JNI to get the string value.">Example: IBM i5/OS PASE native method for Java</a></div>
</div>
<div class="reltasks"><strong>Related tasks</strong><br />
<div><a href="runjpdex.htm" title="You can either use the iSeries command line or the Qshell environment to run the Java Performance Data Converter (JPDC).">Example: Run the Java Performance Data Converter</a></div>
</div>
<div class="relref"><strong>Related reference</strong><br />
<div><a href="intdatex.htm" title="This example shows how you can use locales to format dates.">Example: Internationalization of dates using the java.util.DateFormat class</a></div>
<div><a href="intnumex.htm" title="This example shows how you can use locales to format numbers.">Example: Internationalization of numeric display using the java.util.NumberFormat class</a></div>
<div><a href="intlocex.htm" title="This example shows how you can use locales with resource bundles to internationalize program strings.">Example: Internationalization of locale-specific data using the java.util.ResourceBundle class</a></div>
<div><a href="accesspropertytest.htm" title="This is an example of how to use the Access property.">Example: Access property</a></div>
<div><a href="putgetblobs.htm" title="This is an example of how a BLOB can be put into the database or retrieved from the database.">Example: BLOB</a></div>
<div><a href="callex.htm" title="This is an example of how to use the CallableStatement interface.">Example: CallableStatement interface for IBM Developer Kit for Java</a></div>
<div><a href="usingpositioneddelete.htm" title="This is an example of how to remove values from a table through another statement's cursor.">Example: Remove values from a table through another statement's cursor</a></div>
<div><a href="putgetclobs.htm" title="This is an example of how a CLOB can be put into the database or retrieved from the database.">Example: CLOB</a></div>
<div><a href="udbdatasourcebind.htm" title="This is an example of how to create a UDBDataSource and get it bound with JNDI.">Example: Create a UDBDataSource and bind it with JNDI</a></div>
<div><a href="udbdatasourceuse2.htm" title="This is an example of how to create a UDBDataSource, and use the getConnection method to obtain a user ID and password at runtime.">Example: Create a UDBDataSource, and obtain a user ID and password</a></div>
<div><a href="udbdatasourcebind2.htm" title="This is an example of how to create a UDBDataSource, and set the user ID and password as DataSource properties.">Example: Create a UDBDataSourceBind and set DataSource properties</a></div>
<div><a href="dataex.htm" title="This example shows how to return a list of tables.">Example: DatabaseMetaData interface for IBM Developer Kit for Java - Return a list of tables</a></div>
<div><a href="putgetdatalinks.htm" title="This is an example of how to use datalinks in your applications.">Example: Datalink</a></div>
<div><a href="distinct.htm" title="This is an example of how to use distinct types.">Example: Distinct types</a></div>
<div><a href="sqljex.htm" title="The following example SQLJ application, App.sqlj, uses static SQL to retrieve and update data from the EMPLOYEE table of the DB2 sample database.">Example: Embed SQL Statements in your Java application</a></div>
<div><a href="jtatxend.htm" title="This is an example of ending a transaction in your application.">Example: End a transaction</a></div>
<div><a href="invalidconnect.htm" title="This is an example of how to use the Connection property in SQL naming mode.">Example: Invalid user ID and password</a></div>
<div><a href="basicjdbc.htm" title="This is an example of how to use the BasicJDBC program.">Example: JDBC</a></div>
<div><a href="jtamulticonn.htm" title="This is an example of how to use multiple connections working on a single transaction.">Example: Multiple connections that work on a transaction</a></div>
<div><a href="udbdatasourceuse.htm" title="The following example obtains an initial context before binding the UDBDataSource. The lookup method is then used on that context to return an object of type DataSource for the application to use.">Example: Obtain an initial context before binding UDBDataSource</a></div>
<div><a href="pmd.htm" title="This is an example of using the ParameterMetaData interface to retrieve information about parameters.">Example: ParameterMetaData</a></div>
<div><a href="usingpositionedupdate.htm" title="This is an example of how to change values with a statement through another statement's cursor.">Example: Change values with a statement through another statement's cursor</a></div>
<div><a href="resultex.htm" title="This is an example of how to use the ResultSet interface.">Example: ResultSet interface for IBM Developer Kit for Java</a></div>
<div><a href="sensitive2.htm" title="The following example shows how a change can affect a where clause of an SQL statement based on the sensitivity of the ResultSet.">Example: ResultSet sensitivity</a></div>
<div><a href="sensitive.htm" title="The following example shows the difference between sensitive and insensitive ResultSets when rows are inserted into a table.">Example: Sensitive and insensitive ResultSets</a></div>
<div><a href="connectionpoolingsetup.htm" title="This is an example of how to use connection pooling with UDBDataSource and UDBConnectionPoolDataSource.">Example: Set up connection pooling with UDBDataSource and UDBConnectionPoolDataSource</a></div>
<div><a href="exceptionexample.htm" title="This is an example of catching an SQLException and dumping all the information that it provides.">Example: SQLException</a></div>
<div><a href="jtatxsuspend.htm" title="This is an example of a transaction that is suspended and then is resumed.">Example: Suspend and resume a transaction</a></div>
<div><a href="jtatxeffect.htm" title="This is an example of the how a Statement object is reprocessed under another transaction to perform work.">Example: Suspended ResultSets</a></div>
<div><a href="connectionpoolingtest.htm" title="This is an example of how to test the performance of the pooling example against the performance of the non-pooling example.">Example: Test the performance of connection pooling</a></div>
<div><a href="statementpoolingtest.htm" title="This is an example of testing one DataSource that uses connection pooling only and the other DataSource that uses statement and connection pooling.">Example: Test the performance of two DataSources</a></div>
<div><a href="updateblobs.htm" title="This is an example of how to update BLOBs in your applications.">Example: Update BLOBs</a></div>
<div><a href="updateclobs.htm" title="This is an example of how to update CLOBs in your applications.">Example: Update CLOBs</a></div>
<div><a href="jtamultitx.htm" title="This is an example of how to use a single connection with multiple transactions.">Example: Use a connection with multiple transactions</a></div>
<div><a href="useblobs.htm" title="This is an example of how to use BLOBs in your applications.">Example: Use BLOBs</a></div>
<div><a href="useclobs.htm" title="This is an example of how to use CLOBs in your applications.">Example: Use CLOBs</a></div>
<div><a href="jtacommit.htm" title="This is an example of how to use the Java Transaction API (JTA) to handle a transaction in an application.">Example: Use JTA to handle a transaction</a></div>
<div><a href="safegetudts.htm" title="This is an example of how to use metadata ResultSets that have more than one column.">Example: Use metadata ResultSets that have more than one column</a></div>
<div><a href="getconnections.htm" title="This is an example of how to use the native JDBC connection and the IBM Toolbox for Java JDBC connection in a program.">Example: Use native JDBC and IBM Toolbox for Java JDBC concurrently</a></div>
<div><a href="prepex.htm" title="This is an example of using a PreparedStatement object's executeQuery method to obtain a ResultSet.">Example: Use PreparedStatement to obtain a ResultSet</a></div>
<div><a href="crdb2cac.htm" title="There are several ways to place data into a DB2CachedRowSet.">Create and populate a DB2CachedRowSet</a></div>
<div><a href="stateex.htm" title="This is an example of how to use the Statement object's executeUpdate method.">Example: Use the Statement object's executeUpdate method</a></div>
<div><a href="jaaswrld.htm" title="These examples show you the three files that are needed to compile and run HelloWorld for JAAS.">Examples: JAAS HelloWorld</a></div>
<div><a href="sampthrd.htm">Example: JAAS SampleThreadSubjectLogin</a></div>
<div><a href="rzahajgsssrcl.htm">Sample: IBM JGSS non-JAAS client program</a></div>
<div><a href="rzahajgsssrsr.htm">Sample: IBM JGSS non-JAAS server program</a></div>
<div><a href="rzahajgssjacl.htm">Sample: IBM JGSS JAAS-enabled client program</a></div>
<div><a href="rzahajgssjasr.htm">Sample: IBM JGSS JAAS-enabled server program</a></div>
<div><a href="rzahajsseexmpls.htm" title="The JSSE examples show how a client and a server can use the native iSeries JSSE provider to create a context that enables secure communications.">Examples: IBM Java Secure Sockets Extension</a></div>
<div><a href="callclex.htm" title="This example shows how to run CL programs from within a Java program. In this example, the Java class CallCLPgm runs a CL program.">Example: Call a CL program with java.lang.Runtime.exec()</a></div>
<div><a href="clcommex.htm" title="This example shows how to run a control language (CL) command from within a Java program.">Example: Call a CL command with java.lang.Runtime.exec()</a></div>
<div><a href="jvlngex1.htm" title="This example shows how to call another Java program with java.lang.Runtime.exec(). This class calls the Hello program that is shipped as part of the IBM Developer Kit for Java. When the Hello class writes to System.out, this program gets a handle to the stream and can read from it.">Example: Call another Java program with java.lang.Runtime.exec()</a></div>
<div><a href="callcex.htm" title="This is an example of a C program that uses the system() function to call the Java Hello program.">Example: Call Java from C</a></div>
<div><a href="calrpgex.htm" title="This is an example of an RPG program that uses the QCMDEXC API to call the Java Hello program.">Example: Call Java from RPG</a></div>
<div><a href="iostrmex.htm" title="This example shows how to call a C program from Java and use input and output streams for interprocess communication.">Example: Use input and output streams for interprocess communication</a></div>
<div><a href="invapiex.htm" title="This example follows the standard Invocation API paradigm.">Example: Java Invocation API</a></div>
<div><a href="socketex.htm" title="This example uses sockets to communicate between a Java program and a C program.">Example: Use sockets for interprocess communication</a></div>
<div><a href="sslcex01.htm" title="These examples show you how to change a simple socket class, named simpleSocketClient, so that it uses socket factories to create all of the sockets. The first example shows you the simpleSocketClient class without socket factories. The second example shows you the simpleSocketClient class with socket factories. In the second example, simpleSocketClient is renamed to factorySocketClient.">Examples: Change your Java code to use client socket factories</a></div>
<div><a href="sslcex03.htm" title="These examples show you how to change a simple socket class, named simpleSocketServer, so that it uses socket factories to create all of the sockets. The first example shows you the simpleSocketServer class without socket factories. The second example shows you the simpleSocketServer class with socket factories. In the second example, simpleSocketServer is renamed to factorySocketServer.">Examples: Change your Java code to use server socket factories</a></div>
<div><a href="sslcex02.htm" title="These examples show you how to change one class, named factorySocketClient, to use secure sockets layer (SSL). The first example shows you the factorySocketClient class not using SSL. The second example shows you the same class, renamed factorySSLSocketClient, using SSL.">Examples: Change your Java client to use secure sockets layer</a></div>
<div><a href="sslcex04.htm" title="These examples show you how to change one class, named factorySocketServer, to use secure sockets layer (SSL).">Examples: Change your Java server to use secure sockets layer</a></div>
</div>
<div class="linklist"><strong>Collected links</strong><br />
<div><a href="codedisclaimer.htm">Code example disclaimer</a></div>
<div><a href="codedisclaimer.htm">Code example disclaimer</a></div>
<div><a href="literal.htm" title="It is easier to encode literal strings in UTF-8 if the string is composed of characters with a 7-bit American Standard Code for Information Interchange (ASCII) representation.">literal strings</a></div>
<div><a href="codedisclaimer.htm">Code example disclaimer</a></div>
<div><a href="jni.htm" title="You should only use native methods in cases where pure Java cannot meet your programming needs.">Use the Java Native Interface for native methods</a></div></div>
</div>
</body>
</html>