You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@hive.apache.org by "Sergio Lob (JIRA)" <ji...@apache.org> on 2015/06/16 20:39:00 UTC

[jira] [Created] (HIVE-11024) Error inserting a date value via parameter marker (PreparedStatement.setDate)

Sergio Lob created HIVE-11024:
---------------------------------

             Summary: Error inserting a date value via parameter marker (PreparedStatement.setDate)
                 Key: HIVE-11024
                 URL: https://issues.apache.org/jira/browse/HIVE-11024
             Project: Hive
          Issue Type: Bug
          Components: Hive
    Affects Versions: 0.14.0
         Environment: Linux lnxx64r6 2.6.32-131.0.15.el6.x86_64 #1 SMP Tue May 10 15:42:40 EDT 2011 x86_64 x86_64 x86_64 GNU/Linux
            Reporter: Sergio Lob


Inserting a row with a Date parameter marker (PreparedStatement.setDate()) fails with ParseException:

Exception: org.apache.hive.service.cli.HiveSQLException: Error while compiling statement: FAILED: ParseException line 1:41 mismatched input '-' expecting ) near '1980' in statement
org.apache.hive.service.cli.HiveSQLException: Error while compiling statement: FAILED: ParseException line 1:41 mismatched input '-' expecting ) near '1980' in statement
        at org.apache.hive.jdbc.Utils.verifySuccess(Utils.java:231)
        at org.apache.hive.jdbc.Utils.verifySuccessWithInfo(Utils.java:217)
        at org.apache.hive.jdbc.HiveStatement.execute(HiveStatement.java:254)
        at org.apache.hive.jdbc.HiveStatement.executeUpdate(HiveStatement.java:4
06)
        at org.apache.hive.jdbc.HivePreparedStatement.executeUpdate(HivePrepared
Statement.java:117)
        at repro1.main(repro1.java:90)
Caused by: org.apache.hive.service.cli.HiveSQLException: Error while compiling statement: FAILED: ParseException line 1:41 mismatched input '-' expecting ) near '1980' in statement
        at org.apache.hive.service.cli.operation.Operation.toSQLException(Operat
ion.java:314)
        at org.apache.hive.service.cli.operation.SQLOperation.prepare(SQLOperati
on.java:102)
        at org.apache.hive.service.cli.operation.SQLOperation.runInternal(SQLOpe
ration.java:171)



++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
REPRO:
----------

/*
 * It may be freely used, modified, and distributed with no restrictions.
 */
import java.sql.Connection;
import java.sql.DatabaseMetaData;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.sql.PreparedStatement;
import java.sql.ResultSetMetaData;
import java.io.Reader;

/**
 */
public class repro1
{
  /**
   * Main method.
   * 
   * @param args
   *    no arguments required
   */
  public static void main(String [] args)
  {
    Connection con = null;
    Statement stmt = null;
    ResultSet rst = null;

    String drptab = "DROP TABLE SDLJUNK";
    String crttab = "CREATE TABLE SDLJUNK(I INT, D DATE)";
    String instab = "INSERT INTO TABLE SDLJUNK VALUES (1, ? )";

    try {

      System.out.println("=================================================");
      System.out.println("Problem description:");
      System.out.println("After setting a value for a DATE parameter marker ");
      System.out.println(" with PreparedStatement.setDate(),"); 
      System.out.println(" an INSERT statement fails execution with error:  "); 
      System.out.println("                                                  "); 
      System.out.println("  Error while compiling statement: FAILED: ");
      System.out.println("ParseException line 1:78 mismatched input '-' ");
      System.out.println(" expecting ) near '1980' in statement"); 
      System.out.println("=================================================");
      System.out.println("");
      // Create new instance of JDBC Driver and make connection.
      System.out.println("Registering Driver.");
      Class.forName("org.apache.hive.jdbc.HiveDriver");

      String url="jdbc:hive2://hwhive:10000/R729999D";
      System.out.println("Making a connection to: "+url);
      con = DriverManager.getConnection(url, "hive", "hive");     
      System.out.println("Connection successful.\n");

      DatabaseMetaData dbmd = con.getMetaData();

      System.out.println("getDatabaseProductName() = "+dbmd.getDatabaseProductName());
      System.out.println("getDatabaseProductVersion() = "+dbmd.getDatabaseProductVersion());
      System.out.println("getDriverName() = "+dbmd.getDriverName());
      System.out.println("getDriverVersion() = "+dbmd.getDriverVersion());

      try {
         System.out.println("con.createStatement()");
         stmt = con.createStatement();

         System.out.println(drptab);
         stmt.executeUpdate(drptab);
         }

      catch (Exception ex)
      {	
        System.out.println("Exception: " + ex);
      }

      System.out.println(crttab);
      stmt.executeUpdate(crttab);

      System.out.println("preparing: "+instab);
      PreparedStatement pstmt = con.prepareStatement(instab);


      System.out.println("calling setDate() for parameter marker");

      java.sql.Date dt = java.sql.Date.valueOf("1980-12-26");
      pstmt.setDate(1, dt);
//    pstmt.setString(1, "1980-12-26");

      System.out.println("executing: "+instab);
      pstmt.executeUpdate();

//    System.out.println("committing");
//    con.commit();
    }

    catch (Exception ex)
    {	
      System.out.println("Exception: " + ex);
      ex.printStackTrace();
    }

    finally
    {			
      if (con != null)
      {	
        try
        {	
          // Close the connection
          con.close();				
        }
        catch (SQLException ex)
        {	
          System.out.println("SQLException: " + ex);
        }
      }
    } 
  }

  //-------------------------------------------------------------------
  // dispResultSet
  // Displays all columns and rows in the given result set
  //-------------------------------------------------------------------

  private static void dispResultSet (ResultSet rs)
	throws SQLException
  {
    int i;

    // Get the ResultSetMetaData.  This will be used for
    // the column headings

    ResultSetMetaData rsmd = rs.getMetaData ();

    // Get the number of columns in the result set

    int numCols = rsmd.getColumnCount ();

    // Display column headings

    for (i=1; i<=numCols; i++) {
      if (i > 1) System.out.print(",");
      System.out.print(rsmd.getColumnLabel(i));
    }

    System.out.println("");

    // Display data, fetching until end of the result set

    boolean more = rs.next ();
    while (more) {

      // Loop through each column, getting the
      // column data and displaying

      for (i=1; i<=numCols; i++) {
        if (i > 1) System.out.print(",");
          System.out.print(rs.getString(i));
      }
      System.out.println("");

      // Fetch the next result set row

      more = rs.next ();
    }
  }
}

+++++++++++++++++++++++++++++++++++++++++++++++++++++++

REPRO OUTPUT:
----------------------

Picked up _JAVA_OPTIONS: -Xms128m -Xmx256m
=================================================
Problem description:
After setting a value for a DATE parameter marker 
 with PreparedStatement.setDate(),
 an INSERT statement fails execution with error:  
                                                  
  Error while compiling statement: FAILED: 
ParseException line 1:78 mismatched input '-' 
 expecting ) near '1980' in statement
=================================================

Registering Driver.
Making a connection to: jdbc:hive2://hwhive:10000/R729999D
log4j:WARN No appenders could be found for logger (org.apache.hive.jdbc.Utils).
log4j:WARN Please initialize the log4j system properly.
log4j:WARN See http://logging.apache.org/log4j/1.2/faq.html#noconfig for more info.
Connection successful.

getDatabaseProductName() = Apache Hive
getDatabaseProductVersion() = 0.14.0.2.2.0.0-2041
getDriverName() = Hive JDBC
getDriverVersion() = 0.14.0.2.2.0.0-2041
con.createStatement()
DROP TABLE SDLJUNK
CREATE TABLE SDLJUNK(I INT, D DATE)
preparing: INSERT INTO TABLE SDLJUNK VALUES (1, ? )
calling setDate() for parameter marker
executing: INSERT INTO TABLE SDLJUNK VALUES (1, ? )
Exception: org.apache.hive.service.cli.HiveSQLException: Error while compiling statement: FAILED: ParseException line 1:41 mismatched input '-' expecting ) near '1980' in statement
org.apache.hive.service.cli.HiveSQLException: Error while compiling statement: FAILED: ParseException line 1:41 mismatched input '-' expecting ) near '1980' in statement
	at org.apache.hive.jdbc.Utils.verifySuccess(Utils.java:231)
	at org.apache.hive.jdbc.Utils.verifySuccessWithInfo(Utils.java:217)
	at org.apache.hive.jdbc.HiveStatement.execute(HiveStatement.java:254)
	at org.apache.hive.jdbc.HiveStatement.executeUpdate(HiveStatement.java:406)
	at org.apache.hive.jdbc.HivePreparedStatement.executeUpdate(HivePreparedStatement.java:117)
	at repro1.main(repro1.java:90)
Caused by: org.apache.hive.service.cli.HiveSQLException: Error while compiling statement: FAILED: ParseException line 1:41 mismatched input '-' expecting ) near '1980' in statement
	at org.apache.hive.service.cli.operation.Operation.toSQLException(Operation.java:314)
	at org.apache.hive.service.cli.operation.SQLOperation.prepare(SQLOperation.java:102)
	at org.apache.hive.service.cli.operation.SQLOperation.runInternal(SQLOperation.java:171)
	at org.apache.hive.service.cli.operation.Operation.run(Operation.java:256)
	at org.apache.hive.service.cli.session.HiveSessionImpl.executeStatementInternal(HiveSessionImpl.java:376)
	at org.apache.hive.service.cli.session.HiveSessionImpl.executeStatementAsync(HiveSessionImpl.java:363)
	at org.apache.hive.service.cli.CLIService.executeStatementAsync(CLIService.java:247)
	at org.apache.hive.service.cli.thrift.ThriftCLIService.ExecuteStatement(ThriftCLIService.java:401)
	at org.apache.hive.service.cli.thrift.TCLIService$Processor$ExecuteStatement.getResult(TCLIService.java:1313)
	at org.apache.hive.service.cli.thrift.TCLIService$Processor$ExecuteStatement.getResult(TCLIService.java:1298)
	at org.apache.thrift.ProcessFunction.process(ProcessFunction.java:39)
	at org.apache.thrift.TBaseProcessor.process(TBaseProcessor.java:39)
	at org.apache.hive.service.auth.TSetIpAddressProcessor.process(TSetIpAddressProcessor.java:56)
	at org.apache.thrift.server.TThreadPoolServer$WorkerProcess.run(TThreadPoolServer.java:206)
	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
	at java.lang.Thread.run(Thread.java:745)
Caused by: java.lang.RuntimeException: org.apache.hadoop.hive.ql.parse.ParseException:line 1:41 mismatched input '-' expecting ) near '1980' in statement
	at org.apache.hadoop.hive.ql.parse.ParseDriver.parse(ParseDriver.java:202)
	at org.apache.hadoop.hive.ql.parse.ParseDriver.parse(ParseDriver.java:166)
	at org.apache.hadoop.hive.ql.Driver.compile(Driver.java:389)
	at org.apache.hadoop.hive.ql.Driver.compile(Driver.java:303)
	at org.apache.hadoop.hive.ql.Driver.compileInternal(Driver.java:1067)
	at org.apache.hadoop.hive.ql.Driver.compileAndRespond(Driver.java:1061)
	at org.apache.hive.service.cli.operation.SQLOperation.prepare(SQLOperation.java:100)
	... 15 more

+++++++++++++++++++++++++++++++++++++++++++++++++++++++
ENVIRONMENT:
---------------------
export CLASSPATH=.:/qas/hive14/hive-serde.jar:/qas/hive14/hive-exec.jar:/qas/hive14/slf4j-api-1.7.5.jar:/qas/hive14/libfb303-0.9.0.jar:/qas/hive14/hive-service.jar:/qas/hive14/httpclient-4.2.5.jar:/qas/hive14/hive-metastore.jar:/qas/hive14/hive-common.jar:/qas/hive14/httpcore-4.2.5.jar:/qas/hive14/hive-jdbc.jar:/qas/hive14/hadoop-common.jar:/qas/hive14/libthrift-0.9.0.jar:/qas/hive14/hive-shims.jar:/qas/hive14/log4j-1.2.16.jar:/qas/hive14/commons-logging-1.1.3.jar
export PATH=$JDK_HOME/bin:$PATH






--
This message was sent by Atlassian JIRA
(v6.3.4#6332)