1. FizzBuzz Problem

Question: Write a Java program that prints the numbers from 1 to 100. But for multiples of three, print “Fizz” instead of the number and for the multiples of five, print “Buzz”. For numbers which are multiples of both three and five, print “FizzBuzz”.

public class FizzBuzz {
    public static void main(String[] args) {
        for (int i = 1; i <= 100; i++) {
            if (i % 3 == 0 && i % 5 == 0) {
                System.out.println("FizzBuzz");
            } else if (i % 3 == 0) {
                System.out.println("Fizz");
            } else if (i % 5 == 0) {
                System.out.println("Buzz");
            } else {
                System.out.println(i);
            }
        }
    }
}

2. Reverse a String

Question: Write a Java program to reverse a string without using the built-in reverse method.

public class ReverseString {
    public static void main(String[] args) {
        String str = "Hello, World!";
        String reversed = reverse(str);
        System.out.println(reversed);
    }

    public static String reverse(String str) {
        if (str == null || str.length() == 0) {
            return str;
        }
        StringBuilder sb = new StringBuilder();
        for (int i = str.length() - 1; i >= 0; i--) {
            sb.append(str.charAt(i));
        }
        return sb.toString();
    }
}

3. Check for Palindrome

Question: Write a Java program to check if a given string is a palindrome.

public class Palindrome {
    public static void main(String[] args) {
        String str = "madam";
        boolean isPalindrome = isPalindrome(str);
        System.out.println(str + " is palindrome? " + isPalindrome);
    }

    public static boolean isPalindrome(String str) {
        int left = 0;
        int right = str.length() - 1;
        while (left < right) {
            if (str.charAt(left) != str.charAt(right)) {
                return false;
            }
            left++;
            right--;
        }
        return true;
    }
}

4. Find the Missing Number

Question: Write a Java program to find the missing number in an array of size n containing numbers from 1 to n.

public class MissingNumber {
    public static void main(String[] args) {
        int[] arr = {1, 2, 4, 5, 6};
        int missingNumber = findMissingNumber(arr);
        System.out.println("Missing number is: " + missingNumber);
    }

    public static int findMissingNumber(int[] arr) {
        int n = arr.length + 1;
        int sum = (n * (n + 1)) / 2;
        int arrSum = 0;
        for (int num : arr) {
            arrSum += num;
        }
        return sum - arrSum;
    }
}

5. Fibonacci Series

Question: Write a Java program to print the first n Fibonacci numbers.

public class Fibonacci {
    public static void main(String[] args) {
        int n = 10;
        printFibonacci(n);
    }

    public static void printFibonacci(int n) {
        int a = 0, b = 1;
        System.out.print(a + " " + b);
        for (int i = 2; i < n; i++) {
            int next = a + b;
            System.out.print(" " + next);
            a = b;
            b = next;
        }
    }
}

6. Anagram Check

Question: Write a Java program to check if two strings are anagrams of each other.

import java.util.Arrays;

public class AnagramCheck {
    public static void main(String[] args) {
        String str1 = "listen";
        String str2 = "silent";
        boolean isAnagram = areAnagrams(str1, str2);
        System.out.println(str1 + " and " + str2 + " are anagrams? " + isAnagram);
    }

    public static boolean areAnagrams(String str1, String str2) {
        if (str1.length() != str2.length()) {
            return false;
        }
        char[] charArray1 = str1.toCharArray();
        char[] charArray2 = str2.toCharArray();
        Arrays.sort(charArray1);
        Arrays.sort(charArray2);
        return Arrays.equals(charArray1, charArray2);
    }
}

7. Factorial Calculation

Question: Write a Java program to calculate the factorial of a number using recursion.

public class Factorial {
    public static void main(String[] args) {
        int number = 5;
        int result = factorial(number);
        System.out.println("Factorial of " + number + " is: " + result);
    }

    public static int factorial(int n) {
        if (n == 0) {
            return 1;
        }
        return n * factorial(n - 1);
    }
}

8. Find the Second Largest Number in an Array

Question: Write a Java program to find the second largest number in an array.

public class SecondLargest {
    public static void main(String[] args) {
        int[] arr = {10, 5, 20, 8, 12};
        int secondLargest = findSecondLargest(arr);
        System.out.println("Second largest number is: " + secondLargest);
    }

    public static int findSecondLargest(int[] arr) {
        int firstLargest = Integer.MIN_VALUE;
        int secondLargest = Integer.MIN_VALUE;
        for (int num : arr) {
            if (num > firstLargest) {
                secondLargest = firstLargest;
                firstLargest = num;
            } else if (num > secondLargest && num != firstLargest) {
                secondLargest = num;
            }
        }
        return secondLargest;
    }
}

9. Sum of Digits in a Number

Question: Write a Java program to find the sum of the digits of a given number.

public class SumOfDigits {
    public static void main(String[] args) {
        int number = 12345;
        int sum = sumOfDigits(number);
        System.out.println("Sum of digits of " + number + " is: " + sum);
    }

    public static int sumOfDigits(int number) {
        int sum = 0;
        while (number != 0) {
            sum += number % 10;
            number /= 10;
        }
        return sum;
    }
}

10. Print All Permutations of a String

Question: Write a Java program to print all permutations of a given string.

public class Permutations {
    public static void main(String[] args) {
        String str = "ABC";
        permute(str, 0, str.length() - 1);
    }

    public static void permute(String str, int l, int r) {
        if (l == r) {
            System.out.println(str);
        } else {
            for (int i = l; i <= r; i++) {
                str = swap(str, l, i);
                permute(str, l + 1, r);
                str = swap(str, l, i); // backtrack
            }
        }
    }

    public static String swap(String str, int i, int j) {
        char[] charArray = str.toCharArray();
        char temp = charArray[i];
        charArray[i] = charArray[j];
        charArray[j] = temp;
        return String.valueOf(charArray);
    }
}

Collection Programs

1. Write a Java program to demonstrate the use of ArrayList.

import java.util.ArrayList;
import java.util.List;

public class ArrayListExample {
    public static void main(String[] args) {
        List<String> fruits = new ArrayList<>();

        // Adding elements
        fruits.add("Apple");
        fruits.add("Banana");
        fruits.add("Orange");

        // Iterating through the list
        for (String fruit : fruits) {
            System.out.println(fruit);
        }

        // Getting an element
        System.out.println("First fruit: " + fruits.get(0));

        // Removing an element
        fruits.remove("Banana");
        System.out.println("After removing Banana: " + fruits);

        // Checking size
        System.out.println("Size of the list: " + fruits.size());
    }
}

2. Write a Java program to demonstrate the use of LinkedList.

import java.util.LinkedList;

public class LinkedListExample {
    public static void main(String[] args) {
        LinkedList<String> animals = new LinkedList<>();

        // Adding elements
        animals.add("Dog");
        animals.add("Cat");
        animals.add("Horse");

        // Iterating through the list
        for (String animal : animals) {
            System.out.println(animal);
        }

        // Adding elements at the beginning and end
        animals.addFirst("Elephant");
        animals.addLast("Zebra");
        System.out.println("After adding elements at beginning and end: " + animals);

        // Removing first and last elements
        animals.removeFirst();
        animals.removeLast();
        System.out.println("After removing first and last elements: " + animals);

        // Checking size
        System.out.println("Size of the list: " + animals.size());
    }
}

3. Write a Java program to demonstrate the use of HashSet.

import java.util.HashSet;
import java.util.Set;

public class HashSetExample {
    public static void main(String[] args) {
        Set<String> countries = new HashSet<>();

        // Adding elements
        countries.add("USA");
        countries.add("Canada");
        countries.add("Mexico");

        // Attempting to add a duplicate element
        countries.add("USA");

        // Iterating through the set
        for (String country : countries) {
            System.out.println(country);
        }

        // Checking if an element exists
        System.out.println("Contains Canada? " + countries.contains("Canada"));

        // Removing an element
        countries.remove("Mexico");
        System.out.println("After removing Mexico: " + countries);

        // Checking size
        System.out.println("Size of the set: " + countries.size());
    }
}

4. Write a Java program to demonstrate the use of TreeSet.

import java.util.TreeSet;

public class TreeSetExample {
    public static void main(String[] args) {
        TreeSet<Integer> numbers = new TreeSet<>();

        // Adding elements
        numbers.add(10);
        numbers.add(5);
        numbers.add(15);

        // Iterating through the set
        for (Integer number : numbers) {
            System.out.println(number);
        }

        // Getting the first and last elements
        System.out.println("First element: " + numbers.first());
        System.out.println("Last element: " + numbers.last());

        // Removing an element
        numbers.remove(10);
        System.out.println("After removing 10: " + numbers);

        // Checking size
        System.out.println("Size of the set: " + numbers.size());
    }
}

5. Write a Java program to demonstrate the use of HashMap.

import java.util.HashMap;
import java.util.Map;

public class HashMapExample {
    public static void main(String[] args) {
        Map<String, Integer> ages = new HashMap<>();

        // Adding elements
        ages.put("Alice", 30);
        ages.put("Bob", 25);
        ages.put("Charlie", 35);

        // Iterating through the map
        for (Map.Entry<String, Integer> entry : ages.entrySet()) {
            System.out.println(entry.getKey() + ": " + entry.getValue());
        }

        // Getting an element
        System.out.println("Alice's age: " + ages.get("Alice"));

        // Removing an element
        ages.remove("Bob");
        System.out.println("After removing Bob: " + ages);

        // Checking size
        System.out.println("Size of the map: " + ages.size());
    }
}

6. Write a Java program to demonstrate the use of TreeMap.

import java.util.Map;
import java.util.TreeMap;

public class TreeMapExample {
    public static void main(String[] args) {
        TreeMap<String, Integer> scores = new TreeMap<>();

        // Adding elements
        scores.put("Alice", 85);
        scores.put("Bob", 90);
        scores.put("Charlie", 80);

        // Iterating through the map
        for (Map.Entry<String, Integer> entry : scores.entrySet()) {
            System.out.println(entry.getKey() + ": " + entry.getValue());
        }

        // Getting the first and last entries
        System.out.println("First entry: " + scores.firstEntry());
        System.out.println("Last entry: " + scores.lastEntry());

        // Removing an element
        scores.remove("Bob");
        System.out.println("After removing Bob: " + scores);

        // Checking size
        System.out.println("Size of the map: " + scores.size());
    }
}

7. Write a Java program to demonstrate the use of PriorityQueue.

import java.util.PriorityQueue;

public class PriorityQueueExample {
    public static void main(String[] args) {
        PriorityQueue<Integer> queue = new PriorityQueue<>();

        // Adding elements
        queue.add(10);
        queue.add(5);
        queue.add(15);

        // Iterating through the queue
        while (!queue.isEmpty()) {
            System.out.println(queue.poll());
        }
    }
}

8. Write a Java program to demonstrate the use of Stack

import java.util.Stack;

public class StackExample {
    public static void main(String[] args) {
        Stack<String> stack = new Stack<>();

        // Pushing elements onto the stack
        stack.push("Apple");
        stack.push("Banana");
        stack.push("Cherry");

        // Popping elements from the stack
        while (!stack.isEmpty()) {
            System.out.println(stack.pop());
        }
    }
}

9. Write a Java program to demonstrate the use of Queue implemented using LinkedList.

import java.util.LinkedList;
import java.util.Queue;

public class QueueExample {
    public static void main(String[] args) {
        Queue<String> queue = new LinkedList<>();

        // Adding elements
        queue.add("Apple");
        queue.add("Banana");
        queue.add("Cherry");

        // Polling elements from the queue
        while (!queue.isEmpty()) {
            System.out.println(queue.poll());
        }
    }
}

10. Write a Java program to demonstrate the use of Deque implemented using ArrayDeque

import java.util.ArrayDeque;
import java.util.Deque;

public class DequeExample {
    public static void main(String[] args) {
        Deque<String> deque = new ArrayDeque<>();

        // Adding elements to both ends
        deque.addFirst("Apple");
        deque.addLast("Banana");
        deque.addFirst("Cherry");

        // Iterating through the deque
        while (!deque.isEmpty()) {
            System.out.println(deque.pollFirst());
        }
    }
}

Java 8 Features

1. Lambda Expressions

Question: Write a Java program to demonstrate the use of lambda expressions.

import java.util.Arrays;
import java.util.List;

public class LambdaExample {
    public static void main(String[] args) {
        List<String> names = Arrays.asList("Alice", "Bob", "Charlie");

        // Using lambda expression to iterate through the list
        names.forEach(name -> System.out.println(name));
    }
}

2. Functional Interfaces

Question: Write a Java program to demonstrate the use of functional interfaces.

import java.util.function.Predicate;

public class FunctionalInterfaceExample {
    public static void main(String[] args) {
        Predicate<Integer> isEven = number -> number % 2 == 0;

        System.out.println("Is 4 even? " + isEven.test(4));
        System.out.println("Is 5 even? " + isEven.test(5));
    }
}

3. Streams API

Question: Write a Java program to demonstrate the use of the Streams API.

import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;

public class StreamsExample {
    public static void main(String[] args) {
        List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5, 6, 7, 8, 9, 10);

        // Using Streams API to filter even numbers and collect them into a list
        List<Integer> evenNumbers = numbers.stream()
                                           .filter(number -> number % 2 == 0)
                                           .collect(Collectors.toList());

        System.out.println("Even numbers: " + evenNumbers);
    }
}

4. Optional Class

Question: Write a Java program to demonstrate the use of the Optional class.

import java.util.Optional;

public class OptionalExample {
    public static void main(String[] args) {
        String[] words = new String[10];
        words[2] = "hello";

        Optional<String> checkNull = Optional.ofNullable(words[2]);
        checkNull.ifPresent(System.out::println);

        // Using Optional to handle a potential null value
        Optional<String> word = Optional.ofNullable(words[5]);
        String result = word.orElse("Default value");
        System.out.println(result);
    }
}

5. Method References

Question: Write a Java program to demonstrate the use of method references.

import java.util.Arrays;
import java.util.List;

public class MethodReferenceExample {
    public static void main(String[] args) {
        List<String> names = Arrays.asList("Alice", "Bob", "Charlie");

        // Using method reference to iterate through the list
        names.forEach(System.out::println);
    }
}

6. Default Methods in Interfaces

Question: Write a Java program to demonstrate default methods in interfaces.

interface Vehicle {
    default void print() {
        System.out.println("I am a vehicle.");
    }

    static void blowHorn() {
        System.out.println("Blowing horn!!!");
    }
}

class Car implements Vehicle {
    @Override
    public void print() {
        System.out.println("I am a car.");
    }
}

public class DefaultMethodsExample {
    public static void main(String[] args) {
        Vehicle car = new Car();
        car.print(); // Calls the overridden method in Car
        Vehicle.blowHorn(); // Calls the static method in Vehicle interface
    }
}

7. New Date and Time API

Question: Write a Java program to demonstrate the new Date and Time API.

import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.LocalTime;
import java.time.format.DateTimeFormatter;

public class DateTimeExample {
    public static void main(String[] args) {
        LocalDate date = LocalDate.now();
        System.out.println("Current Date: " + date);

        LocalTime time = LocalTime.now();
        System.out.println("Current Time: " + time);

        LocalDateTime dateTime = LocalDateTime.now();
        System.out.println("Current DateTime: " + dateTime);

        // Formatting DateTime
        DateTimeFormatter formatter = DateTimeFormatter.ofPattern("dd-MM-yyyy HH:mm:ss");
        String formattedDateTime = dateTime.format(formatter);
        System.out.println("Formatted DateTime: " + formattedDateTime);
    }
}

8. Stream Reduction

Question: Write a Java program to demonstrate stream reduction.

import java.util.Arrays;
import java.util.List;

public class StreamReductionExample {
    public static void main(String[] args) {
        List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5);

        // Using reduce() to calculate the sum of the list
        int sum = numbers.stream()
                         .reduce(0, (a, b) -> a + b);

        System.out.println("Sum: " + sum);

        // Using method reference with reduce()
        int product = numbers.stream()
                             .reduce(1, Math::multiplyExact);

        System.out.println("Product: " + product);
    }
}

9. Parallel Streams

Question: Write a Java program to demonstrate parallel streams.

import java.util.Arrays;
import java.util.List;

public class ParallelStreamsExample {
    public static void main(String[] args) {
        List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5, 6, 7, 8, 9, 10);

        // Using parallel stream to filter even numbers
        List<Integer> evenNumbers = numbers.parallelStream()
                                           .filter(number -> number % 2 == 0)
                                           .collect(Collectors.toList());

        System.out.println("Even numbers: " + evenNumbers);
    }
}

10. Collectors

Question: Write a Java program to demonstrate the use of Collectors.

import java.util.Arrays;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;

public class CollectorsExample {
    public static void main(String[] args) {
        List<String> names = Arrays.asList("Alice", "Bob", "Charlie", "David", "Edward");

        // Using Collectors to group names by their starting letter
        Map<Character, List<String>> groupedByFirstLetter = names.stream()
                .collect(Collectors.groupingBy(name -> name.charAt(0)));

        groupedByFirstLetter.forEach((letter, group) -> {
            System.out.println(letter + ": " + group);
        });
    }
}

11. Stream Operations: map()

Question: Write a Java program to demonstrate the use of the map() method in streams.

import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;

public class StreamMapExample {
    public static void main(String[] args) {
        List<String> names = Arrays.asList("alice", "bob", "charlie");

        // Using map() to convert all names to uppercase
        List<String> upperCaseNames = names.stream()
                                           .map(String::toUpperCase)
                                           .collect(Collectors.toList());

        System.out.println(upperCaseNames);
    }
}

12. Stream Operations: flatMap()

Question: Write a Java program to demonstrate the use of the flatMap() method in streams.

import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;

public class StreamFlatMapExample {
    public static void main(String[] args) {
        List<List<String>> namesList = Arrays.asList(
            Arrays.asList("Alice", "Bob"),
            Arrays.asList("Charlie", "David"),
            Arrays.asList("Edward", "Frank")
        );

        // Using flatMap() to flatten the list of lists into a single list
        List<String> flatList = namesList.stream()
                                         .flatMap(List::stream)
                                         .collect(Collectors.toList());

        System.out.println(flatList);
    }
}

13. Stream Operations: sorted()

Question: Write a Java program to demonstrate the use of the sorted() method in streams.

import java.util.Arrays;
import java.util.List;

public class StreamSortedExample {
    public static void main(String[] args) {
        List<Integer> numbers = Arrays.asList(5, 3, 9, 1, 4, 2);

        // Using sorted() to sort the list in natural order
        List<Integer> sortedNumbers = numbers.stream()
                                             .sorted()
                                             .collect(Collectors.toList());

        System.out.println(sortedNumbers);
    }
}

14. Stream Operations: distinct()

Question: Write a Java program to demonstrate the use of the distinct() method in streams.

import java.util.Arrays;
import java.util.List;

public class StreamDistinctExample {
    public static void main(String[] args) {
        List<Integer> numbers = Arrays.asList(1, 2, 3, 2, 4, 5, 1, 6);

        // Using distinct() to remove duplicates from the list
        List<Integer> distinctNumbers = numbers.stream()
                                               .distinct()
                                               .collect(Collectors.toList());

        System.out.println(distinctNumbers);
    }
}

15. Stream Operations: peek()

Question: Write a Java program to demonstrate the use of the peek() method in streams.

import java.util.Arrays;
import java.util.List;

public class StreamPeekExample {
    public static void main(String[] args) {
        List<String> names = Arrays.asList("Alice", "Bob", "Charlie");

        // Using peek() to log the elements during the stream processing
        List<String> processedNames = names.stream()
                                           .peek(name -> System.out.println("Processing: " + name))
                                           .map(String::toUpperCase)
                                           .collect(Collectors.toList());

        System.out.println(processedNames);
    }
}

16. Stream Operations: count()

Question: Write a Java program to demonstrate the use of the count() method in streams.

import java.util.Arrays;
import java.util.List;

public class StreamCountExample {
    public static void main(String[] args) {
        List<String> names = Arrays.asList("Alice", "Bob", "Charlie", "David", "Edward");

        // Using count() to count the number of elements in the stream
        long count = names.stream()
                          .filter(name -> name.length() > 3)
                          .count();

        System.out.println("Number of names longer than 3 characters: " + count);
    }
}

17. Stream Operations: findFirst()

Question: Write a Java program to demonstrate the use of the findFirst() method in streams.

import java.util.Arrays;
import java.util.List;

public class StreamFindFirstExample {
    public static void main(String[] args) {
        List<String> names = Arrays.asList("Alice", "Bob", "Charlie");

        // Using findFirst() to find the first element in the stream
        String firstElement = names.stream()
                                   .findFirst()
                                   .orElse("No elements");

        System.out.println("First element: " + firstElement);
    }
}

18. Stream Operations: reduce()

Question: Write a Java program to demonstrate the use of the reduce() method in streams.

import java.util.Arrays;
import java.util.List;

public class StreamReduceExample {
    public static void main(String[] args) {
        List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5);

        // Using reduce() to calculate the sum of all elements in the list
        int sum = numbers.stream()
                         .reduce(0, (a, b) -> a + b);

        System.out.println("Sum: " + sum);

        // Using method reference with reduce()
        int product = numbers.stream()
                             .reduce(1, Math::multiplyExact);

        System.out.println("Product: " + product);
    }
}

19. Stream Operations: collect()

Question: Write a Java program to demonstrate the use of the collect() method in streams.

import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;

public class StreamCollectExample {
    public static void main(String[] args) {
        List<String> names = Arrays.asList("Alice", "Bob", "Charlie");

        // Using collect() to convert the stream into a list
        List<String> upperCaseNames = names.stream()
                                           .map(String::toUpperCase)
                                           .collect(Collectors.toList());

        System.out.println(upperCaseNames);
    }
}

20. Stream Operations: groupingBy()

Question: Write a Java program to demonstrate the use of the groupingBy() method in streams.

import java.util.Arrays;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;

public class StreamGroupingByExample {
    public static void main(String[] args) {
        List<String> names = Arrays.asList("Alice", "Bob", "Charlie", "David", "Edward");

        // Using groupingBy() to group names by their starting letter
        Map<Character, List<String>> groupedByFirstLetter = names.stream()
                .collect(Collectors.groupingBy(name -> name.charAt(0)));

        groupedByFirstLetter.forEach((letter, group) -> {
            System.out.println(letter + ": " + group);
        });
    }
}

JDBC programs in Java

1. Connect to a Database

Question: Write a Java program to demonstrate connecting to a database using JDBC

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;

public class JdbcConnectExample {
    public static void main(String[] args) {
        String url = "jdbc:mysql://localhost:3306/mydatabase";
        String username = "root";
        String password = "password";

        try (Connection connection = DriverManager.getConnection(url, username, password)) {
            if (connection != null) {
                System.out.println("Connected to the database!");
            } else {
                System.out.println("Failed to connect to the database.");
            }
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }
}

2. Create a Table

Question: Write a Java program to create a table using JDBC.

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.sql.Statement;

public class JdbcCreateTableExample {
    public static void main(String[] args) {
        String url = "jdbc:mysql://localhost:3306/mydatabase";
        String username = "root";
        String password = "password";

        String createTableSQL = "CREATE TABLE IF NOT EXISTS users ("
                + "id INT AUTO_INCREMENT PRIMARY KEY, "
                + "name VARCHAR(100) NOT NULL, "
                + "email VARCHAR(100) NOT NULL UNIQUE, "
                + "created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP)";

        try (Connection connection = DriverManager.getConnection(url, username, password);
             Statement statement = connection.createStatement()) {

            statement.execute(createTableSQL);
            System.out.println("Table 'users' created successfully.");
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }
}

3. Insert Data into a Table

Question: Write a Java program to insert data into a table using JDBC.

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.SQLException;

public class JdbcInsertExample {
    public static void main(String[] args) {
        String url = "jdbc:mysql://localhost:3306/mydatabase";
        String username = "root";
        String password = "password";

        String insertSQL = "INSERT INTO users (name, email) VALUES (?, ?)";

        try (Connection connection = DriverManager.getConnection(url, username, password);
             PreparedStatement preparedStatement = connection.prepareStatement(insertSQL)) {

            preparedStatement.setString(1, "John Doe");
            preparedStatement.setString(2, "john.doe@example.com");

            int row = preparedStatement.executeUpdate();
            System.out.println(row + " row(s) inserted.");
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }
}

4. Retrieve Data from a Table

Question: Write a Java program to retrieve data from a table using JDBC.

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;

public class JdbcSelectExample {
    public static void main(String[] args) {
        String url = "jdbc:mysql://localhost:3306/mydatabase";
        String username = "root";
        String password = "password";

        String selectSQL = "SELECT * FROM users";

        try (Connection connection = DriverManager.getConnection(url, username, password);
             Statement statement = connection.createStatement();
             ResultSet resultSet = statement.executeQuery(selectSQL)) {

            while (resultSet.next()) {
                int id = resultSet.getInt("id");
                String name = resultSet.getString("name");
                String email = resultSet.getString("email");
                System.out.println("ID: " + id + ", Name: " + name + ", Email: " + email);
            }
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }
}

5. Update Data in a Table

Question: Write a Java program to update data in a table using JDBC.

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.SQLException;

public class JdbcUpdateExample {
    public static void main(String[] args) {
        String url = "jdbc:mysql://localhost:3306/mydatabase";
        String username = "root";
        String password = "password";

        String updateSQL = "UPDATE users SET email = ? WHERE name = ?";

        try (Connection connection = DriverManager.getConnection(url, username, password);
             PreparedStatement preparedStatement = connection.prepareStatement(updateSQL)) {

            preparedStatement.setString(1, "new.email@example.com");
            preparedStatement.setString(2, "John Doe");

            int row = preparedStatement.executeUpdate();
            System.out.println(row + " row(s) updated.");
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }
}

6. Delete Data from a Table

Question: Write a Java program to delete data from a table using JDBC.

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.SQLException;

public class JdbcDeleteExample {
    public static void main(String[] args) {
        String url = "jdbc:mysql://localhost:3306/mydatabase";
        String username = "root";
        String password = "password";

        String deleteSQL = "DELETE FROM users WHERE name = ?";

        try (Connection connection = DriverManager.getConnection(url, username, password);
             PreparedStatement preparedStatement = connection.prepareStatement(deleteSQL)) {

            preparedStatement.setString(1, "John Doe");

            int row = preparedStatement.executeUpdate();
            System.out.println(row + " row(s) deleted.");
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }
}

7. Handling Transactions

Question: Write a Java program to demonstrate transaction handling using JDBC.

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.SQLException;

public class JdbcTransactionExample {
    public static void main(String[] args) {
        String url = "jdbc:mysql://localhost:3306/mydatabase";
        String username = "root";
        String password = "password";

        String insertSQL1 = "INSERT INTO users (name, email) VALUES (?, ?)";
        String insertSQL2 = "INSERT INTO users (name, email) VALUES (?, ?)";

        try (Connection connection = DriverManager.getConnection(url, username, password)) {
            connection.setAutoCommit(false);

            try (PreparedStatement preparedStatement1 = connection.prepareStatement(insertSQL1);
                 PreparedStatement preparedStatement2 = connection.prepareStatement(insertSQL2)) {

                preparedStatement1.setString(1, "Alice");
                preparedStatement1.setString(2, "alice@example.com");
                preparedStatement1.executeUpdate();

                preparedStatement2.setString(1, "Bob");
                preparedStatement2.setString(2, "bob@example.com");
                preparedStatement2.executeUpdate();

                connection.commit();
                System.out.println("Transaction committed successfully.");
            } catch (SQLException e) {
                connection.rollback();
                System.out.println("Transaction rolled back.");
                e.printStackTrace();
            }
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }
}

8. Batch Processing

Question: Write a Java program to demonstrate batch processing using JDBC.

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.SQLException;

public class JdbcBatchExample {
    public static void main(String[] args) {
        String url = "jdbc:mysql://localhost:3306/mydatabase";
        String username = "root";
        String password = "password";

        String insertSQL = "INSERT INTO users (name, email) VALUES (?, ?)";

        try (Connection connection = DriverManager.getConnection(url, username, password);
             PreparedStatement preparedStatement = connection.prepareStatement(insertSQL)) {

            connection.setAutoCommit(false);

            preparedStatement.setString(1, "User1");
            preparedStatement.setString(2, "user1@example.com");
            preparedStatement.addBatch();

            preparedStatement.setString(1, "User2");
            preparedStatement.setString(2, "user2@example.com");
            preparedStatement.addBatch();

            preparedStatement.setString(1, "User3");
            preparedStatement.setString(2, "user3@example.com");
            preparedStatement.addBatch();

            int[] updateCounts = preparedStatement.executeBatch();
            connection.commit();
            System.out.println("Batch executed successfully. " + updateCounts.length + " rows affected.");
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }
}

Spring Boot MVC examples

1. Setting up a Spring Boot Application

Question: Write a simple Spring Boot application with an MVC controller.

Answer: Step 1: Create a new Spring Boot project using Spring Initializr. Add dependencies for Spring Web.

Step 2: Create the main application class.

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class SpringBootMvcExampleApplication {
    public static void main(String[] args) {
        SpringApplication.run(SpringBootMvcExampleApplication.class, args);
    }
}

Step 3: Create a simple MVC controller.

import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;

@Controller
public class HelloController {

    @GetMapping("/hello")
    public String hello(Model model) {
        model.addAttribute("message", "Hello, Spring Boot MVC!");
        return "hello";
    }
}

Step 4: Create a Thymeleaf template (hello.html) in src/main/resources/templates.

<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
<head>
    <title>Hello Page</title>
</head>
<body>
    <h1 th:text="${message}"></h1>
</body>
</html>

2. Handling Form Submissions

Question: Write a Spring Boot MVC application to handle form submissions.

Answer: Step 1: Create a form template (form.html).

<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
<head>
    <title>Form Page</title>
</head>
<body>
    <form action="#" th:action="@{/submitForm}" th:object="${user}" method="post">
        <label for="name">Name:</label>
        <input type="text" id="name" th:field="*{name}"/>
        <br/>
        <label for="email">Email:</label>
        <input type="text" id="email" th:field="*{email}"/>
        <br/>
        <button type="submit">Submit</button>
    </form>
</body>
</html>

Step 2: Create a result template (result.html).

<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
<head>
    <title>Result Page</title>
</head>
<body>
    <h1>Form Submitted Successfully!</h1>
    <p>Name: <span th:text="${user.name}"></span></p>
    <p>Email: <span th:text="${user.email}"></span></p>
</body>
</html>

Step 3: Create a User class to hold form data.

public class User {
    private String name;
    private String email;

    // Getters and setters
    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getEmail() {
        return email;
    }

    public void setEmail(String email) {
        this.email = email;
    }
}

Step 4: Create a controller to handle form submissions.

import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.PostMapping;

@Controller
public class FormController {

    @GetMapping("/form")
    public String showForm(Model model) {
        model.addAttribute("user", new User());
        return "form";
    }

    @PostMapping("/submitForm")
    public String submitForm(@ModelAttribute User user, Model model) {
        model.addAttribute("user", user);
        return "result";
    }
}

3. REST API with Spring Boot

Question: Write a simple REST API with Spring Boot.

Answer: Step 1: Create a User model class.

public class User {
    private Long id;
    private String name;
    private String email;

    // Constructors, getters, and setters
    public User() {}

    public User(Long id, String name, String email) {
        this.id = id;
        this.name = name;
        this.email = email;
    }

    public Long getId() {
        return id;
    }

    public void setId(Long id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getEmail() {
        return email;
    }

    public void setEmail(String email) {
        this.email = email;
    }
}

Step 2: Create a UserController class to handle RESTful requests.

import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RestController;

import java.util.ArrayList;
import java.util.List;

@RestController
public class UserController {

    private List<User> users = new ArrayList<>();

    @GetMapping("/users")
    public List<User> getUsers() {
        return users;
    }

    @PostMapping("/users")
    public User addUser(@RequestBody User user) {
        user.setId((long) (users.size() + 1));
        users.add(user);
        return user;
    }

    @GetMapping("/users/{id}")
    public User getUserById(@PathVariable Long id) {
        return users.stream()
                    .filter(user -> user.getId().equals(id))
                    .findFirst()
                    .orElse(null);
    }
}

4. Exception Handling in Spring Boot

Question: Write a Spring Boot application demonstrating exception handling with @ControllerAdvice.

Answer: Step 1: Create a custom exception class.

public class UserNotFoundException extends RuntimeException {
    public UserNotFoundException(String message) {
        super(message);
    }
}

Step 2: Modify the UserController to throw the custom exception.

import org.springframework.web.bind.annotation.*;

import java.util.ArrayList;
import java.util.List;

@RestController
public class UserController {

    private List<User> users = new ArrayList<>();

    @GetMapping("/users")
    public List<User> getUsers() {
        return users;
    }

    @PostMapping("/users")
    public User addUser(@RequestBody User user) {
        user.setId((long) (users.size() + 1));
        users.add(user);
        return user;
    }

    @GetMapping("/users/{id}")
    public User getUserById(@PathVariable Long id) {
        return users.stream()
                    .filter(user -> user.getId().equals(id))
                    .findFirst()
                    .orElseThrow(() -> new UserNotFoundException("User not found with id: " + id));
    }
}

Step 3: Create a GlobalExceptionHandler class with @ControllerAdvice.

import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.ResponseStatus;

@ControllerAdvice
public class GlobalExceptionHandler {

    @ExceptionHandler(UserNotFoundException.class)
    @ResponseStatus(HttpStatus.NOT_FOUND)
    public ResponseEntity<String> handleUserNotFoundException(UserNotFoundException ex) {
        return new ResponseEntity<>(ex.getMessage(), HttpStatus.NOT_FOUND);
    }

    // Other exception handlers can be added here
}

5. Using Spring Data JPA

Question: Write a Spring Boot application using Spring Data JPA to perform CRUD operations.

Answer: Step 1: Add the Spring Data JPA dependency in pom.xml.

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
<dependency>
    <groupId>com.h2database</groupId>
    <artifactId>h2</artifactId>
    <scope>runtime</scope>
</dependency>

Step 2: Create the User entity class.

import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;

@Entity
public class User {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;
    private String name;
    private String email;

    // Getters and setters
    public Long getId() {
        return id;
    }

    public void setId(Long id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getEmail() {
        return email;
    }

    public void setEmail(String email) {
        this.email = email;
    }
}

Step 3: Create a UserRepository interface

import org.springframework.data.jpa.repository.JpaRepository;

public interface UserRepository extends JpaRepository<User, Long> {
}

Step 4: Create a UserService class

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.List;
import java.util.Optional;

@Service
public class UserService {

    @Autowired
    private UserRepository userRepository;

    public List<User> getAllUsers() {
        return userRepository.findAll();
    }

    public User getUserById(Long id) {
        return userRepository.findById(id).orElse(null);
    }

    public User saveUser(User user) {
        return userRepository.save(user);
    }

    public void deleteUser(Long id) {
        userRepository.deleteById(id);
    }
}

Step 5: Create a UserController class to handle HTTP requests.

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;

import java.util.List;

@RestController
@RequestMapping("/users")
public class UserController {

    @Autowired
    private UserService userService;

    @GetMapping
    public List<User> getAllUsers() {
        return userService.getAllUsers();
    }

    @GetMapping("/{id}")
    public ResponseEntity<User> getUserById(@PathVariable Long id) {
        User user = userService.getUserById(id);
        if (user == null) {
            return ResponseEntity.notFound().build();
        }
        return ResponseEntity.ok(user);
    }

    @PostMapping
    public User createUser(@RequestBody User user) {
        return userService.saveUser(user);
    }

    @PutMapping("/{id}")
    public ResponseEntity<User> updateUser(@PathVariable Long id, @RequestBody User user) {
        User existingUser = userService.getUserById(id);
        if (existingUser == null) {
            return ResponseEntity.notFound().build();
        }
        user.setId(id);
        return ResponseEntity.ok(userService.saveUser(user));
    }

    @DeleteMapping("/{id}")
    public ResponseEntity<Void> deleteUser(@PathVariable Long id) {
        User existingUser = userService.getUserById(id);
        if (existingUser == null) {
            return ResponseEntity.notFound().build();
        }
        userService.deleteUser(id);
        return ResponseEntity.noContent().build();
    }
}