【发布时间】:2017-06-29 08:47:59
【问题描述】:
我的表是这样设置的,并且似乎可以正确创建。 (不抛出异常)
String sqlString = String.format(
"CREATE TABLE %s(%s BIGINT,
%s VARCHAR(%d),
%s VARCHAR(%d),
%s VARCHAR(%d),
%s INT,
%s INT,
%s BIGINT,
PRIMARY KEY (%s))",
//
TABLE_NAME, //
Column.ID.name, //
Column.MAKE.name, Column.MAKE.length, //
Column.MODEL.name, Column.MODEL.length, //
Column.SERIAL_NUMBER.name, Column.SERIAL_NUMBER.length, //
Column.YEAR.name, //
Column.MILEAGE.name, //
Column.CUSTOMER_ID.name, //
Column.ID.name);
我正在尝试插入以下内容:
String sqlString = String.format(//
"INSERT INTO %s values(?, ?, ?, ?, ?, ?, ?)", TABLE_NAME);
boolean result = execute(sqlString, //
motorcycle.getId(), // long
motorcycle.getMake(), // String
motorcycle.getModel(), // String
motorcycle.getSerialNumber(), // String
motorcycle.getYear(), // int
motorcycle.getMileage(), // int
motorcycle.getCustomerId()); //long
execute(sqlString, args[]) 返回false,但不会抛出异常。
derby.log 也没有关于出了什么问题的信息。
我是否使用了错误的 SQL 数据类型?
编辑:
execute(sqlString, args[]) 方法在 Dao 超类中,适用于其他子类。
代码如下:
protected boolean execute(String preparedStatementString, Object... args) throws SQLException {
LOG.debug(preparedStatementString);
boolean result = false;
PreparedStatement statement = null;
try {
Connection connection = Database.getConnection();
statement = connection.prepareStatement(preparedStatementString);
int i = 1;
for (Object object : args) {
statement.setObject(i, object);
i++;
}
statement.executeUpdate();
result = true;
} finally {
close(statement);
}
return result;
}
【问题讨论】:
-
那么抛出的异常是什么?错误信息是什么?你的
execut()方法有什么作用? -
格式化后能否给出完整的字符串?
-
@a_horse_with_no_name 没有抛出异常,这是我问题的核心。我编辑了问题以包含 execute() 方法的作用。
-
@SharonBenAsher 创建表的字符串:
CREATE TABLE BCMC_Motorcycles(motorcycleId BIGINT, make VARCHAR(25), model VARCHAR(25), serialNumber VARCHAR(25), bikeYear INT, mileage INT, customerId BIGINT, PRIMARY KEY (motorcycleId))至于插入字符串,它看起来像这样INSERT INTO BCMC_Motorcycles values(?, ?, ?, ?, ?, ?, ?)它与其他参数一起发送到execute(sqlString, args) -
你应该使用
executeUpdate()而不是execute()作为DML 语句