# SQLiteDatabase for beginners quiz answers

These are the answers for the Quizzes in the `SQLiteDatabase for Beginners</topics/databases/supported_engines/sqlite/sqlitedatabase_for_beginners>` Lesson. Correct answers are marked in **bold**.

## Quiz answers

### Quiz 1: Available SQLite classes

Use this Quiz to check what you have learned. Some questions may have more than one right answer.

Question 1.1: SQLiteDatabase is available for all the supported platforms.

- **Yes**.
- No.

Question 1.2: What are the platforms supported by SQLiteDatabase?

- Desktop, Web
- Web, Console, Mobile (iOS & Android).
- Desktop, Web, Mobile (iOS & Android)
- Desktop, Console, Web
- **Desktop, Web, Mobile (iOS & Android), Console**

Question 1.3: SQLite can be used only in single user mode.

- **No**.
- Yes.

Question 1.4: SQLite works in 32-bit mode even when the app is deployed as 64-bit.

- True.
- **False**.

### Quiz 2: In-memory SQLite databases

Use this Quiz to check what you have learned. Some questions may have more than one right answer.

Question 2.1: A Xojo app only can use one in-memory database at once.

- Yes.
- **No**.

Question 2.2: Sort the following lines of code to create an in-memory database

- dbsource = New SQLiteDatabase
- If Not dbsource.Connect Then
- MessageBox("Error Creating the Database")
- Exit
- End If

Question 2.3: We only can create in-memory databases that are going to use less than 2 GB of RAM

- True.
- **False**.

Question 2.4: Once a table has been created, we can…

- Delete columns.
- Modify some of the current columns.
- **Add new columns to the table**.

Question 2.5: Once we create a SQLite database instance and assign it to a variable we can start using it.

- Yes.
- No.
- **Yes, always the variable or property is in scope during database use.**

Question 2.6: We still can use a in-memory database the next time we run the app.

- Yes, always it has valid data
- **No, the database is deleted once we exit the app.**

Question 2.7: Once we create an SQLiteDatabase we just need to use the Connect method to start using it.

- Yes.
- No.
- **Yes, always the Connect method has returned True as result.**

### Quiz 3: tables

Use this Quiz to check what you have learned. Some questions may have more than one right answer.

Question 3.1: SQLite sets a maximum number of tables for a database.

- **No**.
- Yes.

Question 3.2: In order to create a table in Xojo we will use the SQLSelect method from the SQLiteDatabase or iOSSQLiteDatabase classes.

- True.
- **False**.

Question 3.3: After creating a Table using SQLExecute we will get the result of the operation as a Boolean value.

- True.
- **False**.

Question 3.4: Once a Table has been created, it is possible to modify the name of any of the defined columns

- **True.**
- False.

Question 3.5: Once a Table has been created, it is possible to deleted any of its columns.

- True.
- **False**.

### Quiz 4: DatabaseRecord

Use this Quiz to check what you have learned. Notice that the questions may have more than one right answer.

Question 4.1: The name of the Class to add new records to the database is…

- SQLiteRecord.
- DatabaseField.
- Record.
- **DatabaseRecord**.

Question 4.2: We have to observe the correct use of lowercase and uppercase letters in the name when referring the database columns.

- Yes.
- **No, it doesn't matter when using SQLite**.

Question 4.3: The method name of the SQLiteDatabase and iOSSQLiteDatabase classes to add new records is…

- AddRecord.
- InsertField.
- AddDatabaseRecord.
- **InsertRecord**.

Question 4.4: We can add new records using a SQL statement executed with SQLSelect on the database instance.

- True.
- **False**.

Question 4.5: Sort the lines to add a record using the DatabaseRecord Class.

- Var nr As New DatabaseRecord
- nr.Column("nombre") = "Nombre " + n.ToString
- dbsource.InsertRecord("prueba", nr)

### Quiz 5: retrieving records

Use this Quiz to check what you have learned. Some questions may have more than one right answer.

Question 5.1: The name of the class we use to navigate and access the records from a database query is…

- DatabaseRecord.
- DataGroup.
- Records.
- RecordList.
- **RecordSet**.

Question 5.2: We can iterate the records from a RecordSet as many times as we need.

- Yes.
- No.
- **Yes, always move the cursor pointer to the first record in first place.**

Question 5.3: Once we get a RecordSet we can access to it from any point of our app.

- Yes.
- No.
- **It depends if the variable or property that references the RowSet is in scope.**

Question 5.4: We just need to test the RecordSet for Nil in order to start using it

- True.
- Not always.
- **We also need to make sure that AfterLastRow is False, for example.**

Question 5.5: RecordSet offers methods to Delete, Edit and Insert records among other operations.

- Yes.
- No.
- **Only Delete and Edit, among other actions.**

Question 5.6: What are the method names we have to use to navigate the RecordSet?

- **MoveFirst, MoveNext, MovePrevious, MoveLast.**
- JumpFirst, Next, Rewind, JumpLast.
- MoveFirst, Next, Previous, MoveLast.
- MoveNext, MovePrevious

Question 5.7: The method we use to know the number of records in a RecordSet is…

- **RecordCount**.
- Records.
- NumberOfRecords.
- TotalRecords

Question 5.8: A RecordSet is closed when…

- **We call the Close method on the instance.**
- **The instance gets out of Scope.**
- **The App quits.**
- A RecordSet never closes, it's always available.
- We get an Error.

### Quiz 6: editing records

Use this Quiz to check what you have learned. Some questions may have more than one right answer

Question 6.1: What method should we use to access a column value from a record?

- Value.
- Record.
- DataField.
- **Field**.

Question 6.2: Can we directly access a column value using the Field method?

- Yes, sure.
- No, we have to query the database using SQLSelect.
- No, we have to use a DataRecord instance.
- **No, we do it using a DatabaseField instance.**

Question 6.3: What RecordSet method should we call before we can modify a record data?

- Prepare.
- Rollback.
- DataEdit.
- **Edit**.

Question 6.4: What's the main advantage of using SQLExecute instead of RecordSet when updating a record?

- None, in fact it is preferable and easier to use RecordSet.
- SQLExecute provides greater flexibility.
- **SQLExecute provides greater flexibility and returns a new RecordSet with the data already updated.**

### Quiz 7: file-based SQLite databases

Use this Quiz to check what you have learned. Some questions may have more than one right answer.

Question 7.1: Sort the lines of code to create a file based SQLite database

- DBSourceDisk = New SQLiteDatabase.
- Var file As FolderItem = SpecialFolder.Documents.Child("tet.sqlite")
- If file \<\> Nil Then
- DBSourceDisk.DatabaseFile = file.
- Try
- DBSourceDisk.CreateDatabase
- Catch error As IOException
- MessageBox("Error Creating the Database".)
- End Ty
- Else
- MessageBox("Error Found while Creating the File")
- End If

Question 7.2: What's the effect when calling the 'CreateDatabase' on a file that already has SQLite data on it?

- It will delete the current contents, initializing again the file in order to be used by the SQLite database instance.
- The app will raise an Exception.
- The app will create a copy of the file, initializing it so it can be used by the SQLite database instance.
- **It will act as if the method 'Connect' was called.**

Question 7.3: SQLite creates the database file encrypted by default.

- True.
- **False**.
- It's true, but using a 128 bits length.

Question 7.4: What SQL statement we will use to delete all the records from a Table?

- **DELETE FROM table_name.**
- DELETE \* FROM table_name.
- DELETE all FROM table_name.
- DELETE FROM table_name WHERE id = \*.
- DROP TABLE table_name.

Question 7.5: Can we change the file used by a SQLite database instance on the fly?

- Yes.
- **No**.

### Quiz 8: backup

Use this Quiz to check what you have learned. Notice that the questions may have more than one right answer.

Question 8.1: We only can backup in-memory databases

- Yes.
- **No**.

Question 8.2: The backup is done over…

- A valid FolderItem instance that is in scope during all the process.
- Another in-memory or file based database.
- **Another file based and initialized SQLite database.**

Question 8.3: What modes can we use to backup a SQLite database?

- Synchronous and Asynchronous modes.
- Synchronous, Direct and Muliuser modes.
- **Synchronous and Asynchronous modes.**

Question 8.4: What measure of time should we use to set the period in a Synchronous backup?

- Seconds.
- Microseconds.
- Milliseconds.
- **We have to pass -1 as the value for the parameter.**

Question 8.5: Once the backup has finished, the SQLite database instance will use the file of the target database.

- True.
- **False**.

### Quiz 9: asynchronous backup

Use this Quiz to check what you have learned. Some questions may have more than one right answer.

Question 9.1: Why is it preferable to use asynchronous backups instead of synchronous?

- **The app is not blocked.**
- It only works with big database files.
- **It provides more control, for example the ability to cancel the backup process.**
- **We can receive information about the process progress and possible errors.**

Question 9.2: What is the name of the Class Interface that we have to implement in the class used as backup handle?

- **SQLiteBackupInterface**.
- SQLiteBackupProgress.
- SQLiteBackupInformation.

Question 9.3: Do we have to implement (add code) in all the methods added by the SQLiteBackupInterface?

- **Yes**.
- No.

Question 9.4: The object used as backup handle, has to be in scope during all the process?

- **Yes**.
- No.
- Only if we had implement code on any of the Class Interface methods.

Question 9.5: It's mandatory to pass the time period parameter to the Backup method?

- **No**.
- Yes.

### Quiz 10: ciphering SQLite databases

Use this Quiz to check what you have learned. Some questions may have more than one right answer.

Question 10.1: Xojo uses by default a ciphering length of 256 bits?

- Yes.
- **No**.

Question 10.2: What prefix string should we use in the password to enable the 256 bits ciphering length?

- **aes256:**
- 256:
- [aes256]()
- maxSecure:

Question 10.3: What method should we use in order to encrypt an already existing SQLite database file?

- **Encrypt**.
- EncryptionKey.
- CipherDB.
- Encrypt("").

Question 10.4: How can we decrypt an already ciphered database once we are connected to it?

- **Encrypt("").**
- **Decrypt**.
- Wipe.
- EncryptionKey = "".
