我是新会员。我想,我一直在用 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='1' 而不是 p.p_id=? ,我很好。它向我展示了正确的价值观。
但是从我的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 字段。我已经在这个网站上搜索过这类问题,但我找到了与 ruby on rails 相关的问题,而不是 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 开发它。