1998-01-12 21:19:56 -05:00
package example ;
import java.io.* ;
import java.sql.* ;
import java.text.* ;
2001-11-19 17:43:13 -05:00
/ *
2000-04-26 01:32:01 -04:00
*
2001-11-19 18:16:46 -05:00
* $Id : basic . java , v 1 . 10 2001 / 11 / 19 23 : 16 : 44 momjian Exp $
2000-04-26 01:32:01 -04:00
*
1998-01-12 21:19:56 -05:00
* This example tests the basic components of the JDBC driver , and shows
* how even the simplest of queries can be implemented .
*
* To use this example , you need a database to be in existence . This example
* will create a table called basic .
*
2000-04-26 01:32:01 -04:00
* Note : This will only work with post 7 . 0 drivers .
*
1998-01-12 21:19:56 -05:00
* /
public class basic
{
2001-10-25 02:00:05 -04:00
Connection db ; // The connection to the database
Statement st ; // Our statement to run queries with
public basic ( String args [ ] ) throws ClassNotFoundException , FileNotFoundException , IOException , SQLException
{
String url = args [ 0 ] ;
String usr = args [ 1 ] ;
String pwd = args [ 2 ] ;
// Load the driver
Class . forName ( " org.postgresql.Driver " ) ;
// Connect to database
System . out . println ( " Connecting to Database URL = " + url ) ;
db = DriverManager . getConnection ( url , usr , pwd ) ;
System . out . println ( " Connected...Now creating a statement " ) ;
st = db . createStatement ( ) ;
// Clean up the database (in case we failed earlier) then initialise
cleanup ( ) ;
// Now run tests using JDBC methods
doexample ( ) ;
// Clean up the database
cleanup ( ) ;
// Finally close the database
System . out . println ( " Now closing the connection " ) ;
st . close ( ) ;
db . close ( ) ;
//throw postgresql.Driver.notImplemented();
}
2001-11-19 17:43:13 -05:00
/ *
2001-10-25 02:00:05 -04:00
* This drops the table ( if it existed ) . No errors are reported .
* /
public void cleanup ( )
{
try
{
st . executeUpdate ( " drop table basic " ) ;
}
catch ( Exception ex )
{
// We ignore any errors here
}
}
2001-11-19 17:43:13 -05:00
/ *
2001-10-25 02:00:05 -04:00
* This performs the example
* /
public void doexample ( ) throws SQLException
{
System . out . println ( " \ nRunning tests: " ) ;
// First we need a table to store data in
st . executeUpdate ( " create table basic (a int2, b int2) " ) ;
// Now insert some data, using the Statement
st . executeUpdate ( " insert into basic values (1,1) " ) ;
st . executeUpdate ( " insert into basic values (2,1) " ) ;
st . executeUpdate ( " insert into basic values (3,1) " ) ;
// This shows how to get the oid of a just inserted row
// updated for 7.1
st . executeUpdate ( " insert into basic values (4,1) " ) ;
int insertedOID = ( ( org . postgresql . Statement ) st ) . getInsertedOID ( ) ;
System . out . println ( " Inserted row with oid " + insertedOID ) ;
// Now change the value of b from 1 to 8
st . executeUpdate ( " update basic set b=8 " ) ;
System . out . println ( " Updated " + st . getUpdateCount ( ) + " rows " ) ;
// Now delete 2 rows
st . executeUpdate ( " delete from basic where a<3 " ) ;
System . out . println ( " deleted " + st . getUpdateCount ( ) + " rows " ) ;
// For large inserts, a PreparedStatement is more efficient, because it
// supports the idea of precompiling the SQL statement, and to store
// directly, a Java object into any column. PostgreSQL doesnt support
// precompiling, but does support setting a column to the value of a
// Java object (like Date, String, etc).
//
// Also, this is the only way of writing dates in a datestyle independent
// manner. (DateStyles are PostgreSQL's way of handling different methods
// of representing dates in the Date data type.)
PreparedStatement ps = db . prepareStatement ( " insert into basic values (?,?) " ) ;
for ( int i = 2 ; i < 5 ; i + + )
{
ps . setInt ( 1 , 4 ) ; // "column a" = 5
ps . setInt ( 2 , i ) ; // "column b" = i
ps . executeUpdate ( ) ; // executeUpdate because insert returns no data
}
ps . close ( ) ; // Always close when we are done with it
// Finally perform a query on the table
System . out . println ( " performing a query " ) ;
ResultSet rs = st . executeQuery ( " select a, b from basic " ) ;
if ( rs ! = null )
{
// Now we run through the result set, printing out the result.
// Note, we must call .next() before attempting to read any results
while ( rs . next ( ) )
{
int a = rs . getInt ( " a " ) ; // This shows how to get the value by name
int b = rs . getInt ( 2 ) ; // This shows how to get the value by column
System . out . println ( " a= " + a + " b= " + b ) ;
}
rs . close ( ) ; // again, you must close the result when done
}
// Now run the query again, showing a more efficient way of getting the
// result if you don't know what column number a value is in
2001-11-19 18:16:46 -05:00
2001-10-25 02:00:05 -04:00
System . out . println ( " performing another query " ) ;
rs = st . executeQuery ( " select * from basic where b>1 " ) ;
if ( rs ! = null )
{
// First find out the column numbers.
//
// It's best to do this here, as calling the methods with the column
// numbers actually performs this call each time they are called. This
// really speeds things up on large queries.
//
int col_a = rs . findColumn ( " a " ) ;
int col_b = rs . findColumn ( " b " ) ;
// Now we run through the result set, printing out the result.
// Again, we must call .next() before attempting to read any results
while ( rs . next ( ) )
{
int a = rs . getInt ( col_a ) ; // This shows how to get the value by name
int b = rs . getInt ( col_b ) ; // This shows how to get the value by column
System . out . println ( " a= " + a + " b= " + b ) ;
}
rs . close ( ) ; // again, you must close the result when done
}
// Now test maxrows by setting it to 3 rows
2001-11-19 18:16:46 -05:00
2001-10-25 02:00:05 -04:00
st . setMaxRows ( 3 ) ;
System . out . println ( " performing a query limited to " + st . getMaxRows ( ) ) ;
rs = st . executeQuery ( " select a, b from basic " ) ;
while ( rs . next ( ) )
{
int a = rs . getInt ( " a " ) ; // This shows how to get the value by name
int b = rs . getInt ( 2 ) ; // This shows how to get the value by column
System . out . println ( " a= " + a + " b= " + b ) ;
}
rs . close ( ) ; // again, you must close the result when done
// The last thing to do is to drop the table. This is done in the
// cleanup() method.
}
2001-11-19 17:43:13 -05:00
/ *
2001-10-25 02:00:05 -04:00
* Display some instructions on how to run the example
* /
public static void instructions ( )
{
System . out . println ( " \ nThis example tests the basic components of the JDBC driver, demonstrating \ nhow to build simple queries in java. \ n " ) ;
System . out . println ( " Useage: \ n java example.basic jdbc:postgresql:database user password [debug] \ n \ nThe debug field can be anything. It's presence will enable DriverManager's \ ndebug trace. Unless you want to see screens of items, don't put anything in \ nhere. " ) ;
System . exit ( 1 ) ;
}
2001-11-19 17:43:13 -05:00
/ *
2001-10-25 02:00:05 -04:00
* This little lot starts the test
* /
public static void main ( String args [ ] )
{
System . out . println ( " PostgreSQL basic test v6.3 rev 1 \ n " ) ;
if ( args . length < 3 )
instructions ( ) ;
// This line outputs debug information to stderr. To enable this, simply
// add an extra parameter to the command line
if ( args . length > 3 )
DriverManager . setLogStream ( System . err ) ;
// Now run the tests
try
{
basic test = new basic ( args ) ;
}
catch ( Exception ex )
{
System . err . println ( " Exception caught. \ n " + ex ) ;
ex . printStackTrace ( ) ;
}
}
1998-01-12 21:19:56 -05:00
}