0% found this document useful (0 votes)
4 views32 pages

Advance Java

The document describes three Java applications: a Swing application for user registration and shape drawing, a JavaBean for storing employee details with a GUI, and a Java RMI-based distributed application for basic arithmetic operations. Each application includes code snippets, explanations of components, and how they function, such as event handling in Swing, property management in JavaBeans, and remote method invocation in RMI. The document emphasizes the use of various Java features like layout managers, property change support, and remote object activation.

Uploaded by

germain
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as DOCX, PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
4 views32 pages

Advance Java

The document describes three Java applications: a Swing application for user registration and shape drawing, a JavaBean for storing employee details with a GUI, and a Java RMI-based distributed application for basic arithmetic operations. Each application includes code snippets, explanations of components, and how they function, such as event handling in Swing, property management in JavaBeans, and remote method invocation in RMI. The document emphasizes the use of various Java features like layout managers, property change support, and remote object activation.

Uploaded by

germain
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as DOCX, PDF, TXT or read online on Scribd
You are on page 1/ 32

Q1. "Design and implement a Java Swing application for user registration and shape drawing.

Use
various layout managers (BorderLayout, GridLayout), event handling mechanisms, adapter classes,
and basic Swing components. The app should collect user input and allow drawing 2D shapes in
different colors."

import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import java.util.ArrayList;

// Main Class
public class ShapeDrawingApp {
public static void main(String[] args) {
SwingUtilities.invokeLater(() -> new RegistrationFrame());
}
}

// Registration Frame
class RegistrationFrame extends JFrame {
JTextField nameField, emailField;
JPasswordField passField;
JRadioButton maleBtn, femaleBtn;
JButton registerBtn;

public RegistrationFrame() {
setTitle("User Registration");
setSize(400, 300);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setLayout(new BorderLayout());

// Center Panel - GridLayout


JPanel centerPanel = new JPanel(new GridLayout(5, 2, 5, 5));
centerPanel.setBorder(BorderFactory.createEmptyBorder(20, 20, 20, 20));

nameField = new JTextField();


emailField = new JTextField();
passField = new JPasswordField();
maleBtn = new JRadioButton("Male");
femaleBtn = new JRadioButton("Female");

ButtonGroup genderGroup = new ButtonGroup();


genderGroup.add(maleBtn);
genderGroup.add(femaleBtn);
centerPanel.add(new JLabel("Name:"));
centerPanel.add(nameField);
centerPanel.add(new JLabel("Email:"));
centerPanel.add(emailField);
centerPanel.add(new JLabel("Password:"));
centerPanel.add(passField);
centerPanel.add(new JLabel("Gender:"));

JPanel genderPanel = new JPanel(new FlowLayout());


genderPanel.add(maleBtn);
genderPanel.add(femaleBtn);
centerPanel.add(genderPanel);

registerBtn = new JButton("Register");

add(centerPanel, BorderLayout.CENTER);
add(registerBtn, BorderLayout.SOUTH);

registerBtn.addActionListener(e -> {
if (nameField.getText().isEmpty() || emailField.getText().isEmpty() ||
passField.getPassword().length == 0
|| (!maleBtn.isSelected() && !femaleBtn.isSelected())) {
JOptionPane.showMessageDialog(this, "Please fill all fields.");
} else {
dispose();
new DrawingFrame();
}
});

setVisible(true);
}
}

// Drawing Frame
class DrawingFrame extends JFrame {
private JComboBox<String> shapeBox, colorBox;
private DrawingPanel drawingPanel;

public DrawingFrame() {
setTitle("Shape Drawing Panel");
setSize(600, 500);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setLayout(new BorderLayout());
// Top panel for shape and color selection
JPanel topPanel = new JPanel();
shapeBox = new JComboBox<>(new String[]{"Circle", "Rectangle"});
colorBox = new JComboBox<>(new String[]{"Red", "Green", "Blue", "Black"});

topPanel.add(new JLabel("Shape:"));
topPanel.add(shapeBox);
topPanel.add(new JLabel("Color:"));
topPanel.add(colorBox);

add(topPanel, BorderLayout.NORTH);

drawingPanel = new DrawingPanel(shapeBox, colorBox);


add(drawingPanel, BorderLayout.CENTER);

setVisible(true);
}
}

// Panel where shapes are drawn


class DrawingPanel extends JPanel {
private final JComboBox<String> shapeBox, colorBox;
private final ArrayList<ShapeRecord> shapes = new ArrayList<>();

public DrawingPanel(JComboBox<String> shapeBox, JComboBox<String> colorBox) {


this.shapeBox = shapeBox;
this.colorBox = colorBox;

setBackground(Color.WHITE);
addMouseListener(new MouseAdapter() {
public void mousePressed(MouseEvent e) {
String shape = (String) shapeBox.getSelectedItem();
String colorName = (String) colorBox.getSelectedItem();

Color color;
switch (colorName) {
case "Red" -> color = Color.RED;
case "Green" -> color = Color.GREEN;
case "Blue" -> color = Color.BLUE;
default -> color = Color.BLACK;
}

shapes.add(new ShapeRecord(shape, e.getX(), e.getY(), color));


repaint();
}
});
}

protected void paintComponent(Graphics g) {


super.paintComponent(g);
for (ShapeRecord s : shapes) {
g.setColor(s.color);
switch (s.shape) {
case "Circle" -> g.fillOval(s.x - 25, s.y - 25, 50, 50);
case "Rectangle" -> g.fillRect(s.x - 30, s.y - 20, 60, 40);
}
}
}

// Inner class to record shape data


static class ShapeRecord {
String shape;
int x, y;
Color color;

ShapeRecord(String shape, int x, int y, Color color) {


this.shape = shape;
this.x = x;
this.y = y;
this.color = color;
}
}
}
How It Works

1. Starts with a Registration Form – User enters name, email, password, and gender.

2. After Registration – Opens a Shape Drawing Window.

3. User Picks Shape & Color – Circle or Rectangle; Red, Green, Blue, Black.

4. Click on Canvas – Draws the selected shape at the clicked location.

Components & Features:

Component Purpose

JTextField Input for name and email

JPasswordField Password input

JRadioButton Gender selection

JButton Register button

JComboBox Select shape and color

JPanel Holds input fields and drawing area

JFrame Main window for each screen

MouseAdapter Detects mouse clicks for drawing

Graphics Draws shapes on the panel

Layouts Used:

 BorderLayout – Main layout of windows

 GridLayout – Form fields

 FlowLayout – Gender options

OUTPUT
Q2. "Develop a JavaBean for storing employee details (name, ID, salary, department). Demonstrate
the use of properties, getter/setter methods, bound and constrained properties, and the use of
BeanInfo interface. Also, create a GUI application that uses this bean and allows users to set and
retrieve the properties."

import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import java.beans.*;
import java.io.Serializable;

public class EmployeeBeanApp {

// JavaBean class with bound and constrained properties


public static class EmployeeBean implements Serializable {
private String name;
private int id;
private double salary;
private String department;

private final PropertyChangeSupport pcs = new PropertyChangeSupport(this);


private final VetoableChangeSupport vcs = new VetoableChangeSupport(this);

public EmployeeBean() {}

public String getName() {


return name;
}

public void setName(String name) {


String old = this.name;
this.name = name;
pcs.firePropertyChange("name", old, name);
}

public int getId() {


return id;
}

public void setId(int id) throws PropertyVetoException {


int old = this.id;
vcs.fireVetoableChange("id", old, id);
this.id = id;
pcs.firePropertyChange("id", old, id);
}

public double getSalary() {


return salary;
}

public void setSalary(double salary) {


double old = this.salary;
this.salary = salary;
pcs.firePropertyChange("salary", old, salary);
}

public String getDepartment() {


return department;
}

public void setDepartment(String department) {


String old = this.department;
this.department = department;
pcs.firePropertyChange("department", old, department);
}

public void addPropertyChangeListener(PropertyChangeListener listener) {


pcs.addPropertyChangeListener(listener);
}

public void removePropertyChangeListener(PropertyChangeListener listener) {


pcs.removePropertyChangeListener(listener);
}

public void addVetoableChangeListener(VetoableChangeListener listener) {


vcs.addVetoableChangeListener(listener);
}

public void removeVetoableChangeListener(VetoableChangeListener listener) {


vcs.removeVetoableChangeListener(listener);
}
}

// GUI Application
public static void main(String[] args) {
SwingUtilities.invokeLater(EmployeeBeanApp::createAndShowGUI);
}
private static void createAndShowGUI() {
JFrame frame = new JFrame("Employee Bean GUI");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setSize(450, 350);

EmployeeBean bean = new EmployeeBean();

// Add listeners
bean.addPropertyChangeListener(evt ->
System.out.println("Property '" + evt.getPropertyName() + "' changed from " +
evt.getOldValue() + " to " + evt.getNewValue()));

try {
bean.addVetoableChangeListener(evt -> {
if ("id".equals(evt.getPropertyName()) && (int) evt.getNewValue() < 0) {
throw new PropertyVetoException("Negative ID not allowed", evt);
}
});
} catch (Exception e) {
e.printStackTrace();
}

JPanel panel = new JPanel(new GridLayout(6, 2, 5, 5));


JTextField nameField = new JTextField();
JTextField idField = new JTextField();
JTextField salaryField = new JTextField();
JTextField deptField = new JTextField();
JButton setBtn = new JButton("Set");
JButton getBtn = new JButton("Get");
JTextArea outputArea = new JTextArea(5, 30);
outputArea.setEditable(false);

panel.add(new JLabel("Name:"));
panel.add(nameField);
panel.add(new JLabel("ID:"));
panel.add(idField);
panel.add(new JLabel("Salary:"));
panel.add(salaryField);
panel.add(new JLabel("Department:"));
panel.add(deptField);
panel.add(setBtn);
panel.add(getBtn);
panel.add(new JLabel("Output:"));
panel.add(new JScrollPane(outputArea));

setBtn.addActionListener(e -> {
try {
bean.setName(nameField.getText());
bean.setId(Integer.parseInt(idField.getText()));
bean.setSalary(Double.parseDouble(salaryField.getText()));
bean.setDepartment(deptField.getText());
JOptionPane.showMessageDialog(frame, "Employee details set successfully!");
} catch (NumberFormatException ex) {
JOptionPane.showMessageDialog(frame, "Invalid number format", "Error",
JOptionPane.ERROR_MESSAGE);
} catch (PropertyVetoException ex) {
JOptionPane.showMessageDialog(frame, "Vetoed: " + ex.getMessage(), "Veto",
JOptionPane.WARNING_MESSAGE);
}
});

getBtn.addActionListener(e -> {
outputArea.setText("Employee Details:\n");
outputArea.append("Name: " + bean.getName() + "\n");
outputArea.append("ID: " + bean.getId() + "\n");
outputArea.append("Salary: " + bean.getSalary() + "\n");
outputArea.append("Department: " + bean.getDepartment() + "\n");
});

frame.getContentPane().add(panel);
frame.setVisible(true);
}
}
How the Code Works:

 EmployeeBean class is a JavaBean with 4 properties: name, id, salary, and department.

 It supports bound properties (notifies listeners when property changes) via


PropertyChangeSupport.

 It supports constrained properties (listeners can veto changes) via VetoableChangeSupport —


here used to prevent negative IDs.

 The GUI allows users to set these properties via text fields and buttons.

 Clicking Set updates the bean properties; invalid input or veto triggers error messages.

 Clicking Get shows current employee details in a non-editable text area.

 Property changes print messages to the console.

Swing Components & Their Properties:

Component Purpose Important Properties / Features

JFrame Main window Title, size, close operation

JPanel Holds form inputs and buttons Uses GridLayout(6, 2, 5, 5) for neat grid

Input fields for name, id, salary,


JTextField Editable text input
department

JButton Buttons for setting and getting data Action listeners to handle clicks

JLabel Descriptive labels for inputs Displays static text

JTextArea Displays output employee info Non-editable, wrapped in JScrollPane for scroll

JScrollPane Scroll container for JTextArea Provides scrolling capability

JavaBeans Features Used:

Properties: name, id, salary, department with getters/setters.

Bound Properties: Fires PropertyChangeEvent on changes.

Constrained Properties: Fires VetoableChangeEvent, e.g., veto if id < 0.

Listeners: PropertyChangeListener logs changes; VetoableChangeListener prevents invalid IDs.


OUTPUT
Q3. Develop a Java RMI-based distributed application that performs basic arithmetic operations (add,
subtract, multiply, divide). Implement the RMI interfaces and server-client architecture. Demonstrate
method invocation from the client side and explain parameter marshalling and remote object
activation."

i)Arithmetic.java code:

import java.rmi.Remote;
import java.rmi.RemoteException;

public interface Arithmetic extends Remote {


double add(double a, double b) throws RemoteException;
double subtract(double a, double b) throws RemoteException;
double multiply(double a, double b) throws RemoteException;
double divide(double a, double b) throws RemoteException;
}

ii) ArithmeticImpl.java code:

import java.rmi.server.UnicastRemoteObject;

import java.rmi.RemoteException;

public class ArithmeticImpl extends UnicastRemoteObject implements Arithmetic {

protected ArithmeticImpl() throws RemoteException {

super();

public double add(double a, double b) throws RemoteException {

return a + b;

public double subtract(double a, double b) throws RemoteException {

return a - b;

public double multiply(double a, double b) throws RemoteException {

return a * b;

public double divide(double a, double b) throws RemoteException {


if (b == 0) throw new ArithmeticException("Division by zero");

return a / b;

iii) ArithmeticServer.java code:

import java.rmi.registry.LocateRegistry;

import java.rmi.registry.Registry;

public class ArithmeticServer {

public static void main(String[] args) {

try {

ArithmeticImpl obj = new ArithmeticImpl();

Registry registry = LocateRegistry.createRegistry(1099); // default RMI registry port

registry.rebind("ArithmeticService", obj);

System.out.println("ArithmeticService bound and ready.");

} catch (Exception e) {

System.err.println("Server exception: " + e.toString());

e.printStackTrace();

iv) ArithmeticClient.java code:

import java.rmi.registry.LocateRegistry;

import java.rmi.registry.Registry;

public class ArithmeticClient {

public static void main(String[] args) {

try {
Registry registry = LocateRegistry.getRegistry("localhost", 1099);

Arithmetic stub = (Arithmetic) registry.lookup("ArithmeticService");

double a = 10.0, b = 5.0;

System.out.println("Add: " + stub.add(a, b));

System.out.println("Subtract: " + stub.subtract(a, b));

System.out.println("Multiply: " + stub.multiply(a, b));

System.out.println("Divide: " + stub.divide(a, b));

} catch (Exception e) {

System.err.println("Client exception: " + e.toString());

e.printStackTrace();

How the Code Works:


RMI (Remote Method Invocation) allows a Java program to invoke methods on an object running in
another JVM (potentially on another machine).

You define a remote interface (Arithmetic) that declares methods to be called remotely.

You implement this interface on the server side (ArithmeticImpl), extending UnicastRemoteObject to
create a remote object.

The server creates and binds this remote object to the RMI registry under the name "ArithmeticService".

The client looks up this service in the registry and obtains a stub (a proxy object).

When the client calls methods like add, the call is marshalled (parameters serialized), sent over the
network, executed on the server, and the result is sent back.

Remote object activation happens when the client obtains the stub and makes remote calls
transparently, without worrying about networking details.

Components and Their Properties:

Component Role Key Properties/Details

Remote interface defining Extends java.rmi.Remote; methods throw


Arithmetic
arithmetic methods RemoteException

Server-side implementation of Extends UnicastRemoteObject for remote access;


ArithmeticImpl
Arithmetic implements methods

Creates instance of ArithmeticImpl; binds to


ArithmeticServer RMI server setup
registry on port 1099

Creates and obtains RMI registry; binds service


LocateRegistry RMI registry management
with a name

Client that invokes remote Looks up registry, retrieves stub, invokes methods
ArithmeticClient
methods remotely

Client-side proxy for remote Marshals method calls and parameters; sends
Stub
object requests to server

Server-side dispatcher (Java Receives requests, unmarshals parameters,


Skeleton (hidden)
versions < Java 5) invokes actual methods

OUTPUT:
Q4. "Create a simple online feedback system using Servlets and JSP. The user submits feedback via an
HTML form, which is processed using a Servlet. The servlet stores feedback in a database and
forwards the response to a JSP page. Implement session tracking to show user history and use cookies
to store their username. Compare output using both JSP and Servlet-based responses."

i)HTML Form code:

<!DOCTYPE html>

<html>

<head>

<title>Feedback Form</title>

</head>

<body>

<h2>Submit your Feedback</h2>

<form action="submitFeedback" method="post">

Name: <input type="text" name="username" id="username" required><br><br>

Feedback: <br>

<textarea name="comments" rows="5" cols="40" required></textarea><br><br>

<input type="submit" value="Submit Feedback">

</form>

<script>

// Prefill username from cookie if exists

window.onload = function() {

const cookies = document.cookie.split(';');

for(let c of cookies) {

let [name, value] = c.trim().split('=');

if(name === 'username') {

document.getElementById('username').value = decodeURIComponent(value);

break;
}

</script>

</body>

</html>

ii) Servlet to Process Feedback and Forward to JSP code:

package com.example.feedback;

import jakarta.servlet.*;

import jakarta.servlet.http.*;

import jakarta.servlet.annotation.*;

import java.io.IOException;

import java.sql.*;

import java.util.ArrayList;

import java.util.List;

@WebServlet("/submitFeedback")

public class FeedbackServlet extends HttpServlet {

private static final String DB_URL = "jdbc:mysql://localhost:3306/feedback_db";

private static final String DB_USER = "root"; // change if needed

private static final String DB_PASS = "yourpassword"; // change if needed

@Override

protected void doPost(HttpServletRequest request, HttpServletResponse response)

throws ServletException, IOException {

// Get parameters
String username = request.getParameter("username");

String comments = request.getParameter("comments");

// Store feedback in DB

try (Connection con = DriverManager.getConnection(DB_URL, DB_USER, DB_PASS);

PreparedStatement ps = con.prepareStatement("INSERT INTO feedbacks(username, comments)


VALUES (?, ?)")) {

ps.setString(1, username);

ps.setString(2, comments);

ps.executeUpdate();

} catch (SQLException e) {

throw new ServletException("DB error", e);

// Session tracking: store feedback history in session

HttpSession session = request.getSession();

List<String> history = (List<String>) session.getAttribute("feedbackHistory");

if(history == null) {

history = new ArrayList<>();

history.add(comments);

session.setAttribute("feedbackHistory", history);

// Cookies: store username cookie for 7 days

Cookie cookie = new Cookie("username", username);

cookie.setMaxAge(7 * 24 * 60 * 60);

response.addCookie(cookie);
// Pass data to JSP

request.setAttribute("username", username);

request.setAttribute("comments", comments);

request.setAttribute("history", history);

// Forward to JSP page

RequestDispatcher rd = request.getRequestDispatcher("feedback.jsp");

rd.forward(request, response);

@Override

public void init() throws ServletException {

super.init();

try {

Class.forName("com.mysql.cj.jdbc.Driver"); // Load MySQL driver

} catch (ClassNotFoundException e) {

throw new ServletException(e);

iii) JSP page to display feedback and session history code:

<%@ page contentType="text/html;charset=UTF-8" language="java" %>

<%@ page import="java.util.List" %>

<html>

<head>

<title>Feedback Received</title>

</head>

<body>
<h2>Thank you for your feedback, <%= request.getAttribute("username") %>!</h2>

<p>Your comment:</p>

<p><b><%= request.getAttribute("comments") %></b></p>

<h3>Your feedback history this session:</h3>

<ul>

<%

List<String> history = (List<String>) request.getAttribute("history");

if(history != null) {

for(String fb : history) {

%>

<li><%= fb %></li>

<%

} else {

%>

<li>No previous feedback in this session.</li>

<%

%>

</ul>

<a href="index.html">Submit more feedback</a>

</body>

</html>
iv) Alternative servlet-based response code:

package com.example.feedback;

import jakarta.servlet.*;

import jakarta.servlet.http.*;

import jakarta.servlet.annotation.*;

import java.io.IOException;

import java.sql.*;

import java.util.ArrayList;

import java.util.List;

@WebServlet("/submitFeedbackAlt")

public class FeedbackServletResponse extends HttpServlet {

private static final String DB_URL = "jdbc:mysql://localhost:3306/feedback_db";

private static final String DB_USER = "root";

private static final String DB_PASS = "yourpassword";

@Override

protected void doPost(HttpServletRequest request, HttpServletResponse response)

throws ServletException, IOException {

String username = request.getParameter("username");

String comments = request.getParameter("comments");

try (Connection con = DriverManager.getConnection(DB_URL, DB_USER, DB_PASS);

PreparedStatement ps = con.prepareStatement("INSERT INTO feedbacks(username, comments)


VALUES (?, ?)")) {
ps.setString(1, username);

ps.setString(2, comments);

ps.executeUpdate();

} catch (SQLException e) {

throw new ServletException("DB error", e);

HttpSession session = request.getSession();

List<String> history = (List<String>) session.getAttribute("feedbackHistory");

if(history == null) {

history = new ArrayList<>();

history.add(comments);

session.setAttribute("feedbackHistory", history);

Cookie cookie = new Cookie("username", username);

cookie.setMaxAge(7 * 24 * 60 * 60);

response.addCookie(cookie);

// Now generate full HTML response in servlet

response.setContentType("text/html;charset=UTF-8");

try (var out = response.getWriter()) {

out.println("<html><head><title>Feedback Received</title></head><body>");

out.println("<h2>Thank you for your feedback, " + username + "!</h2>");

out.println("<p>Your comment:</p>");

out.println("<p><b>" + comments + "</b></p>");

out.println("<h3>Your feedback history this session:</h3>");


out.println("<ul>");

for(String fb : history) {

out.println("<li>" + fb + "</li>");

out.println("</ul>");

out.println("<a href='index.html'>Submit more feedback</a>");

out.println("</body></html>");

@Override

public void init() throws ServletException {

super.init();

try {

Class.forName("com.mysql.cj.jdbc.Driver");

} catch (ClassNotFoundException e) {

throw new ServletException(e);

v) web.xml Configuration code:

<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"

xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee

http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"

version="4.0">

<servlet>
<servlet-name>FeedbackServlet</servlet-name>

<servlet-class>com.example.feedback.FeedbackServlet</servlet-class>

</servlet>

<servlet-mapping>

<servlet-name>FeedbackServlet</servlet-name>

<url-pattern>/submitFeedback</url-pattern>

</servlet-mapping>

<servlet>

<servlet-name>FeedbackServletResponse</servlet-name>

<servlet-class>com.example.feedback.FeedbackServletResponse</servlet-class>

</servlet>

<servlet-mapping>

<servlet-name>FeedbackServletResponse</servlet-name>

<url-pattern>/submitFeedbackAlt</url-pattern>

</servlet-mapping>

</web-app>
How It Works:

User fills a feedback form (HTML).

Servlet processes the form, saves feedback to the database, and stores feedback history in the session.

Servlet sets a cookie with the username for future visits.

Servlet forwards the request to a JSP page that shows a thank you message and user’s feedback history.

Alternatively, the servlet can generate the entire HTML response itself (for comparison).

Components & Key Properties:

Component Purpose Key Properties

HTML Form Collects username and feedback <form>, POST method, cookies read by JS

Handles requests, DB operations, doPost(), JDBC insert, session tracking, cookie


Servlet
session, cookies creation, request forwarding

Generates dynamic HTML


JSP Reads request/session data, outputs HTML
response

Database
Stores feedback permanently feedbacks table, SQL INSERT
(MySQL)

Session Tracks user’s feedback history HttpSession to save list

Cookie Remembers username client-side Stores username, max age set


Q5. "Create a Java application using JDBC to perform CRUD (Create, Read, Update, Delete) operations
on a student database. Use different JDBC driver types, connect to a MySQL/PostgreSQL database,
and demonstrate execution of SQL queries using both Statement.

CRUD using Statement code:

import java.sql.*;

import java.util.Scanner;

public class StudentCRUDApp {

static final String JDBC_URL = "jdbc:mysql://localhost:3306/school";

static final String USER = "root";

static final String PASSWORD = ""; // change this based on your DB

public static void main(String[] args) {

try (

Connection conn = DriverManager.getConnection(JDBC_URL, USER, PASSWORD);

Scanner sc = new Scanner(System.in)

){

Class.forName("com.mysql.cj.jdbc.Driver"); // MySQL JDBC Driver

while (true) {

System.out.println("\n--- Student CRUD App ---");

System.out.println("1. Add Student");

System.out.println("2. View Students");

System.out.println("3. Update Student");

System.out.println("4. Delete Student");

System.out.println("5. Exit");

System.out.print("Choose: ");

int choice = sc.nextInt();


Statement stmt = conn.createStatement();

switch (choice) {

case 1:

System.out.print("Enter ID: ");

int id = sc.nextInt();

sc.nextLine(); // consume newline

System.out.print("Enter Name: ");

String name = sc.nextLine();

System.out.print("Enter Age: ");

int age = sc.nextInt();

sc.nextLine();

System.out.print("Enter Grade: ");

String grade = sc.nextLine();

String insertQuery = "INSERT INTO student VALUES(" + id + ", '" + name + "', " + age + ", '" +
grade + "')";

stmt.executeUpdate(insertQuery);

System.out.println("Student added.");

break;

case 2:

ResultSet rs = stmt.executeQuery("SELECT * FROM student");

System.out.println("ID | Name | Age | Grade");

while (rs.next()) {

System.out.println(rs.getInt("id") + " | " +

rs.getString("name") + " | " +

rs.getInt("age") + " | " +

rs.getString("grade"));
}

break;

case 3:

System.out.print("Enter ID to update: ");

int uid = sc.nextInt();

sc.nextLine();

System.out.print("Enter New Name: ");

String newName = sc.nextLine();

System.out.print("Enter New Age: ");

int newAge = sc.nextInt();

sc.nextLine();

System.out.print("Enter New Grade: ");

String newGrade = sc.nextLine();

String updateQuery = "UPDATE student SET name='" + newName + "', age=" + newAge + ",
grade='" + newGrade + "' WHERE id=" + uid;

stmt.executeUpdate(updateQuery);

System.out.println("Student updated.");

break;

case 4:

System.out.print("Enter ID to delete: ");

int did = sc.nextInt();

String deleteQuery = "DELETE FROM student WHERE id=" + did;

stmt.executeUpdate(deleteQuery);

System.out.println("Student deleted.");

break;
case 5:

System.out.println("Exiting...");

stmt.close();

conn.close();

return;

default:

System.out.println("Invalid choice.");

} catch (Exception e) {

e.printStackTrace();

}
How the Code Works:

Connects to MySQL database school using JDBC.

Displays a menu to perform CRUD:

Add, View, Update, Delete a student.

Uses Statement to run SQL queries.

Takes user input with Scanner.

Handles all operations in a loop until the user exits.

Components Used & Their Properties:

Component Purpose Key Properties / Role

Connection Connects to the database Created with DriverManager.getConnection()

Statement Executes SQL commands Used for INSERT, SELECT, UPDATE, DELETE

Scanner Reads user input from console Reads int and String values

ResultSet Holds data returned from query Used to display student list

Class.forName() Loads MySQL JDBC driver Ensures the driver class is registered

SQL Queries Commands to interact with the table Dynamic queries using string concatenation

You might also like