2011-11-13 132 views
4

我是新成員。我一直在努力與sqlitejdbc,我想。 我從一個java程序查詢sqlite數據庫。我得到了上面的異常。 我的查詢是SQLException:沒有這樣的列

select * 
from ( person as p 
     inner join company as c on p.p_id=c.p_id 
    ) 
    inner join contact as ct on p.p_id=ct.p_id 
where p.p_id=?; 

當我穿上navicatLite編輯查詢放置p.p_id = '1',而不是p.p_id =? ,我很好。它向我展示了正確的價值。

但是從我的java程序。我得到了這個例外。

 
Exception in thread "main" java.sql.SQLException: no such column: p.p_id 
     at org.sqlite.DB.throwex(DB.java:288) 
     at org.sqlite.NativeDB.prepare(Native Method) 
     at org.sqlite.DB.prepare(DB.java:114) 
     at org.sqlite.PrepStmt.(PrepStmt.java:37) 
     at org.sqlite.Conn.prepareStatement(Conn.java:231) 
     at org.sqlite.Conn.prepareStatement(Conn.java:224) 
     at org.sqlite.Conn.prepareStatement(Conn.java:213) 
     at programTest.test.main(test.java:19) 
Java Result: 1 

我確定存在person表和p_id字段。我在這個網站上搜索了這樣的問題,但是我發現了與rails上的ruby相關的問題,而不是java。我不知道什麼是錯的。

我的Java程序是

import java.sql.*; 

/** 
* 
* @author Htet 101 
*/ 
public class test { 

    public static void main(String[] args) throws Exception { 
     Class.forName("org.sqlite.JDBC"); 
     Connection conn = 
       DriverManager.getConnection("jdbc:sqlite://C://Users//Htet 101//Documents//addressbook.s3db"); 
     PreparedStatement stat = conn.prepareStatement("select * from (person as p inner join company as c on p.p_id=c.p_id) inner join contact as ct on p.p_id=ct.p_id where p.p_id=?;"); 
     stat.setInt(1, 1); 

     ResultSet rs = stat.executeQuery(); 
     while (rs.next()) { 
      System.out.print("Name : " + rs.getString("p_name") + " "); 
     } 
     rs.close(); 
     conn.close(); 
    } 
} 

我使用NetBeans 6.9.1,3.7.8的SQLite,SQLiteJDBC v056開發它。

+0

你可以在這裏張貼表嗎? –

回答

3

我沒有絕對的把握,但我認爲,如果你從From刪除括號它應該工作: select * from person as p inner join company as c on p.p_id=c.p_id
inner join contact as ct on p.p_id=ct.p_id where p.p_id=?;

+0

太棒了!現在是正確的。謝謝你的幫助。 那麼,但爲什麼我不能添加括號? 在此先感謝。 – waiyan

+0

我沒有使用sqllite,所以我無法確定。我真的很驚訝,它從一些客戶端應用程序工作;在我的理解大括號中隱藏別名(所以'p'和'c'在外部環境中變得不可見) – a1ex07

+0

@ ht3t這是標記幫助解決問題的答案的正常做法 – Tshepang

0

如果完全相同的查詢都要罰款的Navicat,和錯用java,這意味着司機越野車。但要確保它完全一樣。

此外,那些括號是可疑的 - 擺脫他們。

+0

感謝您的幫助。我刪除了括號,它已被解決。 – waiyan

0

括號很可能被解釋爲您開始在Oracle中稱爲內嵌視圖 - 基本上是一個動態創建的視圖。所以我不認爲這是一個驅動程序的錯誤。

相關問題