gpt4 book ai didi

java - 仅在使用 EmbeddedDriver 时出现 Derby 数据库连接问题

转载 作者:行者123 更新时间:2023-11-29 12:29:25 24 4
gpt4 key购买 nike

我正在尝试开发一个包含 JTable 和嵌入式数据库的程序。因此,我将逻辑添加到表模型中(由于此错误,逻辑尚未完全构建以与 jTable 一起使用)。

这里我在 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);
}
}

}
}

以这种方式,它给了我一个错误,模式测试 deosn 存在。但在我的数据库中,我有一个名为 TEST 的模式,而且我已将所有列包含在其中。然后我使用默认模式 APP 并向其中添加数据。(还将语句更改为 "UPDATE SHEETDATA SET "+getColumnName(i)+"=NULL WHERE INDEX IN (?) “)。但随后出现错误:Table/View 'APP.SHEETDATA' does not exit

我非常确定向数据库添加数据时没有错误。另外,当我将驱动程序更改为 ClientDriver 并使用服务器客户端方法时,此代码工作正常。我在这里找不到错误,而且我已经在互联网上搜索以找到解决方案。我发布此内容是因为我找不到解决方案。提前致谢!

这是我完整的 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);
}
}

}
}

}

最佳答案

您可能使用两个不同的数据库,都名为“sheet”。

当您使用客户端/服务器驱动程序运行时,您将使用名为“sheet”的数据库,该数据库存储在 Derby Network Server 的主目录中。

当您使用嵌入式驱动程序运行时,您将使用一个名为“sheet”的数据库,该数据库在运行时存储在程序的当前工作目录中。

尝试在硬盘驱动器中搜索名为“sheet”的文件夹,看看是否找不到两个不同的文件夹。

有关连接到 Derby 时架构与预期不符的其他一些可能原因,请参阅此问题:Is it necessary to create tables each time you connect the derby database?

关于java - 仅在使用 EmbeddedDriver 时出现 Derby 数据库连接问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27794758/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com