function readOnly(count){ }
Starting November 20, the site will be set to read-only. On December 4, 2023,
forum discussions will move to the Trailblazer Community.
+ Start a Discussion
_why the unlucky stiff_why the unlucky stiff 

Web Service Query resultset to internal database

Hello, I have figured out how to login and query records. I can store the resultset in a strongly typed Object like Account or sObject for partner WSDL or just the plain Queryresult. However, I now need to move these records (insert) them into an internal database. I am new to java. Can anyone offer any pointers on how to do this?

Navatar_DbSupNavatar_DbSup

Hi,

This is how you can save your queried result into internal DB like MS Access etc. For each different DataBase you will need to create different ODBC Bridge. This is the code to show how you can save your result into MS Access. First of all you will need to create a System DSN (Data Source Name).

 

Steps to create system DSN (For Windows):

 

1. Create an Access Database and create table (Contact) in it. Remember its path where it is saved on you disk.

2. Goto Control Panel-->Administrative Tools-->Data Sources (ODBC)-->System DSN (tab)-->Add...-->Microsoft Access Driver(*.mdb)-->Finish

3. Define "Data Source Name"

4. Click Select (under Database :)

5. Select database you have just created and click OK (on all other windows).

 

 

/**Program**/

 

package myPackage;

 

import com.sforce.soap.enterprise.Connector;

import com.sforce.soap.enterprise.EnterpriseConnection;

import com.sforce.soap.enterprise.QueryResult;

import com.sforce.soap.enterprise.SaveResult;

import com.sforce.soap.enterprise.sobject.Account;

import com.sforce.soap.enterprise.sobject.Contact;

import com.sforce.soap.enterprise.sobject.SObject;

import com.sforce.soap.enterprise.sobject.User;

import com.sforce.soap.enterprise.sobject.Profile;

import com.sforce.ws.ConnectionException;

import com.sforce.ws.ConnectorConfig;

import java.sql.*;

 

 

public class SaveRecord

{

   static final String USERNAME = "username";

   static final String PASSWORD = "password+sectoken";

   static EnterpriseConnection connection;

   public static ConnectorConfig config = new ConnectorConfig();

 

   public static void main(String[] args)

   {

     config.setUsername(USERNAME);

     config.setPassword(PASSWORD);

     saveCon();

   }

  

   public static void saveCon()

   {

    try

      {

       Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");

          Connection con = DriverManager.getConnection("jdbc:odbc:myDSN"); /*connecting to Access DB*/ /*myDSN is DSN that i had created*/

          Statement stmt = con.createStatement();

          connection = Connector.newConnection(config);      /*connecting to SFDC*/

          QueryResult queryResultsCon = connection.query("SELECT Id, FirstName, LastName FROM Contact LIMIT 1");

          SObject[] objListCon = queryResultsCon.getRecords();

          Contact conIns  = (Contact)objListCon[0];

          int res = stmt.executeUpdate("insert into contact values('"+conIns.getId()+"','"+conIns.getFirstName()+"','"+conIns.getLastName()+"')");             /*contact is the table i created in my access database*/

          System.out.println("No.of contacts inserted:: "+res);

      }

     

      catch(Exception ex)

      {

       System.out.println("@@@"+ ex.getMessage());

      }

   }

}

 

Did this answer your question? If not, let me know what didn't work, or if so, please mark it solved.