为什么我从Apache Derby中收到这些错误?

时间:2011-11-22 09:50:40

标签: java sql database eclipse derby

我运行我的程序,数据库已连接,然后它给了我两个错误。一句话

'Schema "ROOT" does not exist' 

和另一种说法

'Lexical error at line 1, column 8. Encountered: "@"(64), after:"".

以下是两个SQL语句的代码:

private void UpdateJTable() {
    String sql ="select idhonscores AS RowNo , Name, Characters, Kills, Deaths, Assists, XPM, CK from honscores";
    try {
        st = conn.prepareStatement(sql);
        rs = st.executeQuery();
        table.setModel(DbUtils.resultSetToTableModel(rs));

    } catch(Exception e) {
        JOptionPane.showMessageDialog(null, e);
    }
}

这是第一个错误和

String sql3 ="SELECT "+"@rn:=@rn+1"+" AS Rank, Name, Kills 
              FROM (Select Name, sum(Kills) as Kills 
                    from honscores group by Name order by Kills DESC) t1,
                   (SELECT "+"@rn:=0"+") t2;";

是第二个错误

2 个答案:

答案 0 :(得分:2)

  1. 在derby中,默认架构始终是用于创建jdbc连接的用户的架构。我无法告诉你问题,如何初始化和设置derby数据库。但是将;create=true附加到jdbc-url可能有所帮助(如果它不存在,这将创建数据库和模式)。
  2. 您可以change to a different schema执行:

    SET SCHEMA MYSCHEMA;
    
    1. @ -syntax可能在德比中不可用。并非在另一个数据库中工作的所有内容(特别是如果它是特定于数据库的)将在derby中工作。

答案 1 :(得分:0)

有关用户名是默认架构的说法是正确的。如果您未指定用户名,则默认架构将为APP。此架构始终存在。如果以root用户身份连接,则在您在其中创建表之前,不会创建模式“root”。 E.g:

ij> connect 'jdbc:derby:memory:foo;user=root;create=true';
ij> show schemas;
TABLE_SCHEM                   
------------------------------
APP                           
NULLID                        
SQLJ                          
SYS                           
SYSCAT                        
SYSCS_DIAG                    
SYSCS_UTIL                    
SYSFUN                        
SYSIBM                        
SYSPROC                       
SYSSTAT                       

11 rows selected
ij> create table foo(i int) ;
0 rows inserted/updated/deleted
ij> show schemas;
TABLE_SCHEM                   
------------------------------
APP                           
NULLID                        
ROOT                          
SQLJ                          
SYS                           
SYSCAT                        
SYSCS_DIAG                    
SYSCS_UTIL                    
SYSFUN                        
SYSIBM                        
SYSPROC                       
SYSSTAT                       

12 rows selected

WRT。表格和列名称中的@:仅当您引用包含@的名称时才允许这样做。 E.g:

ij> create table @T@(@c@ int);
ERROR 42X02: Lexical error at line 1, column 14.  Encountered: "@" (64), after : "".
ij> create table "@T@"("@c@" int);
0 rows inserted/updated/deleted
ij> insert into "@T@" values (0),(1),(2);
3 rows inserted/updated/deleted
ij> select * from "@T@";
@c@        
-----------
0          
1          
2          

3 rows selected

但请注意,引用名称时,它会区分大小写。因此,在前面的示例中,以下操作失败:

ij> select * from "@t@";
ERROR 42X05: Table/View '@t@' does not exist.

因为在引号中,@ T @和@ t @被认为是不同的名称。