闷棍无效的表名

时间:2015-04-30 17:48:38

标签: java jdbc hana

我正在尝试使用java代码连接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 studio进行连接时,在Live2架构中存在Connections表。

有什么建议出了什么问题?

由于

2 个答案:

答案 0 :(得分:0)

SAP文档有一个工作示例,URL中有多个数据库环境的数据库。

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

此处插入页面中的示例代码以缩短它。

Public Structure jidh
    Public name As String
    Public age As Integer
End Structure

如果您有多数据库环境,则JDBC URL应如下所示

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!");
       }
     }
   }
}

UPDATE:可以通过jdbc getTables()调用获取表的列表,如此处所述,例如How to get all table names from a database?

答案 1 :(得分:0)

我的猜测是:你创建了一个名为" Connections" (大写和小写字符。

现在,在您的代码中,您不会在名称周围加上引号,这会使SAP HANA执行其自动对象名称线性化:它会自动使所有字符都为大写。

这样,当表名为Connections时,查询将查找CONNECTIONS。 只需将其放在引号中即可找到您的表(或将表重命名为所有大写字母)。

  • 拉斯