1.06 anywheresoftware.b4j.objects.SQL JdbcSQL process QueryComplete (Success As Boolean, Crsr As JdbcResultSet) NonQueryComplete (Success As Boolean) Ready (Success As Boolean) android.permission.INTERNET Initialize 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 void DriverClass java.lang.String JdbcUrl java.lang.String 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:<code> 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 </code> void ExecNonQuery2 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:<code> SQL1.ExecNonQuery2("INSERT INTO table1 VALUES (?, ?, 0)", Array As Object("some text", 2))</code> void Statement java.lang.String Args anywheresoftware.b4a.objects.collections.List ExecQuerySingleResult 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:<code> Dim NumberOfMatches As Int NumberOfMatches = SQL1.ExecQuerySingleResult("SELECT count(*) FROM table1 WHERE col2 > 300")</code> java.lang.String Query java.lang.String ExecNonQueryBatch 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:<code> 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)</code> java.lang.Object ba anywheresoftware.b4a.BA EventName java.lang.String CreateCallStatement Create a statement object which you can use with ExecCall to call stored procedures. java.lang.Object Query java.lang.String Args anywheresoftware.b4a.objects.collections.List InitializeSQLite 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: <code>#AdditionalJar: sqlite-jdbc-3.7.2</code> Example:<code> Dim SQL1 As SQL SQL1.InitializeSQLite(File.DirApp, "MyDb.db", True)</code> void Dir java.lang.String FileName java.lang.String CreateIfNecessary boolean ExecQueryAsync 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:<code> Dim SenderFilter As Object = sql.ExecQueryAsync("SQL", "SELECT * FROM table1", Null) Wait For (SenderFilter) SQL_QueryComplete (Success As Boolean, rs As JdbcResultSet) If Success Then Do While rs.NextRow Log(rs.GetInt2(0)) Loop rs.Close Else Log(LastException) End If</code> java.lang.Object ba anywheresoftware.b4a.BA EventName java.lang.String Query java.lang.String Args anywheresoftware.b4a.objects.collections.List TransactionSuccessful Commits the statements and ends the transaction. void AddNonQueryToBatch 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:<code> 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)</code> void Statement java.lang.String Args anywheresoftware.b4a.objects.collections.List Close Closes the database. Does not do anything if the database is not opened or was closed before. void InitializeAsync 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:<code> 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 JdbcResultSet = sql1.ExecQuery("SELECT table_name FROM information_schema.tables") Do While rs.NextRow Log(rs.GetString2(0)) Loop rs.Close End Sub</code> void ba anywheresoftware.b4a.BA EventName java.lang.String DriverClass java.lang.String JdbcUrl java.lang.String UserName java.lang.String Password java.lang.String ExecQuery Executes the query and returns a cursor which is used to go over the results. Example:<code> Dim Cursor As JdbcResultSet Cursor = SQL1.ExecQuery("SELECT col1, col2 FROM table1") Do While Cursor.NextRow Log(Cursor.GetString("col1")) Log(Cursor.GetInt("col2")) Loop</code> anywheresoftware.b4j.objects.SQL.ResultSetWrapper Query java.lang.String ExecQuerySingleResult2 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:<code> Dim NumberOfMatches As Int NumberOfMatches = SQL1.ExecQuerySingleResult2("SELECT count(*) FROM table1 WHERE col2 > ?", Array As String(300))</code> java.lang.String Query java.lang.String Args anywheresoftware.b4a.objects.collections.List ExecCall Executes a call statement previously created with CreateCallStatement. anywheresoftware.b4j.objects.SQL.ResultSetWrapper CallStatement java.lang.Object ExecNonQuery Executes a single non query SQL statement. Example:<code> SQL1.ExecNonQuery("CREATE TABLE table1 (col1 TEXT , col2 INTEGER, col3 INTEGER)")</code> It will be significantly faster to explicitly start a transaction before applying any changes to the database. void Statement java.lang.String Initialize2 Similar to Initialize method. Passes the given UserName and Password to the database. void DriverClass java.lang.String JdbcUrl java.lang.String UserName java.lang.String Password java.lang.String ExecQuery2 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:<code> Dim Cursor As JdbcResultSet Cursor = sql1.ExecQuery2("SELECT col1 FROM table1 WHERE col3 = ?", Array As String(22))</code> SQLite will try to convert the string values based on the columns types. anywheresoftware.b4j.objects.SQL.ResultSetWrapper Query java.lang.String Args anywheresoftware.b4a.objects.collections.List Rollback Rollbacks the changes from the current transaction and closes the transaction. void IsInitialized Tests whether the database is initialized and opened. boolean anywheresoftware.b4j.objects.SQL.ResultSetWrapper JdbcResultSet java.sql.ResultSet process GetInt Returns the Int value stored in the given column. The value will be converted to Int if it is of different type. Example:<code> Log(Cursor.GetInt("col2"))</code> int ColumnName java.lang.String GetColumnName Returns the name of the column at the specified index. The first column index is 0. java.lang.String Index int GetLong Returns the Long value stored in the given column. The value will be converted to Long if it is of different type. Example:<code> Log(Cursor.GetLong("col2"))</code> java.lang.Long ColumnName java.lang.String GetBlob2 Returns the blob stored in the column at the given ordinal. Example:<code> Dim Buffer() As Byte Buffer = Cursor.GetBlob2(0)</code> byte[] Index int GetLong2 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:<code> Log(Cursor.GetLong2(0))</code> java.lang.Long Index int GetDouble Returns the Double value stored in the given column. The value will be converted to Double if it is of different type. Example:<code> Log(Cursor.GetDouble("col2"))</code> java.lang.Double ColumnName java.lang.String GetBlob Returns the blob stored in the given column. Example:<code> Dim Buffer() As Byte Buffer = Cursor.GetBlob("col1")</code> byte[] ColumnName java.lang.String Close Closes the cursor and frees resources. void GetInt2 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:<code> Log(Cursor.GetInt2(0))</code> int Index int GetString Returns the String value stored in the given column. The value will be converted to String if it is of different type. Example:<code> Log(Cursor.GetString("col2"))</code> java.lang.String ColumnName java.lang.String GetString2 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:<code> Log(Cursor.GetString2(0))</code> java.lang.String Index int GetDouble2 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:<code> Log(Cursor.GetDouble2(0))</code> java.lang.Double Index int NextRow Moves the cursor to the next result. Returns false when the cursor reaches the end. Example:<code> Do While ResultSet1.Next 'Work with Row Loop</code> boolean IsInitialized boolean ColumnCount int Gets the number of columns available in the result set. 1.5 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>link|http://www.basic4ppc.com/android/forum/threads/sql-tutorial.35185/</link> for more information.