2015-01-06 2 views
0

Я пытаюсь разработать программу, включающую JTable и встроенную базу данных. Поэтому я добавил логику в модель таблицы (логика еще не полностью построена для работы с jTable из-за этой ошибки).Проблема с подключением базы данных Derby только при использовании EmbeddedDriver

Здесь я запустил соединение в методе setup().

private void setup(){ 
     try{ 
      Class.forName("org.apache.derby.jdbc.EmbeddedDriver"); 
      connection=DriverManager.getConnection("jdbc:derby:sheet;create=true","test","1234"); 
      statement=connection.createStatement(); 
     } 

     catch(ClassNotFoundException cnf){ 
      System.out.println("class error"); 
     } 

     catch(SQLException se){ 
      System.out.println(se); 
     } 
    } 

Наконец, я очищаю все данные и устанавливаю их в нуль, когда начинается программа.

private void clearDataBase(){ 
     for(int i=1;i<this.getColumnCount();i++){ 
      for(int j=1;j<this.getRowCount();j++){ 

       try{ 
        prepStatement=connection.prepareStatement("UPDATE SHEETDATA SET "+getColumnName(i)+"=NULL WHERE INDEX IN (?)"); 
        prepStatement.setInt(1, j); 
        prepStatement.executeUpdate(); 
       } 
       catch(SQLException se){ 
        System.out.println(se); 
       } 
      } 

     } 
    } 

Таким образом, он дает мне ошибку, schema TEST deosn's exist. Но в моей базе данных у меня есть схема, называемая TEST, а также, я включил в нее все столбцы. Затем я использовал схему по умолчанию APP и добавил к ней данные. (Также изменил оператор как "UPDATE SHEETDATA SET "+getColumnName(i)+"=NULL WHERE INDEX IN (?)"). Но тогда приходит ошибка, указывающая Table/View 'APP.SHEETDATA' does not exist.

Я почти уверен, что при добавлении данных в базу данных нет ошибки. Кроме того, этот код отлично работает, когда я меняю драйвер на ClientDriver и использую server-client aproach. Я не могу найти ошибку здесь, а также, я искал в Интернете, чтобы найти решение. Я публикую это, потому что я не могу найти решения. Заранее спасибо!

Вот мой полный класс TableModel:

package myUserInterface; 


import javax.swing.table.AbstractTableModel; 

import java.sql.Connection; 
import java.sql.DriverManager; 
import java.sql.SQLException; 
import java.sql.Statement; 
import java.sql.PreparedStatement; 


public class MyTableModel extends AbstractTableModel { 

    private String[] columnNames; 
    private Cell[][] cells; 
    private String[][] data; 
    private Connection connection; 
    private Statement statement; 
    private PreparedStatement prepStatement; 

    MyTableModel(int row,int col){ 
     columnNames=setColumns(col); 
     data=setRows(row,col); 
     setCells(row,col); 
     setup(); 
     clearDataBase(); 
    } 

    @Override 
    public int getColumnCount(){ 
     return columnNames.length; 
    } 

    @Override 
    public int getRowCount(){ 
     return data.length; 
    } 

    @Override 
    public Object getValueAt(int row,int col){ 
     return cells[row][col].getContent(); 
    } 


    @Override 
    public String getColumnName(int col){ 
     return columnNames[col]; 
    } 


    @Override 
    public Class getColumnClass(int col){ 
     return getValueAt(0,col).getClass(); 
    } 


    @Override 
    public boolean isCellEditable(int row,int col){ 
     return col!=0; 
    } 


    @Override 
    public void setValueAt(Object content,int row,int col){ 
     data[row][col]=(String)content; 
     cells[row][col].setContent((String)content); 
     String query="UPDATE IMESHA.SHEETDATA SET "+this.getColumnName(col)+"="+"'"+(String)content+"'"+ 
       "WHERE INDEX IN ("+row+")"; 

     //updating the database accordingly to the changes made to the jTable. 
     try{ 
      statement.executeUpdate(query); 
     } 
     catch(SQLException se){ 
      System.out.println(se); 
     } 

     fireTableCellUpdated(row,col); 
    } 


    public String getCellContent(int row,int col){ 
     return cells[row][col].getContent(); 
    } 

    public String getCellTemp(int row,int col){ 
     return cells[row][col].getTemp(); 
    } 

    //This method returns a string array, which will be used as the set of column names 
    private String[] setColumns(int col){ 
     String[] columns=new String[col]; 
     columns[0]="Index"; 
     int x=66; 
     while(x<92){ 
      columns[x-65]=Character.toString((char)(x-1)); 
      x++; 
     } 
     return columns; 
    } 

    //this method returns the 2 dimension array of cell objects 
    private String[][] setRows(int row,int col){ 
     data=new String[row][col]; 
     int index=1; 
     for(int i=0;i<row;i++){ 
      for(int j=0;j<col;j++){ 
       if(j==0){ 
        data[i][j]=Integer.toString(index); 
        index++; 
        continue; 
       } 
       data[i][j]=""; 
      }    
     } 
     return data; 
    } 

    private void setCells(int row,int col){ 
     cells=new Cell[row][col]; 
     int index=1; 
     for(int i=0;i<row;i++){ 
      for(int j=0;j<col;j++){ 
       if(j==0){ 
        cells[i][j]=new Cell(Integer.toString(index)); 
        index++; 
        continue; 
       } 
       cells[i][j]=new Cell(); 
      }    
     } 
    } 

    /** 
    * This method is to connect the database with the table 
    */ 
    private void setup(){ 
     try{ 
      Class.forName("org.apache.derby.jdbc.EmbeddedDriver"); 
      connection=DriverManager.getConnection("jdbc:derby:sheet;create=true","test","1234"); 
      statement=connection.createStatement(); 
     } 

     catch(ClassNotFoundException cnf){ 
      System.out.println("class error"); 
     } 

     catch(SQLException se){ 
      System.out.println(se); 
     } 
    } 


    private void clearDataBase(){ 
     for(int i=1;i<this.getColumnCount();i++){ 
      for(int j=1;j<this.getRowCount();j++){ 

       try{ 
        prepStatement=connection.prepareStatement("UPDATE APP.SHEETDATA SET "+getColumnName(i)+"=NULL WHERE INDEX IN (?)"); 
        prepStatement.setInt(1, j); 
        prepStatement.executeUpdate(); 
       } 
       catch(SQLException se){ 
        System.out.println(se); 
       } 
      } 

     } 
    } 

} 
+1

Смотрите также 'JDBCAdapter' привел [здесь] (Http: // StackOverflow .com/а/22183184/230513). – trashgod

+0

Спасибо за гильдию. Но, к сожалению, это не тот ответ, который я ищу. Моя проблема заключается в создании базы данных и чтении/обновлении базы данных (хотя некоторые схемы фактически находятся в базе данных, они не распознаются). –

ответ

1

Вы, вероятно, с использованием двух различных баз данных, как название «лист».

При запуске с помощью драйвера клиент/сервер вы используете базу данных с именем «лист», которая хранится в домашнем каталоге вашего сетевого сервера Derby.

Когда вы запускаете встроенный драйвер, вы используете базу данных с именем «лист», которая хранится в текущем рабочем каталоге вашей программы при ее запуске.

Попробуйте найти свой жесткий диск для папки с именем «лист» и посмотрите, не найдете ли вы две разные папки.

В течение нескольких других возможных причин, почему ваша схема не выглядит так, как вы ожидаете, когда вы подключаетесь к Дерби, увидеть этот вопрос: Is it necessary to create tables each time you connect the derby database?

Смежные вопросы