17530

Робота з базами даних в Java з використанням JDBC

Лабораторная работа

Информатика, кибернетика и программирование

Лабораторна робота №1 Тема: Робота з базами даних в Java з використанням JDBC. Мета: Навчитись виконувати основні операції при роботі з базами даних в Java використовуючи JDBC API. Теоретичні відомості Таблиці. В бібліотеці javax.swing є клас JTable який представляє таблицю. Для

Украинкский

2013-07-04

51.5 KB

5 чел.

Лабораторна робота №1

Тема: Робота з базами даних в Java з використанням JDBC.

Мета: Навчитись виконувати основні операції при роботі з базами даних в Java, використовуючи JDBC API.

Теоретичні відомості

Таблиці. В бібліотеці javax.swing є клас JTable, який представляє таблицю. Для повноцінної роботи з таблицею для неї потрібно вказати модель даних – клас, об’єкт якого репрезентує ті дані, які будуть в таблиці. Приклад такого класу:

import javax.swing.table.AbstractTableModel;

class MyDataModel extends AbstractTableModel{

 Integer[][] array=new Integer[3][3]; //Масив, в якому зберігаються дані, що будуть видні в таблиці

 public MyDataModel(){

   for (int i=0;i<3;i++)

     for (int j=0;j<3;j++)

       array[i][j]=new Integer(0);

 }

 public int getColumnCount() {return 3;}//В таблиці 3 стовпчика

 public int getRowCount() {return 3;} //В таблиці 3 рядка

 public boolean isCellEditable(int row, int column) { //Чи можна редагувати значення в комірках таблиці

   return true;

 }

 public Object getValueAt(int row,int col) { //Дані, що відображаються в таблиці

   return array[row][col];

 }

 public void setValueAt(Object value,int row,int col){ //Дані, що записуються в таблицю

   array[row][col]=new Integer((String)value);

 }

}

Потрібно звернути увагу на те, що клас MyDataModel спадкується від стандартного класу AbstractTableModel з пакету javax.swing.table. Всі методи в MyDataModel (крім конструктора, звичайно) перевизначають методи AbstractTableModel.

При використанні таблиці потрібно створити об’єкт даного класу і вказати його як параметр при створенні об’єкта JTable.

Для того, щоб проводити обрахунки з даними, введеними в таблицю, потрібно перетворювати їх з одного типу в інший. Для цього іноді потрібно використовувати операцію приведення типу.

Колекції. Колекція – це деяка послідовність зв’язаних елементів. Прикладом колекції є масив. Також використовуються інші типи колекцій. Наприклад, в Java клас java.util.Vector реалізує список елементів. При цьому в даній колекції може бути довільна кількість елементів довільних типів. Основні методи, що використовуються для роботи з класом Vector:

void add(int index, Object element)

Object elementAt(int index)

Enumeration elements()

int indexOf(Object elem)

int size()

Зв’язок програми на Java з сервером баз даних InterBase. Для роботи програми з базою даних програма повинна насамперед під’єднатися (connect) до БД. Існують різні способи забезпечення зв’язку Java-програми з базами даних Firebird. Наприклад, можна використовувати ODBC або прямий зв’язок JDBC-Firebird. Для його забезпечення можна встановити програму InterBase InterClient (після установки цієї програми потрібно звернути увагу на змінну середовища CLASSPATH – одним з шляхів там повинна бути крапка) або використати спеціальні бібліотеки роботи з БД, як firebirdsql-full.jar.

Робота з БД. Далі наведено приклад моделі даних (клас спадкується від AbstractTableModel), яка бере дані з БД:

/*

* @(#)JDBCAdapter.java 1.12 01/12/03

*

* Copyright 2002 Sun Microsystems, Inc. All rights reserved.

* SUN PROPRIETARY/CONFIDENTIAL. Use is subject to license terms.

*/

/**

* An adaptor, transforming the JDBC interface to the TableModel interface.

*

* @version 1.20 09/25/97

* @author Philip Milne

*/

import java.util.Vector;

import java.sql.*;

import javax.swing.table.AbstractTableModel;

import javax.swing.event.TableModelEvent;

public class JDBCAdapter extends AbstractTableModel {

   Connection          connection;

   Statement           statement;

   ResultSet           resultSet;

   String[]            columnNames = {};

   Vector  rows = new Vector();

   ResultSetMetaData   metaData;

   public JDBCAdapter(String url, String driverName,

                      String user, String passwd) {

       try {

           Class.forName(driverName);

           System.out.println("Opening db connection");

           connection = DriverManager.getConnection(url, user, passwd);

           statement = connection.createStatement();

       }

       catch (ClassNotFoundException ex) {

           System.err.println("Cannot find the database driver classes.");

           System.err.println(ex);

       }

       catch (SQLException ex) {

           System.err.println("Cannot connect to this database.");

           System.err.println(ex);

       }

    }

   public void executeQuery(String query) {

       if (connection == null || statement == null) {

           System.err.println("There is no database to execute the query.");

           return;

       }

       try {

           resultSet = statement.executeQuery(query);

           metaData = resultSet.getMetaData();

           int numberOfColumns =  metaData.getColumnCount();

           columnNames = new String[numberOfColumns];

           // Get the column names and cache them.

           // Then we can close the connection.

           for(int column = 0; column < numberOfColumns; column++) {

               columnNames[column] = metaData.getColumnLabel(column+1);

           }

           // Get all rows.

           rows = new Vector();

           while (resultSet.next()) {

               Vector newRow = new Vector();

               for (int i = 1; i <= getColumnCount(); i++) {

            newRow.addElement(resultSet.getObject(i));

               }

               rows.addElement(newRow);

           }

           //  close(); Need to copy the metaData, bug in jdbc:odbc driver.

           fireTableChanged(null); // Tell the listeners a new table has arrived.

       }

       catch (SQLException ex) {

           System.err.println(ex);

       }

   }

   public void close() throws SQLException {

       System.out.println("Closing db connection");

       resultSet.close();

       statement.close();

       connection.close();

   }

   protected void finalize() throws Throwable {

       close();

       super.finalize();

   }

   //////////////////////////////////////////////////////////////////////////

   //

   //             Implementation of the TableModel Interface

   //

   //////////////////////////////////////////////////////////////////////////

   // MetaData

   public String getColumnName(int column) {

       if (columnNames[column] != null) {

           return columnNames[column];

       } else {

           return "";

       }

   }

   public Class getColumnClass(int column) {

       int type;

       try {

           type = metaData.getColumnType(column+1);

       }

       catch (SQLException e) {

           return super.getColumnClass(column);

       }

       switch(type) {

       case Types.CHAR:

       case Types.VARCHAR:

       case Types.LONGVARCHAR:

           return String.class;

       case Types.BIT:

           return Boolean.class;

       case Types.TINYINT:

       case Types.SMALLINT:

       case Types.INTEGER:

           return Integer.class;

       case Types.BIGINT:

           return Long.class;

       case Types.FLOAT:

       case Types.DOUBLE:

           return Double.class;

       case Types.DATE:

           return java.sql.Date.class;

       default:

           return Object.class;

       }

   }

   public boolean isCellEditable(int row, int column) {

       try {

           return metaData.isWritable(column+1);

       }

       catch (SQLException e) {

           return false;

       }

   }

   public int getColumnCount() {

       return columnNames.length;

   }

   // Data methods

   public int getRowCount() {

       return rows.size();

   }

   public Object getValueAt(int aRow, int aColumn) {

       Vector row = (Vector)rows.elementAt(aRow);

       return row.elementAt(aColumn);

   }

   public String dbRepresentation(int column, Object value) {

       int type;

       if (value == null) {

           return "null";

       }

       try {

           type = metaData.getColumnType(column+1);

       }

       catch (SQLException e) {

           return value.toString();

       }

       switch(type) {

       case Types.INTEGER:

       case Types.DOUBLE:

       case Types.FLOAT:

           return value.toString();

       case Types.BIT:

           return ((Boolean)value).booleanValue() ? "1" : "0";

       case Types.DATE:

           return value.toString(); // This will need some conversion.

       default:

           return "\""+value.toString()+"\"";

       }

   }

   public void setValueAt(Object value, int row, int column) {

       try {

           String tableName = metaData.getTableName(column+1);

           // Some of the drivers seem buggy, tableName should not be null.

           if (tableName == null) {

               System.out.println("Table name returned null.");

           }

           String columnName = getColumnName(column);

           String query =

               "update "+tableName+

               " set "+columnName+" = "+dbRepresentation(column, value)+

               " where ";

           // We don't have a model of the schema so we don't know the

           // primary keys or which columns to lock on. To demonstrate

           // that editing is possible, we'll just lock on everything.

           for(int col = 0; col<getColumnCount(); col++) {

               String colName = getColumnName(col);

               if (colName.equals("")) {

                   continue;

               }

               if (col != 0) {

                   query = query + " and ";

               }

               query = query + colName +" = "+

                   dbRepresentation(col, getValueAt(row, col));

           }

           System.out.println(query);

           System.out.println("Not sending update to database");

           // statement.executeQuery(query);

       }

       catch (SQLException e) {

           //     e.printStackTrace();

           System.err.println("Update failed");

       }

       Vector dataRow = (Vector)rows.elementAt(row);

       dataRow.setElementAt(value, column);

   }

}

Далі наведено приклади рядків, які потрібні для підключення до БД:

   String databaseURL = " jdbc:firebirdsql://localhost/d:/work/employee.fdb";

   String user = "sysdba";

   String password = "masterkey";

   String driverName = "org.firebirdsql.jdbc.FBDriver";

Завдання: Створити Firebird-базу даних, в якій є одна таблиця з не менше, ніж 5 полями. В таблиці повинні бути поля типа integer, varchar, date.

Написати Java-програму, яка відображає таблицю бази даних на екрані в табличній формі та дозволяє редагувати дані.


 

А также другие работы, которые могут Вас заинтересовать

75012. Веснянки, виховний захід 60 KB
  Янушкевич веснянка А вже весна з опери Зима і весна М.Лисенка Хор А вже весна з опери Зима і весна. Діалог Діти а якою ви собі уявляєте весну Та яка ж весна без квітів Які ви знаєте весняні квіти Але першою розпускається гілочка верби а її розквітлі бруньки як називаються Котики Чи бачили ви їх які вони...
75013. Интонация – основа музыки, План-конспект урока музыки в 3 классе 332.5 KB
  Цели: Обучающая: формировать предметные компетентности: вокально-хоровую умение петь вокально правильно на дыхании музыкально-ритмическую умение выдерживать ритм и темп в движении под музыку исполнительскую умение выразительно и правильно передавать музыкальный образ...
75014. Интонационное и исполнительское развитие музыки 152.5 KB
  Тема урока: Интонационное и исполнительское развитие музыки Игра в слова. Разные ребята Цели урока: Обучающие: дать понятие о развитии интонации с помощью каких средств выразительности она развивается введение понятий лад мажор минор работать над чистотой интонирования...
75015. Українські народні думи, Відкритий урок у 4-му класі 118.5 KB
  Українські народні думи. Сьогодні на уроці прозвучать особливі своєрідні вокальні фольклорні твори думи. Боротьба українського народу за свободу і незалежність зумовила виникнення дуже відомого нині жанру народної творчості думи.
75016. Народная песня в симфонической музыке 44 KB
  Углубить представления учащихся о народной песне, определить связь между народным и профессиональным творчеством; определить народно-песенные истоки Второй симфонии...
75017. Мусор – глобальная проблема человечества. Борьба первобытного человека с отходами 32.5 KB
  Борьба первобытных людей с отходами Эколог: На древней планете идиллия была Наша Земля раем слыла. Эколог: Но однажды в древний век Появился человек. Первобытный человек: Много тысячелетий назад Неандерталец чистой Земле был рад Экологически чистые плоды он собирал Прозрачную водицу из родника он брал. Эколог: Отходы синтетические у современного человека Они не перегнивают лежат в земле три века Пакеты по пятьсот лет планету загрязняют А стеклянные отходы за тысячу лет не исчезают Пещерный человек: Пещерный человек вам Землю чистой...
75018. Не будьте собі ворогом. Конспект уроку здорового способу життя 47 KB
  Мета заходу: Виховувати в учнів негативне ставлення до вживання наркотиків бажання і вміння вести здоровий спосіб життя критично ставитись до своїх негативних вчинків. Що стається з наркоманом а продовжує радіти життю; б постійно шукає де б дістати наркотик; в пригнічений; г життя муки. Втрачаєш радість життя. Можеш покінчити життя самогубством.
75019. Здоров’я народу - багатство країни. Позакласний захід з народознавства для 6-7-х класів 98.5 KB
  Українське житло мало чотиригранну будову – чотири стіни відповідали чотирьом сторонам світу. Вікна виходили на схід і на південь – до сонця. З північного боку, де панували темні, злі сили, вікон не було.
75020. Дванадцять місяців, народознавчий проект 162 KB
  Чи потрібні сучасній молоді знання про народні свята традиції Чи варто відроджувати їх ці питання визначили проблему. Мета проекту: ознайомлення учнів з багатством культурної спадщини українського народу; формування ціннісного ставлення до скарбів української духовної культури народного мистецтва традицій і звичаїв свого народу...