Salesforce JDBC连接
我正试图通过JDBC驱动程序与Salesforce建立联系,该驱动程序是我从 我已经在SQLWorkbench工具中设置了这个驱动程序。连接成功。但是,当我执行任何查询时,如从帐户中选择Id,它会失败并出错 详细日志:Salesforce JDBC连接,jdbc,salesforce,sql-workbench-j,Jdbc,Salesforce,Sql Workbench J,我正试图通过JDBC驱动程序与Salesforce建立联系,该驱动程序是我从 我已经在SQLWorkbench工具中设置了这个驱动程序。连接成功。但是,当我执行任何查询时,如从帐户中选择Id,它会失败并出错 详细日志: 2019-08-14 00:03:14 INFO Creating new connection for [{Default group}/SFJDBC -- https://github.com/ascendix/salesforce-jdbc] for driver=co
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)
我选中了DatabaseExplorer->Objects选项卡,它有一个所有对象(帐户、联系人等)的列表,但是当我点击Data选项卡检查数据时,也出现了同样的上述错误
所以我甚至尝试在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工作台中工作
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));
}
在您的代码中,哪一行是抛出NPE的第77行?这听起来像是JDBC驱动程序不符合JDBC规范,并且在行为良好的JDBC驱动程序将抛出SQLException或返回非null对象的位置返回
null
。您需要向编写该驱动程序的人报告一个bug。第77行->rs=stmt.executeQuery(“从帐户中选择Id”);这表明connection.createStatement()
返回null
,这违反了JDBC规范:向该驱动程序的作者报告一个bug。另见。解决方法似乎是使用预先准备好的语句。非常感谢,@markrottveel改为PreparedStatment起了作用。但正如我所说,我的实际用例是在SQL工作台工具中使用这个JDBC驱动程序(Jar)。你知道我该怎么做吗?你可能不知道,除了向JDBC驱动程序的作者报告一个bug并希望他们修复它。