Я пытаюсь разработать программу, включающую 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);
}
}
}
}
}
Смотрите также 'JDBCAdapter' привел [здесь] (Http: // StackOverflow .com/а/22183184/230513). – trashgod
Спасибо за гильдию. Но, к сожалению, это не тот ответ, который я ищу. Моя проблема заключается в создании базы данных и чтении/обновлении базы данных (хотя некоторые схемы фактически находятся в базе данных, они не распознаются). –