4

私は新しいメンバーです。私はsqlitejdbcに苦労していると思いました。Java プログラムから sqlite データベースにクエリを実行しました。上記の例外が発生しました。私のクエリは

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=?;

p.p_id=? の代わりに p.p_id='1' を配置して navicatLite エディターにクエリを配置すると、? 、元気でした。それは私に正しい値を示しました。

しかし、私のJavaプログラムから。この例外があります。

スレッド「メイン」の例外 java.sql.SQLException: そのような列はありません: p.p_id
        org.sqlite.DB.throwex (DB.java:288) で
        org.sqlite.NativeDB.prepare(ネイティブメソッド)で
        org.sqlite.DB.prepare (DB.java:114) で
        org.sqlite.PrepStmt.(PrepStmt.java:37) で
        org.sqlite.Conn.prepareStatement (Conn.java:231) で
        org.sqlite.Conn.prepareStatement (Conn.java:224) で
        org.sqlite.Conn.prepareStatement (Conn.java:213) で
        programTest.test.main(test.java:19) で
Java 結果: 1

person テーブルと p_id フィールドが存在すると確信しています。このサイトでこの種の質問を検索しましたが、java ではなく ruby​​ on rails に関連するものを見つけました。何が悪いのかわかりません。

私の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、SQLite 3.7.8、SQLiteJDBC v056 を使用して開発しています。

4

3 に答える 3

3

よくわかりませんが、から括弧を削除するとうまくいくはずですFromselect * 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=?;

于 2011-11-13T16:47:29.173 に答える
0

ブラケットは、Oracle でインライン ビューと呼ばれるもの、つまり動的に作成されたビューを開始しているように解釈される可能性があります。したがって、ドライバーのバグではないと思います。

于 2011-11-13T20:23:55.093 に答える
0

まったく同じクエリが navicat ではうまくいき、Java ではうまくいかない場合、それはドライバーにバグがあることを意味します。しかし、それがまったく同じであることを確認してください。

また、これらのブラケットは疑わしいものです - それらを取り除きます。

于 2011-11-13T16:49:28.410 に答える