datestyle.java
上传用户:blenddy
上传日期:2007-01-07
资源大小:6495k
文件大小:5k
源码类别:

数据库系统

开发平台:

Unix_Linux

  1. package example;
  2. import java.io.*;
  3. import java.sql.*;
  4. import java.text.*;
  5. /**
  6.  * This example tests the various date styles that are available to postgresql.
  7.  *
  8.  * To use this example, you need a database to be in existence. This example
  9.  * will create a table called datestyle.
  10.  *
  11.  */
  12. public class datestyle
  13. {
  14.   Connection db; // The connection to the database
  15.   Statement  st; // Our statement to run queries with
  16.   
  17.   // This is our standard to compare results with.
  18.   java.sql.Date standard;
  19.   
  20.   // This is a list of the available date styles including variants.
  21.   // These have to match what the "set datestyle" statement accepts.
  22.   String styles[] = {
  23.     "postgres,european",
  24.     "postgres,us",
  25.     "iso", // iso has no variants - us/european has no affect
  26.     "sql,european",
  27.     "sql,us",
  28.     "german" // german has no variants - us/european has no affect
  29.   };
  30.   
  31.   public datestyle(String args[]) throws ClassNotFoundException, FileNotFoundException, IOException, SQLException
  32.   {
  33.     String url = args[0];
  34.     String usr = args[1];
  35.     String pwd = args[2];
  36.     
  37.     // Load the driver
  38.     Class.forName("postgresql.Driver");
  39.     
  40.     // Connect to database
  41.     System.out.println("Connecting to Database URL = " + url);
  42.     db = DriverManager.getConnection(url, usr, pwd);
  43.     
  44.     System.out.println("Connected...Now creating a statement");
  45.     st = db.createStatement();
  46.     
  47.     // Clean up the database (in case we failed earlier) then initialise
  48.     cleanup();
  49.     init();
  50.     
  51.     // Now run tests using JDBC methods
  52.     doexample();
  53.     
  54.     // Clean up the database
  55.     cleanup();
  56.     
  57.     // Finally close the database
  58.     System.out.println("Now closing the connection");
  59.     st.close();
  60.     db.close();
  61.     
  62.   }
  63.   
  64.   /**
  65.    * This drops the table (if it existed). No errors are reported.
  66.    */
  67.   public void cleanup()
  68.   {
  69.     try {
  70.       st.executeUpdate("drop table datestyle");
  71.     } catch(Exception ex) {
  72.       // We ignore any errors here
  73.     }
  74.   }
  75.   
  76.   /**
  77.    * This initialises the database for this example
  78.    */
  79.   public void init() throws SQLException
  80.   {
  81.     // Create a table holding a single date
  82.     st.executeUpdate("create table datestyle (dt date)");
  83.     
  84.     // Now create our standard date for the test.
  85.     //
  86.     // NB: each component of the date should be different, otherwise the tests
  87.     //     will not be valid.
  88.     //
  89.     // NB: January = 0 here
  90.     //
  91.     standard = new java.sql.Date(98,0,8);
  92.     
  93.     // Now store the result.
  94.     //
  95.     // This is an example of how to set a date in a date style independent way.
  96.     // The only way of doing this is by using a PreparedStatement.
  97.     //
  98.     PreparedStatement ps = db.prepareStatement("insert into datestyle values (?)");
  99.     ps.setDate(1,standard);
  100.     ps.executeUpdate();
  101.     ps.close();
  102.     
  103.   }
  104.   
  105.   /**
  106.    * This performs the example
  107.    */
  108.   public void doexample() throws SQLException
  109.   {
  110.     System.out.println("nRunning tests:");
  111.     
  112.     for(int i=0;i<styles.length;i++) {
  113.       System.out.print("Test "+i+" - "+styles[i]);
  114.       System.out.flush();
  115.       
  116.       // set the style
  117.       st.executeUpdate("set datestyle='"+styles[i]+"'");
  118.       
  119.       // Now because the driver needs to know what the current style is,
  120.       // we have to run the following:
  121.       st.executeUpdate("show datestyle");
  122.       // This is a limitation, but there is no real way around this.
  123.       
  124.       // Now we query the table.
  125.       ResultSet rs = st.executeQuery("select dt from datestyle");
  126.       
  127.       // Throw an exception if there is no result (if the table is empty
  128.       // there should still be a result).
  129.       if(rs==null)
  130. throw new SQLException("The test query returned no data");
  131.       
  132.       while(rs.next()) {
  133. // The JDBC spec states we should only read each column once.
  134. // In the current implementation of the driver, this is not necessary.
  135. // Here we use this fact to see what the query really returned.
  136. if(standard.equals(rs.getDate(1)))
  137.   System.out.println(" passed, returned "+rs.getString(1));
  138. else
  139.   System.out.println(" failed, returned "+rs.getString(1));
  140.       }
  141.       rs.close();
  142.     }
  143.   }
  144.   
  145.   /**
  146.    * Display some instructions on how to run the example
  147.    */
  148.   public static void instructions()
  149.   {
  150.     System.out.println("nThis example tests the drivers ability to handle dates correctly if thenbackend is running any of the various date styles that it supports.nIdealy this should work fine. If it doesn't, then there is something wrongnpossibly in postgresql.Connection or in the backend itself. If this does occurnthen please email a bug report.n");
  151.     System.out.println("Useage:n java example.datestyle jdbc:postgresql:database user password [debug]nnThe debug field can be anything. It's presence will enable DriverManager'sndebug trace. Unless you want to see screens of items, don't put anything innhere.");
  152.     System.exit(1);
  153.   }
  154.   
  155.   /**
  156.    * This little lot starts the test
  157.    */
  158.   public static void main(String args[])
  159.   {
  160.     System.out.println("PostgreSQL datestyle test v6.3 rev 1n");
  161.     
  162.     if(args.length<3)
  163.       instructions();
  164.     
  165.     // This line outputs debug information to stderr. To enable this, simply
  166.     // add an extra parameter to the command line
  167.     if(args.length>3)
  168.       DriverManager.setLogStream(System.err);
  169.     
  170.     // Now run the tests
  171.     try {
  172.       datestyle test = new datestyle(args);
  173.     } catch(Exception ex) {
  174.       System.err.println("Exception caught.n"+ex);
  175.       ex.printStackTrace();
  176.     }
  177.   }
  178. }