我正在尝试学习如何在Java程序中使用sqlite数据库。(不是Android)。我转到此链接,下载了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);
}
}
}}
在SQLite的文档说:
结果列的名称是该列的“ AS”子句的值(如果存在AS子句)。如果没有AS子句,则该列的名称未指定,并且可能从一个版本的SQLite更改为下一个版本。
您应该使用SQLite碰巧使用的列名:
rs.getString("name")
或为结果列指定一个唯一的名称:
executeQuery("select person.name AS person_name, ...")
rs.getString("person_name")
或者只使用列索引:
rs.getString(1)
问题内容: 我有两个表,一个“公司”和一个“员工”: 我想在表中列出每个员工,并在其旁边列出公司。通过调用并在模板循环中通过并调用,这非常简单。 该解决方案的问题在于,将为循环中的每个项目创建一个新查询。因此,对于每个员工,公司都会有一个查询,看起来像这样: 相反,我希望最初在获取雇员的同一查询中加入此联接。像这样: Django QuerySet是否可能?如果没有,有没有办法可以解决此问题(没有
问题内容: 我在SQLite中有两个表: 我的问题是,我该如何编写一个SQL查询来返回不在中的名称? 例如: 在这个例子中,SQL查询应返回的元素,并从,因为他们不是。 问题答案: 这是在“显而易见的”标准SQL中执行的操作: 还有其它方法,如使用,中子句和操作。
问题内容: 在MySQL中,我会使用 但这会导致SQLite错误。SQLite的正确语法是什么? 问题答案: 在此之前,已经回答了这一问题:是否可以一次在SQLite数据库中插入多行? 要回答您对OMG Ponies的评论,请回答: 从3.7.11版本开始,SQLite确实支持多行插入。理查德·希普(Richard Hipp)评论:
问题内容: 在SQL中,我有: 我有一个WPF应用程序。 问题答案: 编辑:添加了一个子句
问题内容: 这是我的代码: 您可以看到我要执行的操作,但是我不确定如何正确编写此查询。 我得到的继承人错误: 警告:mysql_fetch_assoc():提供的参数不是有效的MySQL结果资源 这是我的mysql_fetch_assoc: 问题答案: 尝试改变…的喜欢 …至…
问题内容: 我需要从3个表中获得不同的值。 当我执行此代码时: 我收到一条错误消息,提示我的“城市”一栏不明确。 我也尝试过这个: 有了这段代码,我的表什么都收不到。 让我向您展示我正在尝试做的事的示例: 我需要得到这样的结果 城市的顺序对我来说并不重要,我只需要拥有所有城市,每个城市应该只有一个代表。 任何的想法?我当时想在中使用,但没有连接,所以我不能使用它。 问题答案: 该关键字将返回结果列