我正在尝试通过从 https://github.com/ascendix/salesforce-jdbc获得的 JDBC 驱动程序与 Salesforce 建立连接
我已经在 SQLWorkbench 工具中设置了这个驱动程序。连接成功。但是,当我执行任何查询(例如SELECT Id from Account)时,它会失败并出现错误
详细日志:
2019-08-14 00:03:14 INFO Creating new connection for [{Default group}/SFJDBC -- https://github.com/ascendix/salesforce-jdbc] for driver=com.ascendix.jdbc.salesforce.ForceDriver and URL=[jdbc:ascendix:salesforce://https://login.salesforce.com/services/Soap/u/37.0;user=xyz;password=xyz]
2019-08-14 00:03:16 INFO WbWin-1 TAB-1: Using DBID=ascendix_jdbc_driver_for_salesforce
2019-08-14 00:03:16 INFO WbWin-1 TAB-1: Using identifier quote character: "
2019-08-14 00:03:16 INFO WbWin-1 TAB-1: Using search string escape character:
2019-08-14 00:03:16 WARN WbWin-1 TAB-1: The driver did not return any table types using getTableTypes(). Using default values: [TABLE, VIEW]
2019-08-14 00:03:16 INFO WbWin-1 TAB-1: Using catalog separator: .
2019-08-14 00:03:16 INFO Connected to: [Ascendix JDBC driver for Salesforce], Database version info: [39], Database version number: [39.0], Driver version: [1.1], JDBC version: [4.0], ID: [WbWin-1 TAB-1]
2019-08-14 00:03:19 WARN The JDBC driver does not support the setMaxRows() function! (null)
2019-08-14 00:03:19 ERROR Error executing:
SELECT Id from Account
java.lang.NullPointerException
java.lang.NullPointerException
at workbench.sql.commands.SelectCommand.execute(SelectCommand.java:131)
at workbench.sql.StatementRunner.runStatement(StatementRunner.java:552)
at workbench.gui.sql.SqlPanel.displayResult(SqlPanel.java:3468)
at workbench.gui.sql.SqlPanel.runStatement(SqlPanel.java:2199)
at workbench.gui.sql.SqlPanel$16.run(SqlPanel.java:2137)
我检查了数据库资源管理器-> 对象选项卡有一个所有对象的列表(帐户、联系人等)但是当我单击数据选项卡检查数据时,也出现了上述相同的错误。
所以我什至尝试在eclipse中编写JDBC代码,那里也连接成功,但是在执行代码时我得到了以下错误
Connected to Salesforce.
com.ascendix.jdbc.salesforce.ForceConnection createStatement
INFO: createStatement
java.lang.NullPointerException
at SFJDBC.main(SFJDBC.java:77)
参考代码:
try
{
final String UserName = "user";
final String Password = "password";
String dbURL = "jdbc:ascendix:salesforce://login.salesforce.com";
String dbUsername = "xyz";
String dbPassword = "xyz";
java.util.Properties connProperties = new java.util.Properties();
connProperties.put(UserName, dbUsername);
connProperties.put(Password, dbPassword);
Class.forName("com.ascendix.jdbc.salesforce.ForceDriver");
Properties connectionProps = new Properties();
connectionProps.put(UserName,dbUsername);
connectionProps.put(Password,dbPassword);
Connection connection = DriverManager.getConnection(dbURL, connectionProps);
System.out.println(connection.toString());
if(!connection.isClosed())
{
System.out.println("Connected to Salesforce.");
Statement stmt = null;
ResultSet rs = null;
stmt = connection.createStatement();
rs = stmt.executeQuery("SELECT Id FROM ACCOUNT");
while (rs.next()) {
System.out.println(rs.getString(1));
}
}
}
catch (Exception e) {
e.printStackTrace();
}
我更关心让驱动程序为 SQL Workbench 工作。任何解决此问题的帮助将不胜感激。
**** 更新 ****
感谢@Mark Rotteveel 根据他的建议对代码进行了更改并发布代码成功。但也需要让这个驱动程序在 SQL Workbench 中工作。
PreparedStatement preparedStatement = connection.prepareStatement("SELECT Id FROM Account limit 3");
preparedStatement = connection.prepareStatement("SELECT Id FROM Account limit 3");
ResultSet resultSet = preparedStatement.executeQuery();
while (resultSet.next())
{
System.out.println(resultSet.getString(1));
}