错误消息声称我的表名实际上是JavaDerby(SQL)中的一列
我正在尝试使用Derby(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
列“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。错误消息没有声明表名是/是列名。作为旁注,您确实不想将该格式用于日期…事实上,您根本不想使用字符串存储日期。您应该使用实际值。错误消息没有声明表名是/是列名。作为旁注,您需要我不想在日期中使用这种格式…事实上,你根本不想使用字符串来存储日期。你应该使用实际的。哇。非常感谢。真不敢相信我错过了这个。哇。非常感谢。真不敢相信我错过了这个。