我对使用JDBC和SQL比较陌生。我有两个表,CustomerDetails
和Cakes
。我想创建一个名为Transactions
的第三个表,它使用来自CustomerDetails的'Names'列,来自Cakes的'Description'列,以及两个新的'Cost'和'Price'列。我知道这可以通过使用关系数据库来实现,但我不确定如何去做。我看到的一个网站说这可以使用ResultSet完成,另一个网站使用该列的元数据。但是,我不知道如何去做。
答案 0 :(得分:0)
您可能希望做的是创建一个SQL视图' (为简化 - 虚拟表格),请参阅此documentation
CREATE VIEW view_transactions AS
SELECT Name from customerdetails, Description from cakes... etc.
FROM customerdetails;
或者那些行
然后,您可以查询View view_transactions,例如,就像它是一个合适的表一样。
另外,为什么在使用sqlite时将其标记为mysql。
答案 1 :(得分:0)
您应手动创建新表格,即在程序之外。使用命令行'客户端'例如sqlite3
。
如果需要,可以使用该工具中的.schema CustomerDetails
命令显示表格的DDL("元数据"如果需要)。
然后,您可以编写定义新列的新CREATE TABLE Transactions (...)
,以及之前由.schema
命令显示的旧表中的列。
请注意,.schema
仅用于显示您现有表的确切列定义,因此您可以在新表中创建匹配的列。如果您已经知道当前的列定义,因为您自己创建了这些表,您当然可以跳过该步骤。
另请注意,SELECT Name from CUSTOMERDETAILS
将始终从该表返回数据,但从不返回结构,即列定义。尝试从中导出列定义时,数据无用。
如果确实希望/必须以编程方式访问数据库的元数据,则记录的方法是通过查询sqlite_master
系统表来执行此操作。另请参见SQLite Schema Information Metadata。
答案 2 :(得分:0)
您应该阅读数据建模的概念以及关系数据库如何帮助您,然后您的事务表可能如下所示:
CREATE TABLE transactions (
id int not null primary key
, customer_id int not null references customerdetails( id )
, cake_id int not null references cakes( id )
, price numeric( 8, 2 ) not null
, quantity int not null
);
通过这种方式,您可以确保每次交易(在这种情况下只是发票的单个位置),蛋糕和客户都存在。
我同意@ hanno-binder,在普通的JDBC中创建所有这些并不是最好的主意。