Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/86.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
错误消息声称我的表名实际上是JavaDerby(SQL)中的一列_Java_Sql_Derby - Fatal编程技术网

错误消息声称我的表名实际上是JavaDerby(SQL)中的一列

错误消息声称我的表名实际上是JavaDerby(SQL)中的一列,java,sql,derby,Java,Sql,Derby,我正在尝试使用Derby(SQL?)创建一个新表,但不断收到一个错误,声称表名不是表中的列名 列“CAR”不在FROM列表中的任何表中,或者出现在联接规范中,并且不在联接规范的范围内,或者出现在HAVING子句中,并且不在groupby列表中。如果这是CREATE或ALTER TABLE语句,则“CAR”不是目标表中的一列。 每当我尝试运行此代码时,都会发生这种情况: private static final String DERBY_DRIVER = "org.apache.derby.jdb

我正在尝试使用Derby(SQL?)创建一个新表,但不断收到一个错误,声称表名不是表中的列名

列“CAR”不在FROM列表中的任何表中,或者出现在联接规范中,并且不在联接规范的范围内,或者出现在HAVING子句中,并且不在groupby列表中。如果这是CREATE或ALTER TABLE语句,则“CAR”不是目标表中的一列。

每当我尝试运行此代码时,都会发生这种情况:

private static final String DERBY_DRIVER = "org.apache.derby.jdbc.EmbeddedDriver";
public static final String JDBC_DERBYURL = "jdbc:derby:cars;create=true";

public CreateInventoryDB(){
    try {
        createDB();
    } catch (ClassNotFoundException e) {
        System.out.println("ClassNotFoundException: " + e);
    } catch (SQLException e) {
        System.out.println("SQLException: " + e.printStackTrace());
    }

}

private void createDB() throws ClassNotFoundException, SQLException{
    Class.forName(DERBY_DRIVER);
    Connection connection = DriverManager.getConnection(JDBC_DERBYURL);
    connection.createStatement().execute(
        "create table cars(itemid int, type varchar(10), make varchar(10), " + 
        "model varchar(15), caryear int, startinventory varchar(10), " +
        "datesold varchar(10), dealercost int, sellingprice int, doorwheels int)");
    connection.createStatement().execute("insert into cars values " +
        "(1, car, Ford, Crown_Victoria, 2010, 7/3/2012, 7/23/2012, 8900, 14000, 4),"+
        //etc.
}

我假设这与插入到cars值中的
有关,因为这是我实际将信息放入表中的唯一位置,但在四处搜索后,我找不到任何其他方法来执行此操作。

需要相应地引用您的值…Derby看到
(1,car,Ford
作为文本,所以它看到
car
并看到,嘿,这是一个表

简单的回答是做一些更像

insert into cars values " +
    "(1, 'car', 'Ford', 'Crown_Victoria', 2010, '7/3/2012', '7/23/2012', 8900, 14000, 4
例如

PreparedStatement ps = connection.prepareStatement("insert into cars values (?, ?, ?, ?, ?, ?, ?, ?, ?, ?)");
ps.setInt(1, 1);
ps.setString(2, "car");
ps.setString(3, "Ford");
ps.setString(4, "Crown_Victoria");
ps.setInt(5, 2010);
ps.setString(6, "7/3/2012");
ps.setString(7, "7/23/2012");
ps.setInt(8, 8900);
ps.setInt(9, 4);
一个更准确的答案是使用,这将有助于防止这种错误和其他注入错误,例如

PreparedStatement ps = connection.prepareStatement("insert into cars values (?, ?, ?, ?, ?, ?, ?, ?, ?, ?)");
ps.setInt(1, 1);
ps.setString(2, "car");
ps.setString(3, "Ford");
ps.setString(4, "Crown_Victoria");
ps.setInt(5, 2010);
ps.setString(6, "7/3/2012");
ps.setString(7, "7/23/2012");
ps.setInt(8, 8900);
ps.setInt(9, 4);

如果您试图在一条语句中添加多行,可以使用
addBatch
功能

相应地引用您的值…Derby将
(1,car,Ford
视为文本,因此它会看到
car
并看到,嘿,这是一个表

简单的回答是做一些更像

insert into cars values " +
    "(1, 'car', 'Ford', 'Crown_Victoria', 2010, '7/3/2012', '7/23/2012', 8900, 14000, 4
例如

PreparedStatement ps = connection.prepareStatement("insert into cars values (?, ?, ?, ?, ?, ?, ?, ?, ?, ?)");
ps.setInt(1, 1);
ps.setString(2, "car");
ps.setString(3, "Ford");
ps.setString(4, "Crown_Victoria");
ps.setInt(5, 2010);
ps.setString(6, "7/3/2012");
ps.setString(7, "7/23/2012");
ps.setInt(8, 8900);
ps.setInt(9, 4);
一个更准确的答案是使用,这将有助于防止这种错误和其他注入错误,例如

PreparedStatement ps = connection.prepareStatement("insert into cars values (?, ?, ?, ?, ?, ?, ?, ?, ?, ?)");
ps.setInt(1, 1);
ps.setString(2, "car");
ps.setString(3, "Ford");
ps.setString(4, "Crown_Victoria");
ps.setInt(5, 2010);
ps.setString(6, "7/3/2012");
ps.setString(7, "7/23/2012");
ps.setInt(8, 8900);
ps.setInt(9, 4);

如果试图在一条语句中添加多行,可以使用
addBatch
功能

如果不转义varchar值,请在值周围添加单引号-如下所示

1, 'car', 'Ford', 'Crown_Victoria', 2010, '7/3/2012', '7/23/2012', 8900, 14000, 4

或者,(首选)使用and。

如果没有转义varchar值,请在值周围添加单引号-如下所示

1, 'car', 'Ford', 'Crown_Victoria', 2010, '7/3/2012', '7/23/2012', 8900, 14000, 4

或(首选)使用and。

错误消息没有声明表名是/是列名。作为旁注,您确实不想将该格式用于日期…事实上,您根本不想使用字符串存储日期。您应该使用实际值。错误消息没有声明表名是/是列名。作为旁注,您需要我不想在日期中使用这种格式…事实上,你根本不想使用字符串来存储日期。你应该使用实际的。哇。非常感谢。真不敢相信我错过了这个。哇。非常感谢。真不敢相信我错过了这个。