Реализация материализованного представления через программу Java

Опубликовано: 10 Июля, 2021


Предварительные требования: JDBC, представления SQL.

Представление - это просто любой запрос SELECT, которому присвоено имя и который сохранен в базе данных. По этой причине представление иногда называют именованным запросом или сохраненным запросом.
Материализованные представления - это представления, которые похожи на обычные представления, за исключением одного свойства, что они обновляются быстрее. Эти представления обновляются автоматически при любом обновлении главной таблицы.

Предположим, что если в главной таблице произошла какая-либо вставка, то материализованное представление также обновится. В программе ниже мы попытались показать, как работают материализованные представления. Фактическая реализация может отличаться в зависимости от программного обеспечения базы данных.




// Java Program to implementat
// Materialized view
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;
import java.util.Scanner;
import java.sql.PreparedStatement;
public class Materialised_View {
public static void main(String[] args)
{
// Declare connection and resultset objects
Connection conn;
ResultSet rs;
// Declare statement objects
Statement stmt, stmt1;
// query to retrieve the details of student table
String query = "select * from student;" ;
Scanner sc = new Scanner(System.in);
System.out.println( "Student Table is Created as Follows: " );
System.out.println
( "*******Student********* sid sname address ---- " );
try {
// Register the mysql driver
DriverManager.registerDriver( new com.mysql.jdbc.Driver());
// get the connection
conn = DriverManager.getConnection
( "jdbc: mysql:// localhost:3306/adbms_practicals" , "root" , "kernel" );
// Initialize the statement object
stmt = conn.createStatement();
// execute the query and store the result
rs = stmt.executeQuery( "select * from student;" );
while (rs.next()) {
// Iterate through the result set and display
// content of each row of student table.
System.out.println(rs.getString( 1 ) + " "
+ rs.getString( 2 ) + " " + rs.getString( 3 ));
}
System.out.println( " View of this Student Table is As Follows:" );
rs = stmt.executeQuery( "select * from Student_Data2;" );
System.out.println
( " ***********Student View******* sid sname address -------" );
while (rs.next()) {
// Iterate through the result set and display
// content of view of student table.
System.out.println(rs.getString( 1 ) + " "
+ rs.getString( 2 ) + " " + rs.getString( 3 ));
}
while ( true ) {
// Perform the operations on table
System.out.println("Menu: 1.Insert 2.Delete 3.
See Changes in View Student_Data2 4.Exit Enter Choice:");
// take the input from user to insert / delete / see changes
int ch = sc.nextInt();
int sid;
String sname = "" ;
String address = "" ;
switch (ch) {
case 1 :
System.out.println( "Enter sid:" );
sid = sc.nextInt();
System.out.println( "Enter sname:" );
sname = sc.nextLine();
System.out.println( "Enter address:" );
address = sc.nextLine();
// create the preparedStatement object and set the values
PreparedStatement st3 = conn.prepareStatement
( "insert into student values(?, ?, ?);" );
st3.setInt( 1 , sid);
st3.setString( 2 , sname);
st3.setString( 3 , address);
st3.executeUpdate();
// create the preparedStatement object and set the values
PreparedStatement st1 = conn.prepareStatement
( "insert into Student_Data2 values(?, ?, ?);" );
st1.setInt( 1 , sid);
st1.setString( 2 , sname);
st1.setString( 3 , address);
st1.executeUpdate(); // execute the preparedStatement to insert row
System.out.println( "row inserted" );
break ;
case 2 :
System.out.println( "Enter sid to be deleted:" );
sid = sc.nextInt();
// create the preparedStatement object and set the values
PreparedStatement st4 = conn.prepareStatement
( "delete from Student_Data2 where sid=?;" );
st4.setInt( 1 , sid);
PreparedStatement st2 = conn.prepareStatement
( "delete from student where sid=?" );
st2.setInt( 1 , sid);
// execute the preparedStatement to delete row
st2.executeUpdate();
System.out.println( "row deleted" );
break ;
case 3 :
System.out.println(" Changes Done in the
Student table also Affects the View Student_Data2");
rs = stmt.executeQuery( "select * from Student_Data2;" );
System.out.println
( " *****Student******* sid sname address --------" );
while (rs.next()) {
// Iterate through the result set and display
// recent changes of the table
// which got reflected in view.
System.out.println(rs.getString( 1 ) + " "
+ rs.getString( 2 ) + " " + rs.getString( 3 ));
}
break ;
case 4 :
System.exit( 0 ); // User wants to exit
break ;
}
}
}
catch (Exception e) { // catch all exceptions here.
System.out.println(e);
}
}
}

Выход:

Таблица учеников создается следующим образом:
***********Ученик**************
sid sname address
-----------------------------------------------
131 Рохит Павар Мумбаи
141 Ашиш Мане Пуна
152 Сагар Гор Мумбаи
155 Нитеш Чауре Нагпур
501 Ритеш Дев Ченнаи
531 Dev Khire Дели

Вид этого студенческого стола следующий:
***********Ученик**************
sid sname address
-----------------------------------------------
131 Рохит Павар Мумбаи
141 Ашиш Мане Пуна
152 Сагар Гор Мумбаи
155 Нитеш Чауре Нагпур
501 Ритеш Дев Ченнаи
531 Dev Khire Дели

Меню:
1. вставьте
2. удалить
3. см. Изменения в представлении Student_Data2
4. выход
Введите выбор: 1

Введите sid: 123
Enter sname: Амит Кумар
Введите адрес: Nanded
строка вставлена

Меню:
1. вставьте
2. удалить
3. См. Изменения в представлении Student_Data2
4. выход
Введите выбор: 3

Изменения, внесенные в таблицу Student, также влияют на представление Student_Data2
***********Ученик**************
sid sname address
-----------------------------------------------
131 Рохит Павар Мумбаи
141 Ашиш Мане Пуна
152 Сагар Гор Мумбаи
155 Нитеш Чауре Нагпур
501 Ритеш Дев Ченнаи
531 Dev Khire Дели
123 Амит Кумар Нандед

Меню:
1. вставьте
2. удалить
3. см. Изменения в представлении Student_Data2
4. выход
Введите выбор: 2

Введите удаляемый sid: 123
строка удалена

Меню:
1. вставьте
2. удалить
3. См. Изменения в представлении Student_Data2
4. выход
Введите выбор: 3

Изменения, внесенные в таблицу Student, также влияют на представление Student_Data2
***********Ученик**************
sid sname address
-----------------------------------------------
131 Рохит Павар Мумбаи
141 Ашиш Мане Пуна
152 Сагар Гор Мумбаи
155 Нитеш Чауре Нагпур
501 Ритеш Дев Ченнаи
531 Dev Khire Дели

Меню:
1. вставьте
2. удалить
3. см. Изменения в представлении Student_Data2
4. выход
Введите выбор: 4

Объяснение :
Таблица учеников и представление учеников печатаются в начале вывода. Затем, если пользователь выбирает вариант 1 для вставки данных в таблицу ученика «123 Амит Кумар Нандед», эта новая строка вставляется в таблицу. Затем пользователь выбирает 3-й вариант, чтобы увидеть изменения, отраженные в представлении ученика или нет, после выбора 3-го варианта мы могли видеть, что такая же запись также добавляется в представление ученика. Затем пользователь выбирает 2-й вариант и дает sid = 123 в качестве входных данных для удаления записи из таблицы «Студент». Точно так же мы могли видеть, что эта же запись была удалена и из представления «Студент». Вот как работает Обновить материализованные представления.

Обратите внимание, что для каждого программного обеспечения базы данных внутренняя реализация может отличаться.