B4J Programming Press on the image to return to the main documentation page.

jSQL

The SQL library allows you to create and manage SQL databases.
Using this library you can connect to any type of SQL database.
See this
link for more information.

List of types:

ResultSet
SQL

ResultSet


Events:

None

Members:


  Close

  ColumnCount As Int [read only]

  GetBlob (ColumnName As String) As Byte()

  GetBlob2 (Index As Int) As Byte()

  GetColumnName (Index As Int) As String

  GetDouble (ColumnName As String) As Double

  GetDouble2 (Index As Int) As Double

  GetInt (ColumnName As String) As Int

  GetInt2 (Index As Int) As Int

  GetLong (ColumnName As String) As Long

  GetLong2 (Index As Int) As Long

  GetString (ColumnName As String) As String

  GetString2 (Index As Int) As String

  IsInitialized As Boolean

  NextRow As Boolean

Members description:

Close
Closes the cursor and frees resources.
ColumnCount As Int [read only]
Gets the number of columns available in the result set.
GetBlob (ColumnName As String) As Byte()
Returns the blob stored in the given column.
Example:
Dim Buffer() As Byte
Buffer = Cursor.GetBlob("col1")
GetBlob2 (Index As Int) As Byte()
Returns the blob stored in the column at the given ordinal.
Example:
Dim Buffer() As Byte
Buffer = Cursor.GetBlob2(0)
GetColumnName (Index As Int) As String
Returns the name of the column at the specified index.
The first column index is 0.
GetDouble (ColumnName As String) As Double
Returns the Double value stored in the given column.
The value will be converted to Double if it is of different type.
Example:
Log(Cursor.GetDouble("col2"))
GetDouble2 (Index As Int) As Double
Returns the Double value stored in the column at the given ordinal.
The value will be converted to Double if it is of different type.
Example:
Log(Cursor.GetDouble2(0))
GetInt (ColumnName As String) As Int
Returns the Int value stored in the given column.
The value will be converted to Int if it is of different type.
Example:
Log(Cursor.GetInt("col2"))
GetInt2 (Index As Int) As Int
Returns the Int value stored in the column at the given ordinal.
The value will be converted to Int if it is of different type.
Example:
Log(Cursor.GetInt2(0))
GetLong (ColumnName As String) As Long
Returns the Long value stored in the given column.
The value will be converted to Long if it is of different type.
Example:
Log(Cursor.GetLong("col2"))
GetLong2 (Index As Int) As Long
Returns the Long value stored in the column at the given ordinal.
The value will be converted to Long if it is of different type.
Example:
Log(Cursor.GetLong2(0))
GetString (ColumnName As String) As String
Returns the String value stored in the given column.
The value will be converted to String if it is of different type.
Example:
Log(Cursor.GetString("col2"))
GetString2 (Index As Int) As String
Returns the String value stored in the column at the given ordinal.
The value will be converted to String if it is of different type.
Example:
Log(Cursor.GetString2(0))
IsInitialized As Boolean
NextRow As Boolean
Moves the cursor to the next result. Returns false when the cursor reaches the end.
Example:
Do While ResultSet1.Next
'Work with Row
Loop

SQL


Events:

QueryComplete (Success As Boolean, Crsr As ResultSet)
NonQueryComplete (Success As Boolean)
Ready (Success As Boolean)

Members:


  AddNonQueryToBatch (Statement As String, Args As List)

  BeginTransaction

  Close

  CreateCallStatement (Query As String, Args As List) As Object

  ExecCall (CallStatement As Object) As ResultSet

  ExecNonQuery (Statement As String)

  ExecNonQuery2 (Statement As String, Args As List)

  ExecNonQueryBatch (EventName As String) As Object

  ExecQuery (Query As String) As ResultSet

  ExecQuery2 (Query As String, Args As List) As ResultSet

  ExecQueryAsync (EventName As String, Query As String, Args As List) As Object

  ExecQuerySingleResult (Query As String) As String

  ExecQuerySingleResult2 (Query As String, Args As List) As String

  Initialize (DriverClass As String, JdbcUrl As String)

  Initialize2 (DriverClass As String, JdbcUrl As String, UserName As String, Password As String)

  InitializeAsync (EventName As String, DriverClass As String, JdbcUrl As String, UserName As String, Password As String)

  InitializeSQLite (Dir As String, FileName As String, CreateIfNecessary As Boolean)

  IsInitialized As Boolean

  Rollback

  TransactionSuccessful

Members description:

AddNonQueryToBatch (Statement As String, Args As List)
Adds a non-query statement to the batch of statements.
The statements are (asynchronously) executed when you call ExecNonQueryBatch.
Args parameter can be Null if it is not needed.
Example:
For i = 1 To 1000
  sql.AddNonQueryToBatch("INSERT INTO table1 VALUES (?)", Array(Rnd(0, 100000)))
Next
Dim SenderFilter As Object = sql.ExecNonQueryBatch("SQL")
Wait For (SenderFilter) SQL_NonQueryComplete (Success As Boolean)
Log("NonQuery: " & Success)
BeginTransaction
Begins a transaction. A transaction is a set of multiple "writing" statements that are atomically committed,
hence all changes will be made or no changes will be made.
As a side effect those statements will be executed significantly faster (in the default case a transaction is implicitly created for
each statement).
It is very important to handle transaction carefully and close them.
The transaction is considered successful only if TransactionSuccessful is called. Otherwise no changes will be made.
Typical usage:
SQL1.BeginTransaction
Try
  'block of statements like:
  For i = 1 to 1000
    SQL1.ExecNonQuery("INSERT INTO table1 VALUES(...)
  Next
  SQL1.TransactionSuccessful
Catch
  Log(LastException.Message)
SQL1.RollBack 'no changes will be made
End Try
Close
Closes the database.
Does not do anything if the database is not opened or was closed before.
CreateCallStatement (Query As String, Args As List) As Object
Create a statement object which you can use with ExecCall to call stored procedures.
ExecCall (CallStatement As Object) As ResultSet
Executes a call statement previously created with CreateCallStatement.
ExecNonQuery (Statement As String)
Executes a single non query SQL statement.
Example:
SQL1.ExecNonQuery("CREATE TABLE table1 (col1 TEXT , col2 INTEGER, col3 INTEGER)")

It will be significantly faster to explicitly start a transaction before applying any changes to the database.
ExecNonQuery2 (Statement As String, Args As List)
Executes a single non query SQL statement.
The statement can include question marks which will be replaced by the items in the given list.
Note that B4J converts arrays to lists implicitly.
The values in the list should be strings, numbers or bytes arrays.
Example:
SQL1.ExecNonQuery2("INSERT INTO table1 VALUES (?, ?, 0)", Array As Object("some text", 2))
ExecNonQueryBatch (EventName As String) As Object
Asynchronously executes a batch of non-query statements (such as INSERT).
The NonQueryComplete event is raised after the statements are completed.
You should call AddNonQueryToBatch one or more times before calling this method to add statements to the batch.
Note that this method internally begins and ends a transaction.
Returns an object that can be used as the sender filter for Wait For calls.
Example:
For i = 1 To 1000
  sql.AddNonQueryToBatch("INSERT INTO table1 VALUES (?)", Array(Rnd(0, 100000)))
Next
Dim SenderFilter As Object = sql.ExecNonQueryBatch("SQL")
Wait For (SenderFilter) SQL_NonQueryComplete (Success As Boolean)
Log("NonQuery: " & Success)
ExecQuery (Query As String) As ResultSet
Executes the query and returns a cursor which is used to go over the results.
Example:
Dim Cursor As ResultSet
Cursor = SQL1.ExecQuery("SELECT col1, col2 FROM table1")
Do While Cursor.NextRow
  Log(Cursor.GetString("col1"))
  Log(Cursor.GetInt("col2"))
Loop
ExecQuery2 (Query As String, Args As List) As ResultSet
Executes the query and returns a cursor which is used to go over the results.
The query can include question marks which will be replaced with the values in the array.
Example:
Dim Cursor As ResultSet
Cursor = sql1.ExecQuery2("SELECT col1 FROM table1 WHERE col3 = ?", Array As String(22))

SQLite will try to convert the string values based on the columns types.
ExecQueryAsync (EventName As String, Query As String, Args As List) As Object
Asynchronously executes the given query. The QueryComplete event will be raised when the results are ready.
Returns an object that can be used as the sender filter for Wait For calls.
Example:
Dim SenderFilter As Object = sql.ExecQueryAsync("SQL", "SELECT * FROM table1", Null)
Wait For (SenderFilter) SQL_QueryComplete (Success As Boolean, rs As ResultSet)
If Success Then
  Do While rs.NextRow
    Log(rs.GetInt2(0))
  Loop
  rs.Close
Else
  Log(LastException)
End If
ExecQuerySingleResult (Query As String) As String
Executes the query and returns the value in the first column and the first row (in the result set).
Returns Null if no results were found.
Example:
Dim NumberOfMatches As Int
NumberOfMatches = SQL1.ExecQuerySingleResult("SELECT count(*) FROM table1 WHERE col2 > 300")
ExecQuerySingleResult2 (Query As String, Args As List) As String
Executes the query and returns the value in the first column and the first row (in the result set).
Returns Null if no results were found.
Example:
Dim NumberOfMatches As Int
NumberOfMatches = SQL1.ExecQuerySingleResult2("SELECT count(*) FROM table1 WHERE col2 > ?", Array As String(300))
Initialize (DriverClass As String, JdbcUrl As String)
Initializes the SQL object. You also need to add the JDBC driver jar to your project with the #AdditionalJar attribute.
DriverClass - The matching JDBC driver. For example (MySQL): com.mysql.jdbc.Driver
JdbcUrl - The connection url. For example (MySQL): jdbc:mysql://localhost/test?characterEncoding=utf8
Initialize2 (DriverClass As String, JdbcUrl As String, UserName As String, Password As String)
Similar to Initialize method. Passes the given UserName and Password to the database.
InitializeAsync (EventName As String, DriverClass As String, JdbcUrl As String, UserName As String, Password As String)
Asynchronously initializes the SQL connection. The Ready event will be raised when the connection is ready or if an error has occurred.
The EventName parameter sets the sub that will handle the Ready event.
Example:
Sub Process_Globals
  Dim sql1 As SQL
End Sub

Sub AppStart (Args() As String)
  sql1.InitializeAsync("sql1", "com.mysql.jdbc.Driver", _
    "jdbc:mysql://localhost/example", "username", "password")
  StartMessageLoop 'only required in a console app
End Sub

Sub sql1_Ready (Success As Boolean)
  Log(Success)
  If Success = False Then
    Log(LastException)
    Return
  End If
  Dim rs As ResultSet = sql1.ExecQuery("SELECT table_name FROM information_schema.tables")
  Do While rs.NextRow
    Log(rs.GetString2(0))
  Loop
  rs.Close
End Sub
InitializeSQLite (Dir As String, FileName As String, CreateIfNecessary As Boolean)
Opens the SQLite database file. A new database will be created if it does not exist and CreateIfNecessary is true.
Note that you should add the following attribute to the main module:
#AdditionalJar: sqlite-jdbc-3.7.2
Example:
Dim SQL1 As SQL
SQL1.Initialize(File.DirApp, "MyDb.db", True)
IsInitialized As Boolean
Tests whether the database is initialized and opened.
Rollback
Rollbacks the changes from the current transaction and closes the transaction.
TransactionSuccessful
Commits the statements and ends the transaction.
Top