【发布时间】:2018-11-19 04:50:05
【问题描述】:
我已经建立了一个数据库,现在我正在编写一个将数据插入该数据库的函数。 我想问题是我没有看到的,我得到的错误是:
“VARCHAR”类型的列不能保存“INTEGER”类型的值。
虽然我完全理解这意味着什么,但我就是无法让它发挥作用。
这是我的插入代码:
public static void insertIntoCouponsDB(long COMPANY_ID, String TITLE, String START_DATE, String END_DATE, int AMOUNT, String TYPE, String MESSAGE, double PRICE, String IMAGE) throws SQLException {
Connection connection = DriverManager.getConnection(connectionString);
String sql = String.format("insert into Coupons (COMPANY_ID, TITLE, START_DATE,END_DATE,AMOUNT,TYPE,MESSAGE,PRICE,IMAGE) values (%d, '%s', '%s','%s',%d,'%s','%s',%.2f,'%s')",COMPANY_ID,TITLE,START_DATE,END_DATE,AMOUNT,TYPE,MESSAGE,PRICE,IMAGE);
PreparedStatement preparedStatement = connection.prepareStatement(sql, PreparedStatement.RETURN_GENERATED_KEYS);
preparedStatement.executeUpdate();
ResultSet resultSet = preparedStatement.getGeneratedKeys();
resultSet.next();
int id = resultSet.getInt(1);
System.out.println("Insertion into Coupons DONE !!! New ID: " + id);
}
}
这是创建tabke的代码:
public static void buildCouponsDB() {
try {
Connection connection = DriverManager.getConnection(connectionString);
Statement statement = connection.createStatement();
String sql = "create table Coupons (" +
"ID bigint not null primary key " +
"generated always as identity(start with 1, increment by 1), "+
"COMPANY_ID bigint not null, "+
"TITLE varchar(50) not null, "+
"START_DATE date not null, "+
"END_DATE date not null, "+
"AMOUNT integer not null, "+
"TYPE varchar(50) not null, "+
"MESSAGE varchar(250) not null, "+
"PRICE double not null, "+
"IMAGE varchar(100) not null)";
statement.executeUpdate(sql);
System.out.println("Coupons Table has been Created Succesfully !!");
} catch (Exception ex) {
System.out.println(ex.getMessage());
}
}
有人可以帮忙吗? 如果问题很简单,我很抱歉,但仍然寻求帮助。提前致谢。
【问题讨论】:
-
您以错误的方式使用 PreparedStatement?为什么你不使用占位符而不是
%d, %s... -
%d 不是整数的占位符吗? (long, int...)
-
您的代码是受害者或像现在这样的 SQL 注入和语法错误!
-
你用的是什么数据库?