Bird
Raised Fist0
React Nativemobile~10 mins

SQLite with expo-sqlite in React Native - Interactive Code Practice

Choose your learning style10 modes available
Practice - 5 Tasks
Answer the questions below
1fill in blank
easy

Complete the code to open a SQLite database named 'mydb.db'.

React Native
import * as SQLite from 'expo-sqlite';
const db = SQLite.[1]('mydb.db');
Drag options to blanks, or click blank then click option'
AopenDatabase
BcreateDatabase
CconnectDatabase
DinitDatabase
Attempts:
3 left
💡 Hint
Common Mistakes
Using createDatabase instead of openDatabase causes an error because it does not exist.
Trying to use connectDatabase or initDatabase which are not functions in expo-sqlite.
2fill in blank
medium

Complete the code to execute a SQL query that creates a table named 'users' with columns 'id' and 'name'.

React Native
db.transaction(tx => {
  tx.executeSql('CREATE TABLE IF NOT EXISTS users (id INTEGER PRIMARY KEY NOT NULL, name TEXT);', [], [1]);
});
Drag options to blanks, or click blank then click option'
A() => console.log('Table created')
Bnull
C() => alert('Error')
D() => console.error('Failed')
Attempts:
3 left
💡 Hint
Common Mistakes
Passing null instead of a function causes no feedback on success.
Using error callbacks in place of success callbacks.
3fill in blank
hard

Fix the error in the code to insert a user with name 'Alice' into the 'users' table.

React Native
db.transaction(tx => {
  tx.executeSql('INSERT INTO users (name) VALUES ([1]);', ['Alice']);
});
Drag options to blanks, or click blank then click option'
A'Alice'
B:name
C?
D"Alice"
Attempts:
3 left
💡 Hint
Common Mistakes
Putting the value directly in the query causes SQL injection risk and errors.
Using ':name' which is not supported by expo-sqlite.
4fill in blank
hard

Fill both blanks to query all users and log their names.

React Native
db.transaction(tx => {
  tx.executeSql('SELECT * FROM users;', [], (tx, [1]) => {
    for (let i = 0; i < [2].rows.length; i++) {
      console.log([2].rows.item(i).name);
    }
  });
});
Drag options to blanks, or click blank then click option'
Aresults
Bresponse
CresultSet
Ddata
Attempts:
3 left
💡 Hint
Common Mistakes
Using different variable names inconsistently causes errors.
Trying to access rows on the transaction object instead of results.
5fill in blank
hard

Fill all three blanks to update a user's name by id and handle success and error.

React Native
db.transaction(tx => {
  tx.executeSql('UPDATE users SET name = [1] WHERE id = [2];', ['Bob', 1], [3], error => console.error(error));
});
Drag options to blanks, or click blank then click option'
A'?'
B?
C() => console.log('Update successful')
Dnull
Attempts:
3 left
💡 Hint
Common Mistakes
Using quotes around '?' makes it a string literal, not a placeholder.
Passing null instead of a success callback loses feedback on success.

Practice

(1/5)
1. What is the main purpose of using expo-sqlite in a React Native app?
easy
A. To store and manage data locally using a small database
B. To fetch data from a remote server
C. To style the app interface
D. To handle user authentication

Solution

  1. Step 1: Understand expo-sqlite functionality

    expo-sqlite provides a way to store data locally on the device using a SQLite database.
  2. Step 2: Compare options with expo-sqlite purpose

    Only To store and manage data locally using a small database describes local data storage with a database, which matches expo-sqlite's role.
  3. Final Answer:

    To store and manage data locally using a small database -> Option A
  4. Quick Check:

    expo-sqlite = local database storage [OK]
Hint: expo-sqlite is for local data storage, not remote or styling [OK]
Common Mistakes:
  • Confusing expo-sqlite with network data fetching
  • Thinking expo-sqlite handles UI styling
  • Assuming expo-sqlite manages user login
2. Which of the following is the correct way to open a database using expo-sqlite?
easy
A. const db = SQLite.newDatabase('mydb.db');
B. const db = SQLite.createDatabase('mydb.db');
C. const db = SQLite.connect('mydb.db');
D. const db = SQLite.openDatabase('mydb.db');

Solution

  1. Step 1: Recall expo-sqlite database opening method

    The correct method to open or create a database is openDatabase.
  2. Step 2: Match method names with options

    Only const db = SQLite.openDatabase('mydb.db'); uses openDatabase, which is the correct syntax.
  3. Final Answer:

    const db = SQLite.openDatabase('mydb.db'); -> Option D
  4. Quick Check:

    openDatabase() opens SQLite DB [OK]
Hint: Use openDatabase() to open or create SQLite DB [OK]
Common Mistakes:
  • Using createDatabase() which does not exist
  • Using connect() or newDatabase() which are invalid
  • Missing the correct method name openDatabase()
3. Given this code snippet, what will be logged to the console?
const db = SQLite.openDatabase('test.db');
db.transaction(tx => {
  tx.executeSql('CREATE TABLE IF NOT EXISTS items (id INTEGER PRIMARY KEY NOT NULL, name TEXT);');
  tx.executeSql('INSERT INTO items (name) VALUES (?)', ['apple']);
  tx.executeSql('SELECT * FROM items;', [], (_, { rows }) => {
    console.log(rows._array);
  });
});
medium
A. undefined
B. [{ id: 1, name: 'apple' }]
C. []
D. SyntaxError

Solution

  1. Step 1: Understand the SQL commands executed

    The code creates a table if missing, inserts one row with name 'apple', then selects all rows.
  2. Step 2: Analyze the SELECT query result

    The SELECT returns one row with id 1 and name 'apple', logged as an array of objects.
  3. Final Answer:

    [{ id: 1, name: 'apple' }] -> Option B
  4. Quick Check:

    Inserted row appears in SELECT result [OK]
Hint: Inserted rows appear in SELECT query result array [OK]
Common Mistakes:
  • Expecting empty array before insertion
  • Confusing rows._array with undefined
  • Assuming syntax error from correct SQL
4. What is wrong with this code snippet that tries to insert data into a SQLite table?
db.transaction(tx => {
  tx.executeSql('INSERT INTO users (name, age) VALUES (?, ?)', ['John']);
});
medium
A. The SQL statement has fewer values than placeholders
B. The table name is incorrect
C. The transaction method is missing a callback
D. The executeSql method cannot use placeholders

Solution

  1. Step 1: Check SQL placeholders and values

    The SQL has two placeholders (?, ?) but only one value 'John' is provided.
  2. Step 2: Identify mismatch causing error

    Mismatch between placeholders and values causes an error during execution.
  3. Final Answer:

    The SQL statement has fewer values than placeholders -> Option A
  4. Quick Check:

    Placeholders must match values count [OK]
Hint: Match number of ? placeholders with values array length [OK]
Common Mistakes:
  • Ignoring mismatch between placeholders and values
  • Assuming table name is wrong without checking
  • Thinking executeSql cannot use placeholders
5. You want to display a list of items stored in a SQLite table inside your React Native app. Which approach correctly updates the UI after fetching data from the database?
const [items, setItems] = useState([]);

useEffect(() => {
  db.transaction(tx => {
    tx.executeSql('SELECT * FROM items;', [], (_, { rows }) => {
      // What should go here?
    });
  });
}, []);
hard
A. items = rows._array;
B. return rows._array;
C. setItems(rows._array);
D. console.log(rows._array);

Solution

  1. Step 1: Understand React state update

    To update UI, React state setter setItems must be called with new data.
  2. Step 2: Identify correct way to update state

    Assigning directly to items or returning data won't update state; logging only shows data.
  3. Final Answer:

    setItems(rows._array); -> Option C
  4. Quick Check:

    Use setItems() to update state and UI [OK]
Hint: Use setState function to update React state after DB fetch [OK]
Common Mistakes:
  • Assigning directly to state variable instead of using setter
  • Returning data inside executeSql callback
  • Only logging data without updating state
Recommended

Ready to prove it?

Pass the test and this pattern moves unknown strong while earning +1 Grip toward your certificate.

10 questions~5 mineasy hard