2011-11-22 30 views
1

我运行我的程序,数据库连接到,然后它给了我两个错误。有一句话说为什么我从Apache 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:[email protected]+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
  1. 在derby中,默认模式始终是用于创建jdbc连接的用户的模式。我不能告诉你,如何初始化和设置德比数据库。但是将;create=true附加到jdbc-url可能会有帮助(如果它不存在,这将创建数据库和模式)。

您可以change to a different schema通过执行:

SET SCHEMA MYSCHEMA; 
  1. 的@ -syntax可能不会在德比可用。不是所有在另一个数据库中工作的东西(特别是如果它是数据库特定的)都可以在德比工作。
+0

谢谢,这是我一直能在德比找到的最有用的信息:D – AceFire6

+1

我会在哪里放置“SET SCHEMA MYSCHEMA;”? – AceFire6

+0

你必须执行它作为一个sql命令。像一个正常的查询。 – oers

0

关于用户名作为默认模式的说法是真实的。如果您未指定用户名,则默认架构将为APP。这个模式总是存在。如果以root用户身份连接,则只有在其中创建表之后才会创建架构“root”。例如:

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。表格和列名称中的@:只有在引用包含@的名称时才允许使用。例如:

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

3 rows selected 

但是请注意,当引用一个名称时,它将区分大小写。所以在前面的例子在以下失败:

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

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

相关问题