2015-04-30 4 views
0

Я пытаюсь подключить базу данных HANA с помощью кода Java, как следоватьSAP HANA имя недопустимой таблицы

try { 
      Class.forName("com.sap.db.jdbc.Driver"); 

      String url = "jdbc:sap://host:30015/?"; 
      String user = "myuser"; 
      String password = "password"; 
      System.out.println("try to connect to HANA !"); 
      Connection cn = java.sql.DriverManager.getConnection(url, user, password); 
      System.out.println("Connection to HANA successful!"); 
      ResultSet rs = cn.createStatement().executeQuery("select * from LIVE2.Connections"); 
      rs.next(); 
      System.out.println(rs.getInt(1)); 
     } catch (Exception e) { 
      e.printStackTrace(); 
     } 

соединения установлено успешно. И следующее исключение возникает

com.sap.db.jdbc.exceptions.JDBCDriverException: SAP DBTech JDBC: [259] (at 20): invalid table name: Could not find table/view CONNECTIONS in schema LIVE2: line 1 col 21 (at pos 20) 
    at com.sap.db.jdbc.exceptions.SQLExceptionSapDB.createException(SQLExceptionSapDB.java:345) 
    at com.sap.db.jdbc.exceptions.SQLExceptionSapDB.generateDatabaseException(SQLExceptionSapDB.java:176) 
    at com.sap.db.jdbc.packet.ReplyPacket.buildExceptionChain(ReplyPacket.java:102) 
    at com.sap.db.jdbc.ConnectionSapDB.execute(ConnectionSapDB.java:1033) 
    at com.sap.db.jdbc.ConnectionSapDB.execute(ConnectionSapDB.java:823) 

В то время, когда я подключаюсь с помощью студии hana, таблица Connections существует в схеме Live2.

Любое предложение, что не так?

Благодаря

+0

ли HANA есть средства акций базы данных? Вы не указываете имя базы данных в строке jdbc, это означает, что вы находитесь на самом сервере. – thst

+0

Shoud Мне нужно указать имя схемы в URL-адресе? Как я указываю в своем запросе. Я только что изменил строку подключения и заменил? отметьте LIVE2. Но такая же проблема –

+0

Возможно, вы создали таблицу с использованием двойных кавычек, которая делает имена с учетом регистра в SQL: Попробуйте указать имена в вашем SQL-запросе: '" select * from \ "LIVE2 \". \ "Connections \" "' –

ответ

0

Мое предположение состоит в следующем: вы создали таблицу с именем «Connections» (верхний и нижний регистр символов

.

Теперь в вашем коде вы не помещаете кавычки вокруг имени, что делает SAP HANA своим линеаризацией автоматического имени объекта: он автоматически делает все символы верхним регистром.

Таким образом, ваш запрос ищет ПОДКЛЮЧЕНИЯ, в то время как таблица называется Connections. Просто поместите его в кавычки, чтобы найти таблицу (или переименовать таблицу во все буквы верхнего регистра).

  • Lars
+0

Lars Если я помещаю кавычки вокруг имени так, следующее исключение: Синтаксическая ошибка sql: неправильный синтаксис рядом с «Соединения»: строка 1 col 15 –

+0

Поскольку кавычки должны быть частью фактической строки SQL, вам необходимо их избежать. Нечто вроде ResultSet rs = cn.createStatement(). ExecuteQuery ("select * from \" LIVE2 \ ". \" Connections \ ""); должен работать. –

0

Документация SAP имеет рабочий образец, и есть базы данных в URL для мультибаз среды.

http://help.sap.com/saphelp_hanaplatform/helpdata/en/ff/15928cf5594d78b841fbbe649f04b4/content.htm

Пример кода со страницы вставляется здесь, чтобы сделать его коротким.

import java.sql.*; 
public class jdemo { 
    public static void main(String[] argv) { 
     Connection connection = null; 
     try {     
     connection = DriverManager.getConnection(
      "jdbc:sap://myhdb:30715/?autocommit=false",myname,mysecret);     
     } catch (SQLException e) { 
     System.err.println("Connection Failed. User/Passwd Error?"); 
     return; 
     } 
     if (connection != null) { 
     try { 
      System.out.println("Connection to HANA successful!"); 
      Statement stmt = connection.createStatement(); 
      ResultSet resultSet = stmt.executeQuery("Select 'hello world' from dummy"); 
      resultSet.next(); 
      String hello = resultSet.getString(1); 
      System.out.println(hello); 
     } catch (SQLException e) { 
      System.err.println("Query failed!"); 
     } 
    } 
    } 
} 

Если у вас есть мультибаз среды URL-адрес JDBC должен выглядеть как этот

jdbc:sap://localhost:30013/?databaseName=tdb1&user=SYSTEM&password=manager 

UPDATE: Список таблиц можно получить через JDBC getTables() вызова, как описано здесь пример How to get all table names from a database?

+0

thanks для ответа. Дорогой «Выбор * из фиктивных работ отлично подходит и для меня», и я просто изменил URL-адрес, как followjdbc: sap: //54.69.200.113: 30015 /? DatabaseName = LIVE2 Но такая же проблема –