Реализация материализованного представления через программу Java
Предварительные требования: 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 // 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 в качестве входных данных для удаления записи из таблицы «Студент». Точно так же мы могли видеть, что эта же запись была удалена и из представления «Студент». Вот как работает Обновить материализованные представления.
Обратите внимание, что для каждого программного обеспечения базы данных внутренняя реализация может отличаться.