Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sqlite/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Java中如何从sqlite中的多个表中进行选择?_Java_Sqlite_Inner Join - Fatal编程技术网

在Java中如何从sqlite中的多个表中进行选择?

在Java中如何从sqlite中的多个表中进行选择?,java,sqlite,inner-join,Java,Sqlite,Inner Join,我试图学习如何在java程序中使用sqlite数据库。(不是Android)。我转到link,下载jdbc库并复制了示例。这个例子没有出错。然后,我向数据库中添加了另一个表,希望联接这两个表并从每个表中选择一列。我在从数据库进行查询的行中得到一个错误,没有这样的列:“person.name”。我尝试了许多不同的方法来加入表并进行选择,但每次我在Table.columnName上都会遇到异常。有人能告诉我连接sqlite中两个表的正确语法吗?这是我的密码: import java.sql.Conn

我试图学习如何在java程序中使用sqlite数据库。(不是Android)。我转到link,下载jdbc库并复制了示例。这个例子没有出错。然后,我向数据库中添加了另一个表,希望联接这两个表并从每个表中选择一列。我在从数据库
进行查询的行中得到一个错误,没有这样的列:“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);
  }
}
导入java.sql.Connection;
导入java.sql.DriverManager;
导入java.sql.ResultSet;
导入java.sql.SQLException;
导入java.sql.Statement;
公共类样本
{
公共静态void main(字符串[]args)引发ClassNotFoundException
{
//使用当前类加载器加载sqlite JDBC驱动程序
Class.forName(“org.sqlite.JDBC”);
连接=空;
尝试
{
//创建数据库连接
connection=DriverManager.getConnection(“jdbc:sqlite:newSample.db”);
语句Statement=connection.createStatement();
语句。setQueryTimeout(30);//将超时设置为30秒。
语句.executeUpdate(“删除表(如果存在));
语句.executeUpdate(“删除表,如果存在购买”);
语句.executeUpdate(“创建表person(id整数,名称字符串)”;
语句.executeUpdate(“创建表购买(id整数,名称字符串)”;
报表.executeUpdate(“插入购买价值(1,'洗发水')”;
声明。执行更新(“插入采购价值(1,'奶酪')”;
声明。执行更新(“插入购买价值(2,‘樱桃’)”;
语句。executeUpdate(“插入购买值(3,'酸奶')”;
报表。执行更新(“插入购买价值(3,‘黄油’)”);
语句.executeUpdate(“插入个人值(1,'leo')”;
语句.executeUpdate(“插入个人值(2,'yui')”;
语句.executeUpdate(“插入个人值(3,'Steve')”;
ResultSet rs=statement.executeQuery(“从中选择purchase.name、person.name
在person.id=purchase.id“;上购买内部连接人员

如果有AS子句,则结果列的名称是该列的“AS”子句的值。如果没有AS子句,则列的名称未指定,并且可能会从一个SQLite版本更改为下一个版本

您应该使用SQLite恰好使用的列名:

rs.getString("name")
或者为结果列指定一个唯一的名称:

executeQuery("select person.name AS person_name, ...")
rs.getString("person_name")
或者只使用列索引:

rs.getString(1)
您应该为表名定义别名,如下所示

select pc.name, ps.name from purchase as pc inner join person as ps on ps.id = pc.id

我的代码甚至没有那么远,它在select查询中失败。
ResultSet rs=statement.executeQuery(“选择purchase.name作为purchase\u name,person.name作为person\u name从purchase内部连接person.id=purchase.id”);
成功了,谢谢!