极简Java连接TimesTen程序

TimesTen支持用JDBC连接,这是一个非常吸引人的特性,这意味着连接TimesTen的代码和连接传统的关系型数据库的代码几乎没有区别。

其实根本的原因在于TimesTen也是关系型数据库,只不过在内存运行而已,对于SQL-92标准完全支持,因此开发者的学习成本非常之低。

事实上,TimesTen对于Java开发者提供的文档也非常简单,只有一个电子文档,即Java Developer’s Guide。总共110页已经够少,而入门则仅需要看第2章Working with TimesTen Databases in JDBC中的Managing TimesTen database connections 和 Managing TimesTen data 两节即可。

TimesTen安装包中也带示例程序,在 $TT_HOME/quickstart/sample_code/jdbc 目录下,这其中的TTJdbcExamples.java是一个极佳的示例程序。

和使用JDBC连接Oracle相比,连接TimesTen的区别主要在指定连接驱动和DSN上,下面是一个简单的框架:

import java.sql.*;

public class HelloWorld
{
  public static void main (String[]args)
  {

    try {
      Class.forName ("com.timesten.jdbc.TimesTenDriver");
    } catch (ClassNotFoundException ex)
    {
      // 输出错误信息
    }

    try {

        String URL = "jdbc:timesten:direct:DSN=sampledb_1122;uid=tthr;pwd=timesten";

        Connection conn = DriverManager.getConnection (URL);

        // 执行SQL语句

        conn.close();

    } catch (SQLException ex) {
      // 输出错误信息
    }

  }

}

这里有几点需要说明:
1. timesten有两个driver,com.timesten.jdbc.TimesTenDriver用于direct连接,com.timesten.jdbc.TimesTenClientDriver 用于C/S连接;前者的性能更好,但Java应用和TimesTen数据库必须在同一主机。
2. 相应的,建立连接的URL格式为jdbc:timesten:{direct|client}:dsn=DSNname;[DSNattributes;],其中DSNattributes和ttisql实用程序中使用的格式是完全一致的。
3. 如果希望用instance administrator连接TimesTen,只需在连接URL中不指定用户名和口令即可

下面给出完整的实例程序HelloWorld.java:

import java.sql.*;

public class HelloWorld
{
  public static void main (String[]args)
  {

    try {
      Class.forName ("com.timesten.jdbc.TimesTenDriver");
    } catch (ClassNotFoundException ex)
    {
      System.out.println ("Class Not Found!");
    }

    try {
        String URL = "jdbc:timesten:direct:DSN=sampledb_1122;uid=tthr;pwd=timesten";
        int intValues = 12345;

        Connection conn = DriverManager.getConnection (URL);
        Statement stmt = conn.createStatement();

        stmt.executeUpdate("CREATE TABLE a(a int)");

        PreparedStatement pstmt = conn.prepareStatement ( "INSERT INTO a VALUES (?)" );
        pstmt.setInt(1, intValues);
            pstmt.executeUpdate();

        ResultSet rs = stmt.executeQuery("SELECT * FROM a");

            int numCols = rs.getMetaData().getColumnCount();

            System.out.println("Fetching data");
            System.out.println("Data:");
            while (rs.next()) {
                for (int i = 1; i <= numCols; i++) {
                    System.out.print("\t"+rs.getObject(i));
                }
                System.out.println();
            }

        stmt.close();
        pstmt.close();
        conn.close ();

    } catch (SQLException ex) {
      reportSQLExceptions (ex);
    }

  }

  static int reportSQLExceptions (SQLException ex)
  {

    int errCount = 0;
    if (ex != null) {
      System.err.println ("\n--- SQLException caught ---");
      ex.printStackTrace ();

      while (ex != null) {
        System.err.println ("SQL State: " + ex.getSQLState ());
        System.err.println ("Message: " + ex.getMessage ());
        System.err.println ("Error Code: " + ex.getErrorCode ());
        errCount++;
        ex = ex.getNextException ();
        System.err.println ();
      }
    }

    return errCount;
  }
}

编译程序:

$ javac HelloWorld.java

执行程序前,先需要在TimesTen中建立用户:

$ ttisql -v1 sampledb_1122

Command> create user tthr identified by timesten;

User created.

Command> grant create table, create session to tthr;

Command> exit

确认此用户可以连接到TimesTen:

$ ttisql -v1 "dsn=sampledb_1122;uid=tthr;pwd=timesten" 
Command> exit

运行程序,程序在数据库中执行DDL建表语句,然后插入一条数据,接着使用SELECT读取数据。

$ java HelloWorld
Fetching data
Data:
        12345

从上面的示例程序可以看到,使用Java连接TimesTen非常简单,只需要根据direct或是C/S模式使用指定的Driver,并熟悉DSN的格式即可,剩下的执行SQL语句部分和Oracle没有区别。

So easy, 妈妈再也不用担心我不会连TimesTen了。

你可能感兴趣的:(java,开发人员,内存数据库,timesten)