Java ORA-01722在数据库表中设置值时
为什么在尝试将数据输入到表中时出现此错误 org.springframework.dao.DataIntegrityViolationException PreparedStatementCallback;SQL[插入INS_RAZNO.ZAPOSLENICI_测试值(?,,,,,,,?)];ORA-01722:无效号码 嵌套异常为java.sql.SQLException:ORA-01722:无效数字 它似乎是整数和字符串的问题,但我对类似的方法也包含整数和字符串没有问题,但它工作得很好。有什么办法解决这个问题吗Java ORA-01722在数据库表中设置值时,java,sql,excel,oracle,Java,Sql,Excel,Oracle,为什么在尝试将数据输入到表中时出现此错误 org.springframework.dao.DataIntegrityViolationException PreparedStatementCallback;SQL[插入INS_RAZNO.ZAPOSLENICI_测试值(?,,,,,,,?)];ORA-01722:无效号码 嵌套异常为java.sql.SQLException:ORA-01722:无效数字 它似乎是整数和字符串的问题,但我对类似的方法也包含整数和字符串没有问题,但它工作得很好。有什
@Override
public void getExcell2() {
final String PATH = "C:\\Workspace\\zaposlenici.xlsx"; //putanja do excel file-a
try {
Workbook workbook = WorkbookFactory.create(new File(PATH)); //High level representation of a Excel workbook.
Sheet sh = workbook.getSheetAt(0); //High level representation of a Excel worksheet.
DataFormatter dataFormatter = new DataFormatter(); //DataFormatter contains methods for formatting the value stored in an Cell.
List<String> lista = new ArrayList<String>(); //Lista sa vrijednostima svih ćelija
sh.forEach(row -> { //sheet.forEach row
row.forEach(cell -> { //row.forEach cell
String cellvalue = dataFormatter.formatCellValue(cell); //formatira ćelije u string tip
lista.add(cellvalue);
});
});
workbook.close();
ArrayList<String> lista1 = new ArrayList<String>();
ArrayList<String> lista2 = new ArrayList<String>();
ArrayList<String> lista3 = new ArrayList<String>();
ArrayList<String> lista4 = new ArrayList<String>();
ArrayList<String> lista5 = new ArrayList<String>();
ArrayList<String> lista6 = new ArrayList<String>();
@SuppressWarnings("unchecked")
ArrayList<String>[] liste = new ArrayList[]{lista1, lista2, lista3, lista4, lista5, lista6};
for (int i=0 ; i< lista.size(); i ++ ){
if(lista.get(i) == null) {
liste[i % 6].add("NULL");
}
else if (lista.get(i) == "") {
liste[i % 6].add("NULL");
}
else {
liste[i % 6].add(lista.get(i));
}}
jdbcTemplate.batchUpdate("INSERT INTO INS_RAZNO.ZAPOSLENICI_TEST VALUES (?, ?, ?, ?, ?, ?)", new BatchPreparedStatementSetter() {
@Override //"INSERT INTO INS_RAZNO.BULK_TEST VALUES (?, ?, ?)"
public void setValues(PreparedStatement ps, int i) throws SQLException {
ps.setString(1, lista1.get(i));
ps.setString(2, lista2.get(i));
ps.setString(3, lista3.get(i));
ps.setString(4, lista4.get(i));
ps.setString(5, lista5.get(i));
ps.setString(6, lista6.get(i));
}
@Override
public int getBatchSize() {
return lista2.size();
}
});
} catch (EncryptedDocumentException | InvalidFormatException | IOException e) {
e.printStackTrace();
}
}
当试图将字符串转换为数字时,会发生ORA-01722错误,并且该字符串无法转换为数字我解决了第一行中列名称的所有字符串所造成的问题。
只是不算第一行 您可以为INS_RAZNO.ZAPOSLENICI_测试添加模式细节吗?创建表“INS_RAZNO”。“ZAPOSLENICI_测试”(PREZIME varchar(15)、IME varchar(15)、ODJEL varchar(15)、SLOŽENOST_POSLA int、STAROST int、MJESEČNI_OD int);3个varchar,3个int,但您有6个setString-您尝试了4,5,6作为
setInt
?我有字符串值的数组列表。我在上一个项目中就是这样做的,效果很好。我认为缺少setInt隐藏了一个转换问题,您是否检查了试图插入的数据?
CREATE TABLE "INS_RAZNO"."ZAPOSLENICI_TEST"
(
PREZIME varchar(15),
IME varchar(15),
ODJEL varchar(15),
SLOŽENOST_POSLA int,
STAROST int,
MJESEČNI_OD int
);