当我连接到我的sap hana数据库时,它会抛出异常 但如果我没有指定任何数据库名称,那么它默认连接到sap hana的HEX数据库。
com.sap.db.jdbc.exceptions.JDBCDriverException: SAP DBTech JDBC: Cannot connect to jdbc:sap://192.168.33.114:39015/ [SAP DBTech JDBC: [2]: general error: SYSTEMDB not connected]
这是虚拟代码
import java.sql.Connection;
import java.sql.ResultSet;
public class SapConnection {
public static void main(String[] args) {
// TODO Auto-generated method stub
try {
Class.forName("com.sap.db.jdbc.Driver");
String url = "jdbc:sap://192.168.33.114:39015/?databaseName=abcd";
String user = "abc";
String password = "xyz";
Connection cn = java.sql.DriverManager.getConnection(url, user, password);
// ... do whatever with the results ...
}
catch (Exception e) {
e.printStackTrace();
}
}
}
答案 0 :(得分:3)
当连接到MDC租户数据库时,要连接的端口不是30..15而是30..13,因为连接违反了在30..13端口上侦听的nameserver
进程。
将连接字符串更改为
String url = "jdbc:sap://192.168.33.114:39013/?databaseName=abcd";
应该让它发挥作用。
编辑
另一种连接方法是避免完全提供端口号,并让HANA自己解决这些细节问题。在这种情况下,仅提供instanceNumber
和databaseName
就足够了。
示例(数据库在主机skullbox.lab.cat5
上运行):
> java -jar ngdbc.jar -u <username>,<password> -n skullbox.lab.cat5 -d S20 -i
20
Connected.
| |
-------------------------------
| 2017-08-15 17:04:53.0730000 |
1 rows.
相应的JDBC URL如下所示:
jdbc:sap://skullbox.lab.cat5?databaseName=S20&instanceNumber=20