# Activity 2: Run SQL using the client driver

This activity uses Derby within a client/server configuration by using the Network Server. The `ij` tool is the client application that connects to the Derby Network Server. In this activity, you create a database called `seconddb` and run some basic SQL statements.

This activity assumes that you know how to open a command shell and change to the `DERBYTUTOR` directory.

You use two command windows (referred to as Shell-1 and Shell-2) in this activity. You use Shell-1 to start the Derby Network Server and display Network Server messages. You use Shell-2 to establish a client connection to the Network Server using `ij` and then perform some basic SQL operations.

1. Open a command window (Shell-1) and change to the `DERBYTUTOR` directory.
2. Start the Network Server.

   Operating System | Command
   --- | ---

   UNIX (Korn Shell)

       java -jar $DERBY_HOME/lib/derbyrun.jar server start
       Apache Derby Network Server - 10.2.2.0 - (485682) started and
        ready to accept connections on port 1527 at 2007-01-04 20:04:33.511 GMT

   Windows

       java -jar %DERBY_HOME%\lib\derbyrun.jar server start
       Apache Derby Network Server - 10.2.2.0 - (485682) started and
        ready to accept connections on port 1527 at 2007-01-04 20:04:33.511 GMT

   A Network Server startup message appears in the Shell-1 command window.
3. Open another command window (Shell-2). Change to the `DERBYTUTOR` directory.
4. Start `ij`. If you included the `DERBY_HOME/bin` directory in your PATH environment variable, type:

       ij

   Otherwise, you can use the `java` command to start the `ij` tool.

   Operating System | Command
   --- | ---

   UNIX (Korn Shell)

       java -jar $DERBY_HOME/lib/derbyrun.jar ij
       ij version 10.2

   Windows

       java -jar %DERBY_HOME%\lib\derbyrun.jar ij
       ij version 10.2

   You will enter all subsequent commands from the network client, so you will type the commands in the Shell-2 command window.
5. Create and open a connection to the database using the client driver.

       CONNECT 'jdbc:derby://localhost:1527/seconddb;create=true';

   Remember: A client connection URL contains a hostname and a port number. For example: `//localhost:1527/`
6. Create a table with two columns (ID and NAME) using the following SQL statement:

       CREATE TABLE SECONDTABLE
           (ID INT PRIMARY KEY,
           NAME VARCHAR(14));
       0 rows inserted/updated/deleted

7. Insert three records into the table.

       INSERT INTO SECONDTABLE VALUES
           (100,'ONE HUNDRED'),(200,'TWO HUNDRED'),(300,'THREE HUNDRED');
       3 rows inserted/updated/deleted

8. Select all of the records in the table.

       SELECT * FROM SECONDTABLE;
       ID         |NAME
       ------------------------
       100        |ONE HUNDRED
       200        |TWO HUNDRED
       300        |THREE HUNDRED

       3 rows selected

9. Select a subset of records from the table by specifying a `WHERE` clause.

       SELECT * FROM SECONDTABLE WHERE ID=200;
       ID         |NAME
       ------------------------
       200        |TWO HUNDRED

       1 row selected

10. Exit `ij`.

        exit;

11. Shut down the Derby Network Server.

    Operating System | Command
    --- | ---

    UNIX (Korn Shell)

        java -jar $DERBY_HOME/lib/derbyrun.jar server shutdown
        Apache Derby Network Server - 10.2.2.0 - (485682) shutdown
         at 2007-05-04 20:08:44.247 GMT

    Windows

        java -jar %DERBY_HOME%\lib\derbyrun.jar server shutdown
        Apache Derby Network Server - 10.2.2.0 - (485682) shutdown
         at 2007-05-04 20:08:44.247 GMT

    The server shutdown confirmation appears in both command windows.

Activity notes

The client connection URL contains network information (hostname and portnumber) not found in the URL for an embedded connection. This information tells the client driver the location of the Network Server. The client driver sends requests to and receives responses from the Network Server.

In this activity the Derby database engine is embedded in the Network Server and returns data to the `ij` client (a client/server configuration). In contrast, establishing a connection using an embedded URL (one without `//localhost:1527/`) would have caused the Derby engine to be embedded in the `ij` application (an embedded configuration).

A Network Server startup message is written to the `derby.log` file along with the standard database engine messages. For example:

    Apache Derby Network Server - 10.2.2.0 - (485682) started and ready to
     accept connections on port 1527 at 2007-05-04 20:04:33.511 GMT
       ... Database engine messages not shown ...
    2007-05-04 20:08:43.883 GMT:
    Shutting down instance c013800d-010f-82e9-fa03-00000011f280

In this configuration, multiple client programs can connect to the Network Server and access the database simultaneously. (This activity does not demonstrate this capability.)

Parent topic: Self-study tutorial for users new to Derby