我正在尝试使用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表。
有什么建议出了什么问题?
由于
答案 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。 只需将其放在引号中即可找到您的表(或将表重命名为所有大写字母)。