SQL 没有将文件内容添加到 table
SQL not adding file contents to table
目前我正在尝试通过 Apache Derby 将新数据传递给 SQL table。我要从具有给定文本的文件中读取,并将读取的每个标记添加到其各自的列中。
但是,在尝试执行此操作时,我收到大量错误,表明该标记不是列...但这不是我想要做的。
carmpg.txt
内容:
Toyota Prius 52 23475
Kia Optima 31 22600
Hyundai Sonata 31 22050
Nissan Altima 31 23260
Chevrolet Malibu 30 21680
Honda Accord 30 23570
Mazda 6 29 21945
Subaru Legacy 29 22195
Toyota Camry 27 23495
Chrysler 200 27 22115
Ford Fusion 27 22120
Volkswagen Passat 27 22995
Volkswagen CC 25 34475
Chevrolet Impala 25 27895
Buick LaCrosse 25 29565
Nissan Maxima 25 33270
Buick Regal 24 27065
Lincoln MKZ 26 3560
因此,Toyota
应该进入 Manufacturer
列,Prius
应该进入 Model
列,依此类推。
代码如下:
try(Connection conn = SimpleDataSource.getConnection();Statement stat =
conn.createStatement())
{
try
{
stat.execute("DROP TABLE Car");
}
catch(SQLException e)
{
// get exception if table doesn't exist yet
}
stat.execute("CREATE TABLE Car (Manufacturer VARCHAR(20),"
+ "Model VARCHAR(20), " + "Efficiency DECIMAL(6,2), " + "Price DECIMAL(8,2)) ");
String inputFileName = "carmpg.txt";
File inputFile = new File(inputFileName);
Scanner in = new Scanner(inputFile);
// COMPLETE THIS WHILE LOOP to insert all cars from the input text file
while (in.hasNextLine()){
stat.execute("INSERT INTO Car VALUES " + in.next());
}
ResultSet rs = stat.executeQuery("SELECT * FROM Car");
rs.next();
System.out.println(rs.getString("Model"));
以及相关的堆栈跟踪:
Exception in thread "main" java.sql.SQLSyntaxErrorException: Column 'TOYOTA'
is either not in any table in the FROM list or appears within a join
specification and is outside the scope of the join specification or appears
in a HAVING clause and is not in the GROUP BY list. If this is a CREATE or
ALTER TABLE statement then 'TOYOTA' is not a column in the target table.
at org.apache.derby.impl.jdbc.SQLExceptionFactory.getSQLException(Unknown
Source)
at org.apache.derby.impl.jdbc.Util.generateCsSQLException(Unknown Source)
at
org.apache.derby.impl.jdbc.TransactionResourceImpl.wrapInSQLException(Unknown
Source)
at org.apache.derby.impl.jdbc.TransactionResourceImpl.handleException(Unknown
Source)
at org.apache.derby.impl.jdbc.EmbedConnection.handleException(Unknown Source)
at org.apache.derby.impl.jdbc.ConnectionChild.handleException(Unknown Source)
at org.apache.derby.impl.jdbc.EmbedStatement.execute(Unknown Source)
at org.apache.derby.impl.jdbc.EmbedStatement.execute(Unknown Source)
at CarDB.main(CarDB.java:49)
Caused by: ERROR 42X04: Column 'TOYOTA' is either not in any table in the
FROM list or appears within a join specification and is outside the scope of
the join specification or appears in a HAVING clause and is not in the GROUP
BY list. If this is a CREATE or ALTER TABLE statement then 'TOYOTA' is not a
column in the target table.
at org.apache.derby.iapi.error.StandardException.newException(Unknown Source)
at org.apache.derby.iapi.error.StandardException.newException(Unknown Source)
at org.apache.derby.impl.sql.compile.ColumnReference.bindExpression(Unknown
Source)
at org.apache.derby.impl.sql.compile.ColumnReference.bindExpression(Unknown
Source)
at org.apache.derby.impl.sql.compile.ResultColumn.bindExpression(Unknown
Source)
at org.apache.derby.impl.sql.compile.ResultColumnList.bindExpressions(Unknown
Source)
at org.apache.derby.impl.sql.compile.RowResultSetNode.bindExpressions(Unknown
Source)
at org.apache.derby.impl.sql.compile.DMLStatementNode.bindExpressions(Unknown
Source)
at org.apache.derby.impl.sql.compile.InsertNode.bindStatement(Unknown Source)
at org.apache.derby.impl.sql.GenericStatement.prepMinion(Unknown Source)
at org.apache.derby.impl.sql.GenericStatement.prepare(Unknown Source)
at org.apache.derby.impl.sql.conn.GenericLanguageConnectionContext.prepareInternalStatement(Unknown Source)
... 3 more
感谢您的帮助
INSERT INTO
语句的语法是:
INSERT INTO table_name (column1, column2, column3, ...)
VALUES (value1, value2, value3, ...);
另外,您的错误是您试图从文本文件中插入整行,而没有将其分成代表 4 个不同列的 4 个部分。
你得到的错误被触发,因为你试图执行这个无效的语句:
INSERT INTO Car VALUES Toyota Prius 52 23475
应该是
INSERT INTO Car (Manufacturer, Model, Efficiency, Price) VALUES ('Toyota', 'Prius', 52, 23475)
目前我正在尝试通过 Apache Derby 将新数据传递给 SQL table。我要从具有给定文本的文件中读取,并将读取的每个标记添加到其各自的列中。
但是,在尝试执行此操作时,我收到大量错误,表明该标记不是列...但这不是我想要做的。
carmpg.txt
内容:
Toyota Prius 52 23475
Kia Optima 31 22600
Hyundai Sonata 31 22050
Nissan Altima 31 23260
Chevrolet Malibu 30 21680
Honda Accord 30 23570
Mazda 6 29 21945
Subaru Legacy 29 22195
Toyota Camry 27 23495
Chrysler 200 27 22115
Ford Fusion 27 22120
Volkswagen Passat 27 22995
Volkswagen CC 25 34475
Chevrolet Impala 25 27895
Buick LaCrosse 25 29565
Nissan Maxima 25 33270
Buick Regal 24 27065
Lincoln MKZ 26 3560
因此,Toyota
应该进入 Manufacturer
列,Prius
应该进入 Model
列,依此类推。
代码如下:
try(Connection conn = SimpleDataSource.getConnection();Statement stat =
conn.createStatement())
{
try
{
stat.execute("DROP TABLE Car");
}
catch(SQLException e)
{
// get exception if table doesn't exist yet
}
stat.execute("CREATE TABLE Car (Manufacturer VARCHAR(20),"
+ "Model VARCHAR(20), " + "Efficiency DECIMAL(6,2), " + "Price DECIMAL(8,2)) ");
String inputFileName = "carmpg.txt";
File inputFile = new File(inputFileName);
Scanner in = new Scanner(inputFile);
// COMPLETE THIS WHILE LOOP to insert all cars from the input text file
while (in.hasNextLine()){
stat.execute("INSERT INTO Car VALUES " + in.next());
}
ResultSet rs = stat.executeQuery("SELECT * FROM Car");
rs.next();
System.out.println(rs.getString("Model"));
以及相关的堆栈跟踪:
Exception in thread "main" java.sql.SQLSyntaxErrorException: Column 'TOYOTA'
is either not in any table in the FROM list or appears within a join
specification and is outside the scope of the join specification or appears
in a HAVING clause and is not in the GROUP BY list. If this is a CREATE or
ALTER TABLE statement then 'TOYOTA' is not a column in the target table.
at org.apache.derby.impl.jdbc.SQLExceptionFactory.getSQLException(Unknown
Source)
at org.apache.derby.impl.jdbc.Util.generateCsSQLException(Unknown Source)
at
org.apache.derby.impl.jdbc.TransactionResourceImpl.wrapInSQLException(Unknown
Source)
at org.apache.derby.impl.jdbc.TransactionResourceImpl.handleException(Unknown
Source)
at org.apache.derby.impl.jdbc.EmbedConnection.handleException(Unknown Source)
at org.apache.derby.impl.jdbc.ConnectionChild.handleException(Unknown Source)
at org.apache.derby.impl.jdbc.EmbedStatement.execute(Unknown Source)
at org.apache.derby.impl.jdbc.EmbedStatement.execute(Unknown Source)
at CarDB.main(CarDB.java:49)
Caused by: ERROR 42X04: Column 'TOYOTA' is either not in any table in the
FROM list or appears within a join specification and is outside the scope of
the join specification or appears in a HAVING clause and is not in the GROUP
BY list. If this is a CREATE or ALTER TABLE statement then 'TOYOTA' is not a
column in the target table.
at org.apache.derby.iapi.error.StandardException.newException(Unknown Source)
at org.apache.derby.iapi.error.StandardException.newException(Unknown Source)
at org.apache.derby.impl.sql.compile.ColumnReference.bindExpression(Unknown
Source)
at org.apache.derby.impl.sql.compile.ColumnReference.bindExpression(Unknown
Source)
at org.apache.derby.impl.sql.compile.ResultColumn.bindExpression(Unknown
Source)
at org.apache.derby.impl.sql.compile.ResultColumnList.bindExpressions(Unknown
Source)
at org.apache.derby.impl.sql.compile.RowResultSetNode.bindExpressions(Unknown
Source)
at org.apache.derby.impl.sql.compile.DMLStatementNode.bindExpressions(Unknown
Source)
at org.apache.derby.impl.sql.compile.InsertNode.bindStatement(Unknown Source)
at org.apache.derby.impl.sql.GenericStatement.prepMinion(Unknown Source)
at org.apache.derby.impl.sql.GenericStatement.prepare(Unknown Source)
at org.apache.derby.impl.sql.conn.GenericLanguageConnectionContext.prepareInternalStatement(Unknown Source)
... 3 more
感谢您的帮助
INSERT INTO
语句的语法是:
INSERT INTO table_name (column1, column2, column3, ...)
VALUES (value1, value2, value3, ...);
另外,您的错误是您试图从文本文件中插入整行,而没有将其分成代表 4 个不同列的 4 个部分。
你得到的错误被触发,因为你试图执行这个无效的语句:
INSERT INTO Car VALUES Toyota Prius 52 23475
应该是
INSERT INTO Car (Manufacturer, Model, Efficiency, Price) VALUES ('Toyota', 'Prius', 52, 23475)