Я новый участник. Я боролся с 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.