SQLException: нет такого столбца - PullRequest
4 голосов
/ 13 ноября 2011

Я новый участник. Я боролся с sqlitejdbc, подумал я. Я сделал запрос к базе данных sqlite из Java-программы. Я получил выше исключения. Мой запрос

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. Я искал этот вопрос на этом сайте, но нашел тот, который относится к 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, SQLite 3.7.8, SQLiteJDBC v056.

Ответы [ 3 ]

3 голосов
/ 13 ноября 2011

Я не совсем уверен, но думаю, что это должно сработать, если убрать скобки с From: select * from person as p inner join company as c on p.p_id=c.p_id<br> inner join contact as ct on p.p_id=ct.p_id where p.p_id=?;

0 голосов
/ 14 ноября 2011

Скобки, скорее всего, интерпретируются так, как будто вы начинаете то, что в Oracle называется встроенным представлением - в основном это динамически создаваемое представление.Так что я не думаю, что это ошибка в драйвере.

0 голосов
/ 13 ноября 2011

Если точно такой же запрос хорошо работает с navicat, и неправильно с java, это означает, что драйвер глючит. Но убедитесь, что это точно так же.

Кроме того, эти скобки являются подозрительными - избавьтесь от них.

...