Salesforce JDBC连接

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

我正试图通过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=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并希望他们修复它。