Hi James, It is actually not a single sql statement. For simplicity I have just mentioned one. I guess the issue is orginating because of the quotes we need to surrond the word "SNAPPY". I have tried escaping them but no success.
Thanks On 15-Oct-2015 11:46 am, "James Taylor" <jamestay...@apache.org> wrote: > Kind of a guess, but if you're parsing a single SQL statement, it > shouldn't have a semicolon at the end. If that's part of the string, can > you try removing it? > > On Wed, Oct 14, 2015 at 11:11 PM, Ns G <nsgns...@gmail.com> wrote: > >> Hi All, >> >> I have a requirement where in i need to create tables to JDBC (actually >> Spring). >> >> I have written the below code >> >> protected Boolean executeScript(final Reader reader, String action, Long >> serviceId) throws IOException, SQLException { >> try { >> long start = System.currentTimeMillis(); >> final BufferedReader bufferedReader = new >> BufferedReader(reader); >> Class.forName("org.apache.phoenix.jdbc.PhoenixDriver"); >> Connection connection = null; >> String url = "jdbc:phoenix:<regionserver>"; >> connection = DriverManager.getConnection(url); >> for (String sql = bufferedReader.readLine(); sql != null; sql >> = bufferedReader.readLine()) { >> String trimmedSql = sql.trim(); >> final boolean ignore = (trimmedSql.length() == 0 || >> trimmedSql.startsWith("--") || trimmedSql.startsWith("//") || >> trimmedSql.startsWith("/*")); >> if (!ignore) { >> if (trimmedSql.endsWith(";")) { >> trimmedSql = trimmedSql.substring(0, >> trimmedSql.length() - 1); >> } >> Statement stmt = null; >> /* tables */ >> stmt = connection.createStatement(); >> if (action.equalsIgnoreCase("CREATE") && >> (trimmedSql.toUpperCase().startsWith("CREATE") || >> trimmedSql.toUpperCase().startsWith("UPSERT"))){ >> stmt.execute( MessageFormat.format(trimmedSql, >> getSchemNameFromServiceId(serviceId))); >> } else if (action.equalsIgnoreCase("DROP") && >> trimmedSql.toUpperCase().startsWith("DROP")){ >> stmt.execute( MessageFormat.format(trimmedSql, >> getSchemNameFromServiceId(serviceId))); >> } >> stmt.close(); >> /* SPRING CODE */ >> >> /* if >> (action.equalsIgnoreCase("CREATE") && >> (trimmedSql.toUpperCase().startsWith("CREATE") || >> trimmedSql.toUpperCase().startsWith("UPSERT"))){ >> jdbcTemplate.execute( >> MessageFormat.format(trimmedSql, getSchemNameFromServiceId(serviceId))); >> } else if (action.equalsIgnoreCase("DROP") && >> trimmedSql.toUpperCase().startsWith("DROP")){ >> jdbcTemplate.execute( >> MessageFormat.format(trimmedSql, getSchemNameFromServiceId(serviceId)));*/ >> } >> } >> return true; >> } catch (Exception e) { >> return false; >> } >> >> } >> >> My .sql file is under src/main/resources/queries folder. >> >> My sql query is >> >> CREATE TABLE TEST (ID UNSIGNED_LONG NOT NULL PRIMARY KEY, ID1 VARCHAR) >> SALT_BUCKETS=32, COMPRESSION='SNAPPY'; >> >> I am getting below error >> >> org.apache.phoenix.exception.PhoenixParserException: ERROR 604 (42P00): >> Syntax error. Mismatched input. Expecting "STRING_LITERAL", got "<EOF>" at >> line 1, column 113. >> >> I saw that a similiar case was raised previously for 4.2 version, where >> in the user didnt give a comma, But here the query works when executing >> through sqlline. >> >> Can anyone help me please? >> >> Thanks, >> Durga Prasad >> > >