Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

...

This is an example configuration file:<pre>

Code Block
languagehtml/xml
<dbconnector version="2.0">

...



   <queryset name="myStore" timeStampFormat="yyyy-MM-dd HH:mm:ss"

...

 
                            dateFormat="yyyy-MM-dd"

...

 
                            xmlDateFormat="yyyy-MM-dd">

...



      <!-- HSQLDB -->

...


      <resource-def>

...


        <url>jdbc:hsqldb:file:mystore</

...

url>       
        <driver>org.hsqldb.jdbcDriver</driver>

...


        <user>sa</user>

...


        <password></password>

...


      </resource-def>

...


      <query name="allOrders">

...


         <retrieve> 
           <statement>               
              SELECT * FROM "orders"                     
           </statement>                                     
        </retrieve>       
      </query>
      <query name="orders" autocreate="true">

...


         <retrieve> <!-- Maps to the HTTP GET method -->

...


            <statement>
                SELECT * FROM "orders" WHERE "orderId"='{orderId}'

...

      </query>

...


            </statement>                                     
         </retrieve>
      </query>
      <query name="allProducts">

...


        <retrieve> 
          <statement>               
               SELECT * FROM "products"                
           </statement>                                     
        </retrieve>       
      </query>
   </queryset> 
   
</dbconnector>

The xml elements in the file are as follows:*

  • The

...

  • queryset

...

  • element groups together a Data Source definition and a list of

...

  • query elements.

...

  • The SQL queries defined under each

...

  • query

...

  • element will be executed against the respective Data Source.

...

  • Each

...

  • query element defines a SQL statement for each CRUD operation (create, retrieve, update, delete).

...

  • You can define as many

...

  • queryset elements as required with each pointing to a different Data Source. In essence, you can have one instance of the database connector working with multiple databases.

If you update the configuration file, the database connector will pick up changes automatically.=====

SQL Statements

...

You define the scripts that will work with your database in the configuration file. For example, the sample configuration file defines a '''query''' called ''customers''. That query assumes that a table such as the one below exists in your Data Source.

Code Block
language

...

sql
CREATE TABLE customers (

...


customerId INT,

...


firstName  VARCHAR(50),

...


lastName   VARCHAR(50)

...


)

...

The SQL statements are nested inside a <query> element and one query can include up to four SQL statements. This is part of the SQL-to-Browser translation—four is the “magical” number because under the covers the connector is translating the four basic SQL functions: create, retrieve, update and delete (CRUD) to the four basic browser functions of POST, GET, PUT and DELETE. That is reflected in the children elements of the <query> element: <create>, <update>, <retrieve> and <delete>.   

One query cannot have two SQL statements of the same type. If you need two different <retrieve> statements (for example, Select * from customers and Select * from Product), you’ll need two different <query> elements.  A query may have fewer than four SQL statements—if users can’t delete data from your database via your forms, your query does not need a <delete> operation. 
 

Here is the retrieve operation for query '''customers'''. The SQL statement returns all records from the customers table that match a given customer id:

Code Block

...

language

...

html/xml

...

<query name="customers"

...

>          
   <retrieve>
   <!-- maps to the http GET method -->

...

 
      <statement> 
        SELECT * FROM customers WHERE customerId='{customerId}'

...


      </statement>                                     
   </retrieve>
   <!-- Omitted other statements --

...

>       
</query>

</pre>You can use any valid SQL statement in the configuration.
     
     

Note the string '''{customerId}'''. The database connector SQL statements are actually templates that are resolved at run time using values passed in the http request. In the example above, if there is a parameter in the http GET request that hits the connector with customerId=1234 than the statement would return the record for customer 1234.===

Auto Create Rows

...

You can set the attribute '''autocreate''' in a '''query''' element.

...

This behavior is actually enabled by default so if you want to turn it off you can set autocreate to false.===

Auto Delete Rows

...

The autodelete feature is useful when working with frevvo '''repeat''' controls. Imagine you have a collection of elements in the form that were initialized from a database. If you eliminate an item in the collection and submit the form, the connector will automatically remove the item from the database.  For that to happen, set the attribute '''autodelete''' to '''true''' in the query element.

Code Block

...

language

...

html/xml
<query name="customers" autocreate="true" autodelete="true" deleteKey="customerId">

</pre>Behind the scenes, the connector actually compares the items in the database with what is submitted in the form. That comparison criteria is based on a key that you define with the attribute '''deleteKey''' (required). The deleteKey value is normally the name of the primary key in the table that contains the repeat items.===

Dates and Timestamps

...

If you define a date, time or timestamp column in your database the database connector will need to know the format of those dates in order to properly parse them. Also, when the connector reads the dates from the database, it will transform them to XML dates and those also can have a specific format. You can define both the databse and the xml date formats. Those definitions are done by defining attributes in the '''queryset''' element. For instance:<pre>

Code Block
<queryset name="myStore" timeStampFormat="yyyy-MM-dd HH:mm:ss" dateFormat="yyyy-MM-dd" xmlDateFormat="yyyy-MM-dd"

...

>

In this case, the time stamp and date formats in the database are "yyyy-MM-dd HH:mm:ss" and "yyy-MM-dd" respectively. That is the format the database connector will use to parse the date types from the database.

On the other hand, when the XML documents is created, the date format will follow the definition of the attribute '''xmlDateFormat'''. ===

SQL Query Examples

...

A solid understand of SQL syntax is helpful when creating forms that interact with your database. Below are common and useful example queries.=====

Like Query

...

Sometimes it is useful to match a row where the matching string is not exact. To do this use the SQL Like and % wild card. In this example we want to retrieve all customers that have an email address with a specific email domain 'frevvo.com'. The % wild card must be coded into the configuration.xml query. It cannot be passed down to the query as part of the URI template.

...