Dear teachers, I encountered a trouble when I use hive jdbc to write my data into hive when there is character '\' in my data. My source code is in the attachment. When I run the code, it exits with exceptions: Exception in thread "main" java.lang.StringIndexOutOfBoundsException: String index out of range: -1 at java.lang.AbstractStringBuilder.deleteCharAt(AbstractStringBuilder.java:824) at java.lang.StringBuffer.deleteCharAt(StringBuffer.java:441) at org.apache.hive.jdbc.HivePreparedStatement.updateSql(HivePreparedStatement.java:142) at org.apache.hive.jdbc.HivePreparedStatement.execute(HivePreparedStatement.java:98) at HiveJdbcClient.main(HiveJdbcClient.java:15)
I'm confused why the method org.apache.hive.jdbc.HivePreparedStatement#getCharIndexFromSqlByParamLocation treats the character '\' specially. After all, I can execute the sql " insert into name_age (name,age) values ('Pe\ter', 30) " in the beeline without any problem. In addition, my hive-jdbc version is 1.1.0. Could you help me?
import java.sql.*; public class HiveJdbcClient { private static String driverName = "org.apache.hive.jdbc.HiveDriver"; public static void main(String[] args) throws SQLException { PreparedStatement preparedStatement = null; try { Class.forName(driverName); Connection con = DriverManager.getConnection("jdbc:hive2://127.0.0.1:10000/test_fb", "hdfs", ""); String sqlTemplate = "insert into name_age (name,age) values (?,?)"; preparedStatement = con.prepareStatement(sqlTemplate); preparedStatement.setString(1, "Pe\\ter"); preparedStatement.setInt(2, 30); preparedStatement.execute(); } catch (ClassNotFoundException e) { e.printStackTrace(); System.exit(1); } finally { if (preparedStatement != null) { preparedStatement.close(); } } } }