2

我正在尝试通过从 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));
            }
4

0 回答 0