java - 错误消息声称我的表名实际上是 Java Derby (SQL) 中的列

标签 java sql derby

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

列“CAR”不在 FROM 列表中的任何表中,或者出现在联接规范中但超出联接规范的范围,或者出现在 HAVING 子句中但不在 GROUP BY 列表中。如果这是 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.
}

我假设它与插入汽车值有关,因为这是我实际将信息放入表中的唯一位置,但我找不到任何其他位置四处寻找后可以做到这一点的方法。

最佳答案

您的值需要相应地引用...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这将有助于防止这种错误和其他注入(inject)错误,例如......

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 功能

关于java - 错误消息声称我的表名实际上是 Java Derby (SQL) 中的列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24154615/

相关文章:

java - 大数的质因数分解

java - Hadoop WordCount 按单词出现次数排序

sql - 将标识列添加到 SQL Server 2008 中的 View

php - 查询以在类别中链接时显示所有博客文章

java - Jetty + Derby 未找到合适的司机

java - 如何在java中用Escape键替换Jbutton?

java - JMVTI :Could not find agent library

sql - 比较 postgresql 中同一张表的值

java - 违反外键约束

sql - Derby SQL插入