我正在尝试学习如何在 java 程序中使用 sqlite 数据库。 (不是安卓)。我去了this https://bitbucket.org/xerial/sqlite-jdbc/overview链接,下载 jdbc 库并复制示例。该示例运行正常,没有错误。然后,我向数据库添加了另一个表,并且想要连接两个表并从每个表中选择一个列。我在从数据库进行查询的行上收到错误no such column: 'person.name'
。我尝试了许多不同的方法来连接表和选择,但每次我都会遇到异常Table.columnName
。有人可以告诉我在 sqlite 中连接两个表的正确语法吗?这是我的代码:
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
public class Sample
{
public static void main(String[] args) throws ClassNotFoundException
{
// load the sqlite-JDBC driver using the current class loader
Class.forName("org.sqlite.JDBC");
Connection connection = null;
try
{
// create a database connection
connection = DriverManager.getConnection("jdbc:sqlite:newSample.db");
Statement statement = connection.createStatement();
statement.setQueryTimeout(30); // set timeout to 30 sec.
statement.executeUpdate("drop table if exists person");
statement.executeUpdate("drop table if exists purchase");
statement.executeUpdate("create table person (id integer, name string)");
statement.executeUpdate("create table purchase (id integer, name string)");
statement.executeUpdate("insert into purchase values(1, 'shampoo')");
statement.executeUpdate("insert into purchase values(1, 'cheese')");
statement.executeUpdate("insert into purchase values (2, 'cherries')");
statement.executeUpdate("insert into purchase values (3, 'yogurt')");
statement.executeUpdate("insert into purchase values (3, 'butter')");
statement.executeUpdate("insert into person values(1, 'leo')");
statement.executeUpdate("insert into person values(2, 'yui')");
statement.executeUpdate("insert into person values(3, 'Steve')");
ResultSet rs = statement.executeQuery("select purchase.name, person.name from
purchase inner join person on person.id = purchase.id"); <-- This is where I get the error!!
while(rs.next())
{
// read the result set
System.out.println("name = " + rs.getString("person.name"));
System.out.println("id = " + rs.getInt("person.id"));
System.out.println("purchase = " + rs.getString("purchase.name"));
}
}
catch(SQLException e)
{
// if the error message is "out of memory",
// it probably means no database file is found
System.err.println(e.getMessage());
}
finally
{
try
{
if(connection != null)
connection.close();
}
catch(SQLException e)
{
// connection close failed.
System.err.println(e);
}
}
}
}
The SQLite 文档 http://www.sqlite.org/c3ref/column_name.html says:
如果存在 AS 子句,结果列的名称是该列的“AS”子句的值。如果没有 AS 子句,则列的名称未指定,并且可能会从 SQLite 的一个版本到下一个版本发生变化。
您应该使用 SQLite 碰巧使用的列名:
rs.getString("name")
或者给结果列一个唯一的名称:
executeQuery("select person.name AS person_name, ...")
rs.getString("person_name")
或者只使用列索引:
rs.getString(1)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)