Database Adapter Actions
  • 03 Jun 2022
  • 5 Minutes to read
  • Dark
    Light

Database Adapter Actions

  • Dark
    Light

Article Summary

Database Adapter Actions

Please reference the following information in the RapidIdentity Connect/Core Actions/Database Adapter Actions section of the documentation (included below).

Database Adapter Actions

createTableDefinition

Create a database table definition.

Property

Value

Description

table*

text, expression, variable

the name of the table

schema

text, expression, variable

the name of the schema that table is in

catalog

text, expression, variable

the name of the catalog the table is in

key*

text, expression, variable

comma separated list of primary key columns format for each column: [alias=]name

keygen

choice (assigned, native), text, expression, variable

the primary key generation algorithm - one of 'assigned','native' (default: 'assigned')(ignored if multiple key columns specified)

columns*

text, expression, variable

comma separated list of other columns format for each column: [alias=]name[;child-table;join-col[;parent-join-col]]

returnVariable

expression, variable

name of the variable to be assigned to the return value

# With auto-increment
tableDef = createTableDefinition("senators", "id", "native",
"lastname,firstname,title,email")
# Without auto-increment
tableDef = createTableDefinition("senators", "email", "assigned",
"lastname,firstname,title,email")

deleteDatabaseRecord

Delete Record from the database.

Property

Value

Description

dbConnection*

expression, variable

the database connection

table*

text, expression, variable

the database table

key*

text, expression, variable

the primary key of the Record to delete - also accepts a Record that contains the primary key

returnVariable

expression, variable

name of the variable to be assigned to the return value

tableDef = createTableDefinition("usr", "id"," native",
"fname,lname,status")
outputDB = openDatabaseConnection(...)
queryExample = createRecord()
setRecordValue(queryExample, "status", "I")
inactiveRecords = getDatabaseRecords(outputDB, "usr", queryExample)
forEach(inactive, inactiveRecords) {
delStatus = deleteDatabaseRecord(outputDB, "usr", inactive)
if(Boolean(delStatus)) {
log("Deletion Successful!")
} else {
log("Deletion Failed!")
}
close(outputDB)

getDatabaseRecord

Get a Record from the database.

Property

Value

Description

dbConnection*

expression, variable

the database connection

table*

text, expression, variable

the database table

key*

text, expression, variable

the primary key of the Record - also accepts a Record that contains the primary key

returnVariable

expression, variable

name of the variable to be assigned to the return value

tableDef = createTableDefinition("usr", "email", "assigned",
"fname,lname,status,email")
outputDB = openDatabaseConnection(...)
resultRecord = getDatabaseRecord(outputDB, "user",
"john.doe@example.com")
resultFName = getRecordFieldValue(resultRecord, "fname")

getDatabaseRecords

Get Records from the database.

Property

Value

Description

dbConnection*

expression, variable

the database connection

table*

text, expression, variable

the database table

example

expression, variable

example Record

ignoreCase

boolean, expression, variable

Ignore case when matching example fields (default: false)

maxResults

expression, variable

maximum number of Records to return (default: unlimited)

returnVariable

expression, variable

name of the variable to be assigned to the return value

tableDef = createTableDefinition("usr", "id","native",
"fname,lname,status")
outputDB = openDatabaseConnection(...)
queryExample = createRecord()
setRecordValue(queryExample, "status", "I")
inactiveRecords = getDatabaseRecords(outputDB, "usr",
queryExample)
log("There are " + inactiveRecords.length + " inactive records.")
forEach(inactive,inactiveRecords) {
delStatus = deleteDatabaseRecord(outputDB,"usr",inactive)
}
close(outputDB)

openDatabaseConnection

Open a connection to a database.

Property

Value

Description

jdbcDriverClass*

text, expression, variable

the name of JDBC driver class to use to connect to the database

jdbcURL*

text, expression, variable

the JDBC connection URL

tableDefinitions

text, expression, variable

the definitions of the tables that connection will use

user

text, expression, variable

the user name for authenticating to the database

password

password, string, expression, variable

the user password for authenticating to the database

extraProperties

expression, variable

object or Record containing extra Hibernate properties to customize the connection

returnVariable

expression, variable

name of the variable to be assigned to the return value

tableDef = createTableDefinition("usr", "id", "native",
"fname,lname,status")
# MySQL Database example
outputDB = openDatabaseConnection("com.mysql.jdbc.Driver",
"jdbc:mysql://127.0.0.1/indirect", tableDef, "root", "password")
if(Boolean(outputDB)) {
log(Database connection successful!)
} else {
log(Database connection failed!)
}

queryDatabaseSQL

Get Records from the database using SQL.

Property

Value

Description

dbConnection*

expression, variable

the database connection

sql*

text, expression, variable

the SQL query

params

expression, variable

array of positional parameters to bind to the SQL query

returnVariable

expression, variable

name of the variable to be assigned to the return value

tableDef = createTableDefinition("usr", "id", "native",
"fname,lname,status")# MySQL Database example
outputDB = openDatabaseConnection("com.mysql.jdbc.Driver",
"jdbc:mysql://127.0.0.1/indirect", tableDef, "root", "password")
if (Boolean(outputDB)) {
id = "12345"
sql = "SELECT fname,lname,status FROM usr WHERE id='" + id + "'"
users = queryDatabaseSQL(outputDB, sql)
forEach(user, users) {
log("User: " + user)
}
} else {
}
close(outputDB)

### RapidIdentity Connect supports parameterized queries.
For example, in each iteration of the forEach loop, log
the user 's name to be their first and last name
separated by a single space. Parameters (params) could
be used in the example above as follows.
sql = "SELECT fname,lname,status FROM usr WHERE ID = ?"
users = queryDatabaseSQL(outputDB, sql, [user.fname + " "
user.lname, user.id
])
tableDef = createTableDefinition("usr", "id", "native",
"fname,lname,status")
# MySQL Database example
outputDB = openDatabaseConnection("com.mysql.jdbc.Driver",
"jdbc:mysql://127.0.0.1/indirect", tableDef, "root", "password")
if (Boolean(outputDB)) {
id = "12345"
sql = "SELECT fname,lname,status FROM usr WHERE id='" + id + "'"
users = queryDatabaseSQL(outputDB, sql)
forEach(user, users) {
log("User: " + user)
}
} else {
}
close(outputDB)

saveDatabaseRecord

Save a Record to the database.

Property

Value

Description

dbConnection*

expression, variable

the database connection

table*

text, expression, variable

the database table

record*

expression, variable

the Record to save

returnVariable

expression, variable

name of the variable to be assigned to the return value

textInput = openDelimitedTextInput("/root/senators.csv",
"fname,lname,status,email")
tableDef = ("usr", "email", "assigned", "fname,lname,status,email")
outputDB = openDatabaseConnection(...)
forEach(senator, textInput) {
saveResult = saveDatabaseRecord(outputDB, "user", senator)
if (Boolean(saveResult)) {
log("Save Successful!")
} else {
Log("Save Failed!")
}
}
close(outputDB)
close(textInput)

updateDatabaseSQL

Update database using SQL.

Property

Value

Description

dbConnection*

expression, variable

the database connection

sql*

text, expression, variable

the SQL statement

params

expression, variable

array of positional parameters to bind to SQL statement

returnVariable

expression, variable

name of the variable to be assigned to the return value

tableDef = createTableDefinition("usr", "id", "native",
"fname,lname,status")# MySQL Database example
outputDB = openDatabaseConnection("com.mysql.jdbc.Driver",
"jdbc:mysql://127.0.0.1/indirect", tableDef, "root", "password")
if (Boolean(outputDB)) {
id = "12345"
sql = "SELECT fname,lname,status FROM usr WHERE id='" + id + "'"
users = queryDatabaseSQL(outputDB, sql)
forEach(user, users) {
log("User: " + user)
updateSQL = "UPDATE usr SET name='" + user.fname + " "
user.lname + "' WHERE ID='" + user.id + "'"
result = updateDatabaseSQL(outputDB, updateSQL)
if (result) {
log("User updated successfully")
} else {
log("User not updated")
}
}
} else {
}
close(outputDB)

### RapidIdentity Connect supports parameterized queries.
For example, in each iteration of the forEach loop, set the
user 's id field value to be their first and last name
separated by a single space. Parameters (params) could
be used in the example above as follows.
updateSQL = "UPDATE usr SET name = ? WHERE ID = ?"
result = updateDatabaseSQL(outputDB, updateSQL, [user.fname + " "
user.lname, user.id
])

Complete Database Adapter Example

# Input from text file
textInput = openDelimitedTextInput("/root/senators.csv",
"LastName,FirstName,Title,Email,Phone,Description")
# Define table and open DB connection(MySQL w / auto - increment)
tableDef = createTableDefinition("senators", "id", "native",
"lastname,firstname,title,email,phone")
outputDB = openDatabaseConnection("com.mysql.jdbc.Driver",
"jdbc:mysql://server/dbSchema", tableDef, "root", "password")
# Loop through input records
forEach(inputRecord, textInput) {
# Schema mapping
renameRecordFields(inputRecord, "LastName,FirstName,Title,Email,Phone",
"lastname,firstname,title,email,phone")
# Check for existance in target
queryRecord = createRecord()
queryValue = getRecordFieldValue(inputRecord, "email")
setRecordValue(queryRecord, "email", queryValue)
matchingRecords = getDatabaseRecords(outputDB, "senators",
queryRecord)
if (matchingRecords.length == 1) {
# Match found.Add primary key to current record from source.
matchingKeyValue = getRecordFieldValue(matchingRecords[0], "id")
setRecordFieldValue(inputRecord, "id", matchingKeyValue)
} else {
# No match found.Nothing more to do.
}
# Write(insert / update) record to database
saveDatabaseRecord(outputDB, "senators", inputRecord)
}
# Close database and file connections
close(outputDB)
close(textInput)# Input from text file

Was this article helpful?

What's Next