Skip Headers

Oracle9i SQLJ Developer's Guide and Reference
Release 2 (9.2)

Part Number A96655-01
Go To Documentation Library
Home
Go To Product List
Book List
Go To Table Of Contents
Contents
Go To Index
Index

Master Index

Feedback

Go to previous page Go to next page

8
Translator Command Line and Options

Once you have written your source code, you must translate it using the SQLJ translator. This chapter discusses the SQLJ translator command line, options, and properties files.

The following topics are discussed:

Translator Command Line and Properties Files

This section discusses general command-line syntax for the script sqlj that you use to run the SQLJ translator, and lists all the options available. It then discusses SQLJ properties files, which you can use instead of the command line to set most options, and the SQLJ_OPTIONS environment variable, which you can use in addition to or instead of the command line for setting options.

For detailed information about settings for basic options, see "Basic Translator Options".

For information about more advanced options, see "Advanced Translator Options" and "Translator Support and Options for Alternative Environments".

The sqlj script invokes a Java virtual machine (JVM) and passes the class name of the SQLJ translator (sqlj.tools.Sqlj) to the JVM. The JVM invokes the translator and performs operations such as parsing the command line and properties files. For simplicity, running the script is referred to as "running SQLJ", and its command line is referred to as the "SQLJ command line".

This is the typical general syntax for the command line:

sqlj <optionlist> filelist

The option list is a list of SQLJ option settings, separated by spaces. There are also prefixes to mark options to pass to the Java interpreter, compiler, and customizer (if applicable).

The file list is the list of files, delimited by spaces, to be processed by the SQLJ translator. The files can be .sqlj, .java, .ser, or .jar files, as explained in "Command-Line Syntax and Operations". The * wildcard entry can be used in file names. For example, Foo*.sqlj would find Foo1.sqlj, Foo2.sqlj, and Foobar.sqlj.


Notes:
  • It is not required that all the options precede the file list. Options may appear anywhere in the command line and are processed in order.
  • All command-line options apply to all files being translated. It is not possible to have file-specific option settings.

Do not include .class files in the file list, but do be sure that your classpath is set so that the SQLJ translator can find any classes it must have for type resolution of variables in your SQLJ source files.

If the -checksource flag is enabled (its default setting), the SQLJ translator can also find classes it needs in uncompiled .java files in the classpath. See "Source Check for Type Resolution (-checksource)".


Notes:
  • Discussion of the SQLJ command line applies only to client-side translation, not server-side translation. There is a different mechanism for specifying options to SQLJ in the server, and only a small subset of options are supported. For information, see "Option Support in the Server Embedded Translator".
  • If you run the script by entering only sqlj, you will receive a synopsis of the most frequently used SQLJ options. In fact, this is true whenever you run the script without specifying any files to process. This is equivalent to using the -help flag setting.

SQLJ Options, Flags, and Prefixes

This section discusses options supported by the SQLJ translator. Boolean options are referred to as flags. Also listed are prefixes, used to pass options to the JVM, which the SQLJ script invokes, and to the Java compiler and SQLJ profile customizer, which the JVM invokes.

Summary of SQLJ Options

Table 8-1 below lists options supported by the SQLJ translator, categorized as follows:

Notes Regarding Options, Flags, and Prefixes:

For discussion and an example of command-line syntax and operations, see "Command-Line Syntax and Operations".

Table 8-1 SQLJ Translator Options  
Option Description Default Category

-bind-by-identifier

Flag to treat multiple appearances of the same host variable in a given SQLJ statement as a single bind occurrence.

false

Advanced

-C

Prefix that marks options to pass to the Java compiler.

n/a

Advanced

-cache

Enables caching of online semantics-checking results (to reduce trips to database).

false

Advanced

-checkfilename

Specifies whether a warning is issued during translation if a source file name does not correspond to the name of the public class (if any) defined there.

true

Environment

-checksource

Instructs SQLJ type resolution to examine source files in addition to class files in certain circumstances.

true

Advanced

-classpath
(command-line only)

Specifies the classpath to the JVM and Java compiler; also passed to javac.

none

Basic

-codegen

Specifies mode of code generation: oracle for Oracle-specific code generation with direct Oracle JDBC calls; iso for ISO standard SQLJ code generation.

oracle

Basic

-compile

Enables/disables the Java compilation step--for .java files generated during the current SQLJ run, or for previously generated or other .java files specified on the command line.

true

Advanced

-compiler-executable

Specifies the Java compiler to use.

javac

Environment

-compiler-encoding-flag

Instructs SQLJ whether to pass the -encoding setting (if that option is set) to the Java compiler.

true

Environment

-compiler-output-file

Specifies a file to which the Java compiler output should be written. If this option is not set, then SQLJ assumes that compiler output goes to standard output.

none

Environment

-compiler-pipe-output-flag

Instructs SQLJ whether to set the javac.pipe.output system property, which determines whether the Java compiler outputs errors and messages to STDOUT instead of STDERR.

true

Environment

-d

Specifies the output directory for .ser profile files (if applicable) generated by SQLJ and .class files generated by the compiler; also passed to javac.

empty (use directory of .java files for .class files; use directory of .sqlj files for .ser files)

Basic

-default-customizer

Determines the profile customizer to use. Specify a class name.

oracle.sqlj.runtime.util.OraCustomizer

Environment

-default-url-prefix

Sets the default prefix for URL settings.

jdbc:oracle:thin:

Basic

-depend
(requires compiler prefix if set in properties file)

Passed to javac; enables -checksource.

n/a

javac

-deprecation
(requires compiler prefix if set in properties file)

Passed to javac only.

n/a

javac

-dir

Sets the output directory for SQLJ-generated .java files.

empty (use directory of .sqlj input file)

Basic

-driver

Determines the JDBC driver class to register. Specify a class name or comma-delimited list of class names.

oracle.jdbc.
OracleDriver

Basic

-encoding
(also recognized as -e if on command line)

Specifies the encoding that SQLJ and the compiler will use in globalization support; also passed to javac.

JVM file.encoding setting

Basic

-explain

Flag to request "cause" and "action" information to be displayed with translator error messages.

false

Basic

-fixedchar

Flag to account for blank padding when binding a string into a WHERE clause for comparison with CHAR data.

false

Basic

-g
(requires compiler prefix if set in properties file)

Passed to javac; enables -linemap.

n/a

javac

-help (also recognized as -h)
-help-long
-help-alias
(all command-line only)

Flags to display different levels of information about SQLJ option names, descriptions, and current values.

disabled

Basic

-jdblinemap

Variant of -linemap option for use with the Sun Microsystems jdb debugger.

false

Basic

-J
(command-line only)

Prefix that marks options to pass to the JVM.

n/a

Advanced

-linemap

Enables mapping of line numbers between the generated Java class file and the original SQLJ code.

false

Basic

-n
(command-line only; alternatively -vm=echo)

Instructs the sqlj script to echo the full command line as it would be passed to the SQLJ translator (including settings in SQLJ_OPTIONS) without having the translator execute it.

disabled

Basic

-nowarn
(requires compiler prefix if set in properties file)

Passed to javac; sets -warn=none.

n/a

javac

-O
(requires compiler prefix if set in properties file)

Passed to javac; disables -linemap.

n/a

javac

-offline

Determines the offline checker to use for semantics-checking. Specify a list of fully qualified class names.

oracle.sqlj.checker.
OracleChecker

Advanced

-online

Determines the online checker to use for semantics-checking. Specify a fully qualified class name. (You must also set -user to enable online checking.)

oracle.sqlj.checker.
OracleChecker

Advanced

-optcols

Enables iterator column type and size definitions to optimize performance. Used directly by the translator for Oracle-specific code generation, or forwarded to the Oracle customizer along with user/password/URL settings for ISO code generation.

false

Basic

-optparams

Enables parameter size definitions to optimize JDBC resource allocation (used with -optparamdefaults). This is used directly by the translator for Oracle-specific code generation, or forwarded to the Oracle customizer for ISO code generation.

false

Basic

-optparamdefaults

Sets parameter size defaults for particular datatypes (used with -optparams). This is used directly by the translator for Oracle-specific code generation, or forwarded to the Oracle customizer for ISO code generation.

false

Basic

-P

Prefix that marks options to pass to the SQLJ profile customizer.

n/a

Advanced

-parse

Option to enable the offline SQL parser. Possible settings: both, online-only, offline-only, none, or the name of a Java class that implements an alternative parser.

Note: Some settings for this option will also disable online semantics-checking, overriding the effect of the -user option.

both

Advanced

-passes
(command-line only)

Instructs the sqlj script to run SQLJ in two separate passes, with compilation in between.

false

Environment

-password
(also recognized as -p if on command line)

Sets the user password for the database connection for online semantics-checking.

none

Basic

-profile

For ISO code generation, enables/disables the profile customization step for profile files generated during the current SQLJ run.

true

Advanced

-props
(command-line only)

Specifies a properties file--an alternative to the command line for setting options. (The sqlj.properties is also still read.)

none

Basic

-ser2class

For ISO code generation, instructs SQLJ to translate generated .ser profiles to .class files.

false

Advanced

-status
(also recognized as -v if on command line)

Requests SQLJ to display status messages as it runs.

false

Basic

-url

Sets the URL for the database connection for online semantics-checking.

jdbc:oracle:oci:@

Basic

-user
(also recognized as -u if on command line)

Enables online semantics-checking and sets the user name (and optionally password and URL) for the database connection.

none (no online semantics-checking)

Basic

-verbose
(requires compiler prefix if set in properties file)

Passed to javac; enables -status.

n/a

javac

-version
-version-long
(both command-line only)

Flag to display different levels of SQLJ and JDBC driver version information.

disabled

Basic

-vm
(command-line only)

Specifies the JVM to use for running the SQLJ translator.

java

Environment

-warn

Comma-delimited list of flags to enable or disable different SQLJ warnings. Individual flags are cast/nocast precision/noprecision, nulls/nonulls, portable/noportable, strict/nostrict, and verbose/noverbose. The global flag is all/none.

cast
precision
nulls
noportable
strict
noverbose

Basic

Options for loadjava Compatibility

For compatibility with the loadjava utility used to load Java and SQLJ applications into Oracle9i, the following alternative syntax is recognized for the indicated options when specified on the command line. (This is also noted in Table 8-1 above.)

To maintain full consistency with loadjava syntax, you can use a space instead of "=" in setting these options, as in the following example:

-u scott/tiger -v -e SJIS

For general information about the loadjava utility, see the Oracle9i Java Developer's Guide.


Note:

This alternative option syntax is recognized only on the command line or in the SQLJ_OPTIONS environment variable, not in properties files.


Option Support for javac

SQLJ supports option settings for javac--the Java compiler supplied with the Sun Microsystems JDK--in several ways:

This is summarized in Table 8-2. All of these options can be set in the SQLJ command line or in a properties file, though sometimes a compiler prefix is required, as noted in the table.


Notes:
  • By default, javac compiles classes against the bootstrap and extension classes of the platform with which it was shipped. But javac also supports cross-compiling classes against bootstrap and extension classes of a different Java platform. The javac -bootclasspath and -extdirs options are for use in cross-compiling (JDK 1.2 or higher).
  • By default, javac generates .class files that are compatible with both JDK 1.1 and JDK 1.2 or higher. Use the -target option to alter this.

Table 8-2 SQLJ Support for javac Options  
Command-Line Option (with -C Prefix if Noted) Description Relationship to SQLJ

-C-bootclasspath

Instructs javac to cross-compile against the specified set of bootstrap classes.

none

-classpath

Sets the classpath for javac and the JVM.

Also a SQLJ option.

-d

Sets the output directory for .class files and SQLJ profile files.

Also a SQLJ option.

-depend

Instructs javac to compile out-of-date files recursively.

Enables the SQLJ -checksource option.

-deprecation

Instructs javac to output source locations where deprecated APIs are used.

none

-encoding

Sets the encoding for both SQLJ and javac.

Also a SQLJ option.

-C-extdirs

Instructs javac to cross-compile against the specified extension directories.

none

-g

Generates javac debugging information.

Enables the SQLJ -linemap option.

-nowarn

Instructs javac to generate no warnings.

Sets the SQLJ option -warn=none.

-O

Instructs javac to optimize.

Disables the SQLJ -linemap option.

-C-target

Instructs javac to generate .class files to work only on JVMs of the specified JDK version level or higher (1.1, 1.2, or 1.3).

none

-verbose

Instructs javac to output real-time status messages.

Enables the SQLJ -status option.

Refer to javac documentation for additional information about javac option settings and functionality.

Syntax Notes for javac Options:
Example

The following example (a single wraparound command line) uses the -C-bootclasspath, -C-extdirs, and -C-target options.

% sqlj -vm=/usr/local/packages/jdk1.2.2/bin/java
       -compiler-executable=/usr/local/packages/jdk1.2.2/bin/javac
       -C-bootclasspath=/usr/local/packages/jdk1.3.1/jre/lib/rt.jar
       -C-extdirs="" -C-target=1.1.8 Demo.sqlj

Profile Customizer Options

Profile customizer options--options for the customizer harness front end, the default Oracle customizer, and special customizers for debugging and deployment-time semantics-checking--are documented in "Customization Options and Choosing a Customizer". This is relevant for ISO standard code generation only (-codegen=iso).

Command-Line Syntax and Operations

The general sequence of events triggered by running the script sqlj was discussed in "SQLJ Translation Steps". This section will add some operational details to that discussion, as part of this overview of the command line.

Use of Command-Line Arguments

Recall the typical general syntax for the command line:

sqlj <optionlist> filelist

When the sqlj script invokes a JVM, it passes all of its command-line arguments to the JVM, which later passes them elsewhere (such as to the Java compiler or profile customizer) as appropriate.

Use an equals sign (=) to specify option and flag settings, although for simplicity you do not have to specify =true to turn on a flag--typing the flag name alone will suffice. You must, however, specify =false to turn a flag off--a flag will not toggle from its previous value. For example:

-linemap=true or just -linemap to enable line-mapping

-linemap=false to disable line-mapping


Note:

If the same option appears more than once on the command line (or in the properties file), then the last value is used.


Arguments from the Option List

Option list arguments are used in the following ways:

Arguments from the File List

The SQLJ front end parses the file list, processes wildcard characters, and expands file names. By default, files are processed as follows:

Note that you can specify .sqlj files together with .java files on the command line, or you can specify .ser files together with .jar files, but you cannot mix the two categories. (See "JAR Files for Profiles" for details about how .jar files are processed.)

If you have .sqlj files and .java files with interdependencies (each requiring access to code in the others), then enter them all on the command line for a single execution of SQLJ. You cannot specify them for separate executions of SQLJ, because then SQLJ would be unable to resolve all the types.


Note:

As an alternative to entering .java file names on the command line, you can enable the -checksource option and then just be sure that the .java files are in the classpath. See "Source Check for Type Resolution (-checksource)".


Processing to Avoid Source Conflicts

The SQLJ translator takes steps to try to prevent having multiple source files define the same class in the same location. If your command-line file list includes multiple references to the same .sqlj or .java file, all but the first reference are discarded from the command line. In addition, if you list a .java file and .sqlj file with the same base name and in the same location without using the -dir option, only the .sqlj file is processed. This processing also applies to wild-card file name characters.

Consider the following command-line examples, presuming that your current directory is /myhome/mypackage, which contains the files Foo.sqlj and Foo.java.

This processing of the command line means that you can, for example, type the following command and have it execute without difficulty (with file references being automatically discarded as necessary):

sqlj *.sqlj *.java

This is convenient in many situations.

Command-Line Example and Results

Below is a sample command line. This example uses some advanced concepts more fully explained later in this chapter, but is presented in the interest of showing a complete example of command-line syntax.

sqlj -J-Duser.language=ja  -warn=none -J-prof -encoding=SJIS *Bar.sqlj Foo*.java

The sqlj script invokes a JVM, passes it the class name of the SQLJ translator, then passes it the command-line arguments. The JVM passes the SQLJ options to the translator and compiler. If there are any options for the JVM, as designated by -J, the script passes them to the JVM ahead of the translator class file name (just as you would type Java options prior to typing the class file name if you were invoking Java by hand). There is no customization in this example, because it uses the default Oracle-specific code generation.

After these steps are completed, the results are equivalent to the user having typed the following (presuming SushiBar.sqlj, DiveBar.sqlj, FooBar.java, and FooBaz.java were all in the current directory):

java -Duser.language=ja -prof sqlj.tools.Sqlj -warn=none -encoding=SJIS 
SushiBar.sqlj DiveBar.sqlj FooBar.java FooBaz.java

(This is one wraparound command line.)

For more information about how JVM options are handled, see "Options to Pass to the Java Virtual Machine (-J)".

Echoing the Command Line without Executing

You can use the SQLJ -n option (or, alternatively, -vm=echo) to echo the command line that the sqlj script would construct and pass to the SQLJ translator, without executing it. This includes settings in the SQLJ_OPTIONS environment variable as well as on the command line, but does not include settings in properties files. For more information, see "Command Line Echo without Execution (-n)".

Properties Files for Option Settings

You can use properties files, instead of the command line, to set options for the SQLJ translator, Java compiler, and SQLJ profile customizer (for ISO code generation).

In addition, if your Java compiler will be running in a separate JVM and you want to specify options to this JVM regarding operation of the compiler, then you can use properties files to supply such options. Such options are passed to the JVM at the time the compiler is run, after the SQLJ translation step. (It is more typical, however, to pass options to the JVM of the compiler by using the command-line -C-J prefix.)

You cannot use properties files to set the following SQLJ options, flags, and prefixes:

It is not possible to use properties files to specify options to the JVM, for example, because properties files are read after the JVM is invoked.

Also note that in properties files you cannot use option abbreviations recognized on the command line for compatibility with loadjava (-e, -h, -p, -u, -v).


Notes:

Discussion of SQLJ properties files applies only to client-side SQLJ, not server-side SQLJ. There is a different mechanism for specifying options to SQLJ in the server, and only a small subset of options are supported. For information, see "Option Support in the Server Embedded Translator".


Properties File Syntax

Option settings in a properties file are placed one per line. Lines with SQLJ options, compiler options, and customizer options can be interspersed. They are parsed by the SQLJ front end and processed appropriately.

Syntax for the different kinds of options is as follows:

As on the command line, a flag can be enabled/disabled in a properties file with =true/=false, =on/=off, =1/=0, or =yes/=no. A flag can also be enabled simply by entering it without a setting, such as the following:

sqlj.linemap


Note:

For consistency, it is best to always use the equals sign (=) in a properties file for options that take values, even though there are some circumstances where a space also works.


Properties File: Simple Example

The following are sample properties file entries:

# Set user and JDBC driver
sqlj.user=scott
sqlj.driver=oracle.jdbc.OracleDriver 

# Turn on the compiler verbose option
compile.verbose

These entries are equivalent to having the following on the SQLJ command line:

sqlj -user=scott -driver=oracle.jdbc.OracleDriver -C-verbose

Properties File: Nondefault Connection Context Classes

Following is a sample properties file that specifies settings for a connection context class SourceContext that you declared:

# JDBC driver
sqlj.driver=oracle.jdbc.OracleDriver

# Oracle 8.0.4 on spock.natdecsys.com
sqlj.user@SourceContext=sde
sqlj.password@SourceContext=fornow
sqlj.url@SourceContext=jdbc:oracle:thin:@207.67.155.3:1521:nds

# Warning settings
sqlj.warn=all

# Cache
sqlj.cache=on

Default Properties Files

Regardless of whether a properties file is specified in the SQLJ command line, the SQLJ front end looks for files named "sqlj.properties". It looks for them in the Java home directory, the user home directory, and the current directory, in that order. It processes each sqlj.properties file it finds, overriding previously set options as it encounters new ones. Thus, options set in the sqlj.properties file in the current directory override those set in the sqlj.properties file in the user home directory or Java home directory.

Also see "Order of Precedence of Option Settings".

SQLJ_OPTIONS Environment Variable for Option Settings

Oracle SQLJ supports use of an environment variable called SQLJ_OPTIONS as an alternative to the command line for setting SQLJ options. Any option referred to as "command-line only", meaning it cannot be set in a properties file, can also be set using the SQLJ_OPTIONS variable.

You can use the SQLJ_OPTIONS variable to set any SQLJ option, but it is intended especially for option settings to be passed to the JVM. And it is particularly useful for command-line-only options, such as -classpath, that you use repeatedly with the same setting.

Following is an example of a SQLJ_OPTIONS setting:

-vm=jview -J-verbose

When you use SQLJ_OPTIONS, SQLJ effectively inserts the SQLJ_OPTIONS settings, in order, at the beginning of the SQLJ command line, prior to any other command-line option settings.


Note:

Generally, syntax in SQLJ_OPTIONS is the same as on the command line, but this may depend on your operating system. There can be OS-specific restrictions. For example, in Windows 95 you use the Environment tab in the System control panel. Additionally, since Windows 95 does not support the "=" character in variable settings, SQLJ supports the use of "#" instead of "=" in setting SQLJ_OPTIONS. Consult your operating system documentation.


Order of Precedence of Option Settings

SQLJ takes option settings in the following order. At each step, it overrides any previous settings for any given option.

  1. It sets options to default settings (where applicable).
  2. It looks for a sqlj.properties file in the Java home directory; if it finds one, it sets options as specified there.
  3. It looks for a sqlj.properties file in the user home directory; if it finds one, it sets options as specified there.
  4. It looks for a sqlj.properties file in the current directory; if it finds one, it sets options as specified there.
  5. It looks for option settings in the SQLJ_OPTIONS environment variable and effectively prepends them to the beginning of the command line. It sets options as specified in SQLJ_OPTIONS.
  6. It looks for option settings on the command line and sets options as specified there. As SQLJ processes the command line, it looks in any file specified by the -props option and sets options as specified there.


    Notes:
    • In sqlj.properties files, SQLJ reads option settings from top to bottom, with later entries taking precedence over earlier entries.
    • If there is a properties file specified by the -props option on the command line, SQLJ effectively inserts the option settings of the file into the position on the command line where the -props option was specified.
    • SQLJ reads options on the command line, with options from a -props file inserted, in order from left to right. Any later (right-hand) setting takes precedence over earlier (left-hand) settings.

Example

Presume SQLJ is run as follows:

sqlj -user=scott -props=myprops.properties -dir=/home/java

And presume the file myprops.properties is in the current directory and contains the following entries:

sqlj.user=tony
sqlj.dir=/home/myjava

These settings are processed as if they were inserted into the command line where the -props option was specified. Therefore, the tony entry takes precedence over the scott entry for the user option, but the /home/java entry takes precedence over the /home/myjava entry for the dir option.

Basic Translator Options

This section documents the syntax and functionality of the basic flags and options you can specify in running SQLJ. These options allow you to run in a fairly standard mode of operation. For options that can also be specified in a properties file (such as sqlj.properties), that syntax is noted as well. (See "Properties Files for Option Settings".)

This discussion includes the following categories:

More advanced command-line flags and options are discussed in "Advanced Translator Options" and "Translator Support and Options for Alternative Environments".

Basic Options for the Command Line Only

The following basic options can be specified only on the SQLJ command line or, equivalently, in the SQLJ_OPTIONS environment variable. They cannot be specified in properties files.

The command-line-only flags (the -help flags, -version flags, and -n) do not support =true syntax. Enable them by typing only the flag name, as in the following example:

supported: sqlj -version-long ...

not supported: sqlj -version-long=true ...


Note:

Additionally, there are advanced options, flags, and prefixes that can be set only on the command line or in SQLJ_OPTIONS: -J, -passes, and -vm.


Input Properties File (-props)

The -props option specifies a properties file from which SQLJ can read option settings (an alternative to specifying option settings on the command line).

See "Properties Files for Option Settings" for information about the format of these files, the details of how they are used in relation to command-line options, and where SQLJ looks for default properties files.

Command-line syntax
-props=filename

Command-line example
-props=myprops.properties
Properties file syntax

n/a

Properties file example

n/a

Default value

none

Classpath for Java Virtual Machine and Compiler (-classpath)

For compatibility with the syntax of most JVMs and compilers, SQLJ recognizes the -classpath option if it is specified on the command line. In setting this option, you can use either a space, as with most JVMs or compilers, or "=", as with other SQLJ options. The following examples (both for a UNIX environment) demonstrate this:

-classpath=.:.$[ORACLE_HOME]/jdbc/lib/classes12.jar:$[ORACLE_HOME]/jdbc/lib/nls_charset12.jar

or:

-classpath .:.$[ORACLE_HOME]/jdbc/lib/classes12.jar:$[ORACLE_HOME]/jdbc/lib/nls_charset12.jar

The -classpath option sets the Java classpath for both the JVM and the Java compiler. If you do not want to use the same classpath for both, set them separately using the SQLJ -J and -C prefixes, described in "Prefixes that Pass Option Settings to Other Executables".


Note:

As with other options described later in this chapter, if you do use "=" in setting the -classpath option, then it is stripped out when the option string is passed to the JVM and compiler. This is because JVMs and compilers do not support the "=" syntax in their option settings.


Command-line syntax
sqlj -classpath=<class_path>
Command-line example
sqlj -classpath=/jdbc-1.2.zip:/classes/bin
Properties file syntax

n/a

Properties file example

n/a

Default value

none

SQLJ Option Information (-help)

The following three settings of the -help flag, specified on the command-line, instruct SQLJ to display varying levels of information about SQLJ options:

You can enable this option by typing the desired setting on the command line as in the following examples:

sqlj -help

or:

sqlj -help-long

or:

sqlj -help-alias

No input-file translation is performed when you use the -help flag in any of these forms, even if you include file names and other options on the command line as well. SQLJ assumes that you either want to run the translator or you want help, but not both.

You can also receive information about the profile customizer or Java compiler, requesting help through the -P and -C prefixes as in the following examples. These prefixes are discussed in "Prefixes that Pass Option Settings to Other Executables". As with the -help flag, no translation is performed if you request customizer or compiler help.

sqlj -P-help

sqlj -C-help

As with other command-line-only flags, -help (as well as -P-help and -C-help) does not support =true syntax. Enable it by typing only the desired flag setting.


Notes:
  • For compatibility with the loadjava utility, -h is recognized as equivalent to -help when specified on the command line. See "Options for loadjava Compatibility".
  • You can use multiple -help flag settings on the same command line, including -P-help and -C-help.
  • Although -P and -C settings can generally be set in properties files, -P-help and -C-help are for only the command line.
  • Help is also provided if you run SQLJ without specifying any files to process. This is equivalent to using the -help setting.

The -help Setting

The most basic level of help is achieved by specifying the -help setting. This provides the following:

The -help-long Setting

This setting provides a complete list of SQLJ option information, including the following for each option:

The -help-alias Setting

This setting provides a synopsis of the command-line abbreviations supported for compatibility with the loadjava utility.

Command-line syntax
sqlj help_flag_settings

Command-line examples



sqlj -help
sqlj -help -help-alias
sqlj -help-long
sqlj -warn=none,null -help-long
sqlj -help-alias
Properties file syntax

n/a

Properties file example

n/a

Default value

disabled

SQLJ Version Number (-version)

The following settings of the -version flag, specified on the command-line, instruct SQLJ to display varying levels of information about SQLJ and JDBC driver versions:

You can enable this option by typing the desired setting on the command line as in the following examples:

sqlj -version

or:

sqlj -version-long

No input-file translation is performed when you use the -version option, even if you include file names and other options on the command line. SQLJ assumes that you either want to run the translator or you want version information, but not both. Properties files and anything else you type on the command line are ignored.

As with other command-line-only flags, -version does not support =true syntax. Enable it by typing only the flag name.

The -version Setting

The -version setting displays the SQLJ release number, such as "Oracle SQLJ 9.2".

The -version-long Setting

The -version-long setting displays information about the SQLJ and SQLJ runtime library release and build versions, the JDBC driver release number if one can be found, and the Java environment. For example, if an Oracle JDBC driver is used, this option would display something such as "Oracle JDBC version 9.2 (9.2.0.0)".

This flag offers a good way to check your SQLJ installation and the JDBC and JDK versions you are using.

Command-line syntax
sqlj version_flag_settings

Command-line example



sqlj -version
sqlj -version -version-long
sqlj -version-long
Properties file syntax

n/a

Properties file example

n/a

Default value

disabled

Command Line Echo without Execution (-n)

The -n flag, specified on the command line, instructs the sqlj script to construct the full command line that would be passed to the SQLJ translator, including any SQLJ_OPTIONS settings, and echo it to the user without having the SQLJ translator execute it. This includes capturing and echoing the name of the JVM that would be launched to execute the SQLJ translator and echoing the full class name of the translator. This does not include settings from properties files.

This is useful in showing you the following:

The -n option can appear anywhere on the command line or in the SQLJ_OPTIONS variable.

As with other command-line-only flags, -n does not support =true syntax. Enable it by typing only the flag name.

Consider the following sample scenario:

You would see the following echo:

java -classpath /myclasses/bin sqlj.tools.Sqlj 
-user=scott/tiger@jdbc:oracle:thin:@ -C-classpath=/myclasses/bin -encoding=SJIS 
myapp.sqlj

(This is all one wraparound line.)


Note:
  • As an alternative to -n, you can use the -vm=echo setting.
  • Another effective way to check option settings is to use the -help-long flag. This displays current settings for all options, including other options you set on the command line as well as settings in properties files and in SQLJ_OPTIONS. See "SQLJ Option Information (-help)".

Command-line syntax
-n
Command-line example
-n
Properties file syntax

n/a

Properties file example

n/a

Default value

disabled

Options for Output Files and Directories

The following option specifies encoding for SQLJ input and output source files:

These options specify where SQLJ output files are placed:

Encoding for Input and Output Source Files (-encoding)

The -encoding option specifies the encoding to be applied to .sqlj and .java input files and .java generated files for globalization support. For compatibility with javac, you can use either a space or "=" in setting this option on the command line, as in the following examples:

-encoding=SJIS

-encoding SJIS

If setting sqlj.encoding in a properties file, however, use "=", not a space.

When this option is specified, it is also passed to the Java compiler (unless the -compiler-encoding-flag is off), which uses it to specify encoding for .java files processed by the compiler.

Note the following:

Command-line syntax
-encoding=Java_character_encoding

Command-line example
-encoding=SJIS
Properties file syntax
sqlj.encoding=Java_character_encoding

Properties file example
sqlj.encoding=SJIS
Default value

setting in JVM system property file.encoding

Output Directory for Generated .ser and .class Files (-d)

The -d option specifies the root output directory for profiles generated by the SQLJ translator (relevant for ISO standard code generation, -codegen=iso), and is also passed to the Java compiler to specify the root output directory for .class files generated by the compiler. Whether profiles are generated as .ser files (default) or .class files (if the -ser2class option is enabled) is irrelevant for placement through the -d option.

Whenever a directory is specified, the output files are generated under this directory according to the package name, if applicable. For example, if you have source files in package a.b.c and specify directory /mydir, output files will be placed in the /mydir/a/b/c directory.

If you specify a relative directory path, this will be from your current directory.

For compatibility with javac, you can use either a space or "=" in setting this option on the command line, as in the following examples (both of which make /root the root directory for generated profile files):

-d=/root
-d /root

If setting -d in a properties file, however, use "=", not a space (for example, sqlj.d=/root).

If your current directory is /root/home/mydir and you set the -d option to the relative directory path mysubdir/myothersubdir as follows, then /root/home/mydir/mysubdir/myothersubdir will be the root directory for generated profile files:

-d=mysubdir/myothersubdir

You can also use standard syntax such as a period for the current directory or two periods to go up a level (the second example immediately below will go up a level, then back down to a parallel directory called paralleldir):

-d=.

-d=../paralleldir

If the -d option is empty or not specified, then .class files and .ser files generated by the translation process will be placed as follows:

Command-line syntax
-d=directory_path

Command-line example
-d=/topleveldir/mydir
Properties file syntax
sqlj.d=directory_path

Properties file example
sqlj.d=/topleveldir/mydir
Default value

none (.class files go with .java files; .ser files go with .sqlj files)

Output Directory for Generated .java Files (-dir)

The -dir option specifies the root directory for .java files generated by the SQLJ translator.

Whenever a directory is specified, the output files are generated under this directory according to the package name, if applicable. For example, if you have source files in package a.b.c and specify directory /mydir, then output files will be placed in the /mydir/a/b/c directory.

If you specify a relative directory path, it will be from your current directory.

A simple example is as follows, which will make /root the root directory for generated .java files:

-dir=/root

If your current directory is /root/home/mydir and you set the -dir option to the relative directory path mysubdir/myothersubdir as follows:

-dir=mysubdir/myothersubdir

then /root/home/mydir/mysubdir/myothersubdir will be the root directory for generated .java files.

You can also use standard syntax such as a period for the current directory or two periods to go up a level (the second example immediately below will go up a level, then back down to a parallel directory called paralleldir):

-dir=.

-dir=../paralleldir

If the -dir option is not specified, then files are generated under the same directory as the original .sqlj source file (not under the current directory).

If you specifically want the output directory to be the same as your .sqlj source directory (perhaps overriding other -dir settings, such as in properties files), then you can use the -dir option as follows:

-dir=

Notes:
  • If you specify the -dir option but not the -d option, then generated .class files will also be placed in the directory specified by -dir, but generated .ser files will be placed in the directory of the .sqlj file.
  • Throughout this discussion, the forward-slash (/) was used as the file separator. Be aware, however, that in specifying this or similar options, you must use the file separator of your operating system, as specified in the file.separator system property of your JVM.

Command-line syntax
-dir=directory_path

Command-line example
-dir=/topleveldir/mydir
Properties file syntax
sqlj.dir=directory_path

Properties file example
sqlj.dir=/topleveldir/mydir
Default value

none (use directory of .sqlj source file)

Connection Options

You can use the following options for the database connection for online semantics-checking:

There is no requirement for the SQLJ translator to connect to the same database or schema as the application does at runtime. The connection information in application source code can be independent of the connection information in the SQLJ options. In fact, the deployment environment might be unavailable during development and testing.

Online Semantics-Checking and User Name (-user)

Simple semantics-checking not involving a database connection is referred to as offline checking. The more thorough semantics-checking requiring a connection is referred to as online checking. Online checking offers one of the prime advantages of the SQLJ strong-typing paradigm--type incompatibilities that would normally result in runtime SQL exceptions are caught during translation, before users ever run the application.

The -user option enables online semantics-checking and specifies the user name (schema name) for the exemplar schema, which is the sample database schema that you provide to the translator for it to use in performing the checking. You can also use the -user option to specify the password and URL, as opposed to using the -password and -url options separately.

Note that there is no other flag to enable or disable online semantics-checking; SQLJ enables it or disables it according to the presence or absence of the -user option.

Discussion of the -user option is split into two categories--1) effect of -user when you are employing the default connection context class only; and 2) effect of -user when you are employing nondefault or multiple connection context classes. Nondefault connection context classes are discussed in "Connection Contexts".

General discussion of connection considerations, such as when to use multiple instances of the DefaultContext class and when to declare additional connection context classes, is in "Connection Considerations".


Notes:
  • Some settings of the SQLJ -parse option will disable online semantics-checking, overriding the effect of the -user option. See "Offline Parser (-parse)".
  • For compatibility with the loadjava utility, -u is recognized as equivalent to -user when specified on the command line. See "Options for loadjava Compatibility".
  • Us