powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / класс JDBCAdapter
7 сообщений из 7, страница 1 из 1
класс JDBCAdapter
    #32972820
СыР
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Что-то я туплю. Есть класс (код ниже), как мне из другого класса используя этот выполнить запрос типа select?
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
98.
99.
100.
101.
102.
103.
104.
105.
106.
107.
108.
109.
110.
111.
112.
113.
114.
115.
116.
117.
118.
119.
120.
121.
122.
123.
124.
125.
126.
127.
128.
129.
130.
131.
132.
133.
134.
135.
136.
137.
138.
139.
140.
141.
142.
143.
144.
145.
146.
147.
148.
149.
150.
151.
152.
153.
154.
155.
156.
157.
158.
159.
160.
161.
162.
163.
164.
165.
166.
167.
168.
169.
170.
171.
172.
173.
174.
175.
176.
177.
178.
179.
180.
181.
182.
183.
184.
185.
186.
187.
188.
189.
190.
191.
192.
193.
194.
195.
196.
197.
198.
199.
200.
201.
202.
203.
204.
205.
206.
207.
208.
209.
210.
211.
212.
import javax.swing.table.AbstractTableModel;
import java.sql.*;
import java.util.Vector;

// итак родительским будет класс AbstractTableModel
public class JDBCAdapter extends AbstractTableModel
{
    private Connection          connection;
    private Statement           statement;
    private ResultSet           resultSet;
	// здесь будут содержаться названия таблиц БД
    public  String[]            columnNames = {};
	// здесь будут  храниться все данные таблицы БД
    private Vector		rows = new Vector();
    private ResultSetMetaData   metaData;

    public String       tableName="";

    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];
                // получим названия этих полей и присвоим их нашему
             // полю columnNames
                for(int column =  0 ; column < numberOfColumns; column++)
             {
                    columnNames[column] =
                      metaData.getColumnLabel(column+ 1 );
                 }

                // Начнем получать данные из БД
                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);
                }
                // оповестим listeners о том, что таблица изменена
                fireTableChanged(null);
            }
            catch (SQLException ex)
        {
                System.err.println(ex);
            }
        }

    public boolean isCellEditable(int row, int column)
        {
            try
        {
              return metaData.isWritable(column+ 1 );
            }
            catch (SQLException e)
        {
              return false;
            }
          // или просто, если не заботиться о безопасности
          // return true;
        }

   // Возвращает количество полей таблицы
     public int getColumnCount()
        {
          return columnNames.length;
        }

   // Возвращает количество записей
     public int getRowCount()
       {
         return rows.size();
       }

    //Возвращает значение ячейки
     public Object getValueAt(int aRow, int aColumn)
        {
            Vector row = (Vector)rows.elementAt(aRow);
            return row.elementAt(aColumn);
        }

    public void setValueAt(Object value, int row, int column)
        {
              try
            {
            // Эта функция
            // возвращает название поля по его номеру
             String columnName = getColumnName(column);

                 String query =
                    "UPDATE "+tableName+
                    " SET "+columnName+" = "+
                         tbRepresentation(column, value)+
                    " WHERE ";
            // метод  dbRepresentation(column, value)
            // преобразует значения в строку,
            // для некоторых типов
            // обычное toString() не подойдет

                // т.к.  мы  не знаем, какое поле
                // таблицы является ключевым,
                // мы будем осуществлять поиск по всем
                // полям  одновременно.
                // Создадим строку, которую будем
                // использовать в запросе SQL
                for(int col =  0 ; col < getColumnCount();col++)
            {
                  String colName = getColumnName(col);
                  if (colName.equals(""))
               {
                    continue;
                   }
                  if (col !=  0 )
               {
                    query = query + " and ";
                   }
                    query = query + colName +" = "+
                        tbRepresentation(col, getValueAt(row, col));
                }
            // запрос готов, выполним изменения
            PreparedStatement pstmt =
               connection.prepareStatement(query);
            pstmt.executeUpdate();  // выполнить изменение
                // теперь осталось, изменить значение вектора  rows

                Object val;
            // без этой функции работать не  будет,
             // если в setElementAt() вставлять непосредственно
                // value а не val
            val = tbRepresentation(column,value);
                Vector dataRow = (Vector)rows.elementAt(row);
                dataRow.setElementAt(val, column);
            }
            catch (Exception ex)
            {
                   System.err.println(ex);
                }
        }

       public Object tbRepresentation(int column, Object value)
                    throws NumberFormatException
     {
       Object val;
       int type;
       if (value == null)
        {
          return "null";
        }
       try
        {
           type = metaData.getColumnType(column+ 1 );
        }
       catch (SQLException e)
        {
          return value.toString();
        }
       switch(type)
         {
        case Types.BIGINT:
              return val = new Long(value.toString());
        case Types.TINYINT:
            case Types.SMALLINT:
            case Types.INTEGER:
          return val = new Integer(value.toString());
            case Types.REAL:
        case Types.FLOAT:
        case Types.DOUBLE:        }
          return val = new Double(value.toString());

           //     ...
              //  и  т.д.  для  всех типов SQL
        }

   }
...
Рейтинг: 0 / 0
класс JDBCAdapter
    #32972837
СыР
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Прошу прощения - разобрался
...
Рейтинг: 0 / 0
класс JDBCAdapter
    #32972839
А.Грасоff™ JE
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
:)
...
Рейтинг: 0 / 0
класс JDBCAdapter
    #32973038
СыР
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Что-то я совсем запутался. Пытаюсь все сделать по примеру . Соединение устанавливается, запрос выполняется. Но какой код нужно добавить, чтобы данные в таблицу выводились?
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
import javax.swing.border.BevelBorder;
import javax.swing.*;
import java.awt.event.WindowEvent;
import java.awt.event.WindowAdapter;
import java.awt.*;

/**
 * Created by IntelliJ IDEA.
 * User: dudkin
 * Date: 22.03.2005
 * Time: 8:58:11
 * To change this template use File | Settings | File Templates.
 */
public class DBConnecting {

    public static void main (String[] param){
        
        TableSorter sorter = new TableSorter();
// создадим объект TableSorter
         //sorter.tableModel =new TableMap();
// Создадим таблицу
        JTable mainTable = new JTable(sorter);
// Будем использовать прокрутку
        mainTable.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);
// сделаем так, чтобы редактироваться сразу могла, только
//одна ячейка
        mainTable.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
// установим обработчик события, этим мы обеспечим автоматическую
// сортировку таблицы, при нажатии мышью на заголовок таблицы
       // sorter.addMouseListenerToHeaderInTable(mainTable);
// создадим объект JScrollPane, конструктору которого,
// передадим нашу  таблицу
        JScrollPane tableAggregate = new JScrollPane(mainTable);
// установим вид рамки
        tableAggregate.setBorder(new BevelBorder(BevelBorder.LOWERED));


      JDBCAdapter ad=new JDBCAdapter("jdbc:odbc:TestJava","sun.jdbc.odbc.JdbcOdbcDriver","","");
      ad.executeQuery("select * from COFFEES");
      
//создадим основную панель
        JPanel mainPanel = new JPanel();
        // присоеденим к этой панели нашу  таблицу
        mainPanel.add(tableAggregate);
        // Создать окно и  поместить туда mainPanel.
        JFrame frame = new JFrame("TableExample2");
        // этот обработчик позволит закрывать окно
        frame.addWindowListener(new WindowAdapter()
         {
           public void windowClosing(WindowEvent e)
             {
           System.exit( 0 );
             }
        });
        // установим задний фон
        frame.setBackground(Color.lightGray);
        // теперь таблица будет   видна
        frame.getContentPane().add(mainPanel);
        frame.pack();
        // установим  размер окна
        frame.setBounds( 200 ,  200 ,  640 ,  480 );
       frame.setVisible(true);
    }
}
...
Рейтинг: 0 / 0
класс JDBCAdapter
    #32973066
А.Грасоff™ JE
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вообще, данные добавляются в модель таблицы (реализация MVC).
в твоем коде упоминания модели вообще нет. потерял?
...
Рейтинг: 0 / 0
класс JDBCAdapter
    #32973143
А.Грасоff™ JE
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
пример простой модели /стырено откуда-то :)/

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
 import  javax.swing.table.*;
 import  java.util.*;
 import  java.sql.*;

 public   class  SimpleTableModel  extends  AbstractTableModel {
   private  ArrayList colNames =  new  ArrayList();
   private  ArrayList colTypes =  new  ArrayList();
   private  ArrayList data =  new  ArrayList();

   public  SimpleTableModel() {
  }

   public   int  getRowCount() {
     synchronized  (data) {
       return  data.size();
    }
  }

   public   int  getColumnCount() {
     return  colNames.size();
  }

   public   Class  getColumnClass( int  column) {
     return  ( Class ) colTypes.get(column);
  }

   public  String getColumnName( int  column) {
     return  (String) colNames.get(column);
  }

   public  Object getValueAt( int  row,  int  col) {
     synchronized  (data) {
      ArrayList arow = (ArrayList) data.get(row);
       return  arow.get(col);
    }
  }

   public   boolean  isEditable( int  row,  int  column) {
     return  false;
  }

   public   void  setValueAt(Object value,  int  row,  int  col) {
     synchronized  (data) {
      ArrayList arow = (ArrayList) data.get(row);
      arow.set(col, value);
    }
  }

   public   void  setResultSet(ResultSet rs)  throws  Exception {
    data.clear();
    colNames.clear();
    colTypes.clear();

    ResultSetMetaData rsmd = rs.getMetaData();
     int  colCount = rsmd.getColumnCount();
     for  ( int  i =  0 ; i < colCount; i++) {
      colNames.add(rsmd.getColumnName(i +  1 ));
       Class  colType =  Class .forName(rsmd.getColumnClassName(i +  1 ));
      colTypes.add(colType);
    }

    fireTableStructureChanged(); // изменилась структура таблицы

     while  (rs.next()) {
      ArrayList row =  new  ArrayList();
       for  ( int  i =  0 ; i < colCount; i++) {
         if  (colTypes.get(i) == String. class )
          row.add(rs.getString(i +  1 ));
         else 
          row.add(rs.getObject(i +  1 ));
      }

       synchronized  (data) {
        data.add(row);
        fireTableRowsInserted(data.size() -  1 , data.size() -  1 ); // добавили строку
      }
    }
  }
}

далее:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
...
SimpleTableModel stm =  new  SimpleTableModel();
Jtable jt =  new  Jtable(stm);

ResultSet rs = ad.executeQuery("select * from COFFEES");
stm.setResultSet(rs);
rs.close();
...
...
Рейтинг: 0 / 0
класс JDBCAdapter
    #32973211
СыР
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Спасибо тов. А.Грасоff™ JE
вот ответ
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
     JDBCAdapter ad=new JDBCAdapter
                ("jdbc:odbc:TestJava","sun.jdbc.odbc.JdbcOdbcDriver","","");
            TableSorter sorter = new TableSorter(ad);
...
 JTable mainTable = new JTable(sorter);
        ad.executeQuery("select * from COFFEES");

...
Рейтинг: 0 / 0
7 сообщений из 7, страница 1 из 1
Форумы / Java [игнор отключен] [закрыт для гостей] / класс JDBCAdapter
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]