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