Java 没有为参数8指定值
我从文件中读取每行文本,并使用动态查询插入数据库。每个文件都是根据表名命名的,因此我获取了用于构建查询的列名和类型,然后只插入值。 当我不得不插入一个空值时,我遇到了问题,看不出我遗漏了什么? 根据我看到的印刷线条8?标记和8个值,但错误消息显示:没有为参数8指定值 生成的Insert语句:Java 没有为参数8指定值,java,sql,postgresql,Java,Sql,Postgresql,我从文件中读取每行文本,并使用动态查询插入数据库。每个文件都是根据表名命名的,因此我获取了用于构建查询的列名和类型,然后只插入值。 当我不得不插入一个空值时,我遇到了问题,看不出我遗漏了什么? 根据我看到的印刷线条8?标记和8个值,但错误消息显示:没有为参数8指定值 生成的Insert语句: INSERT INTO dbo.request_service_log (request_service_log_id, request_service_id, severity_cde, log_cde,
INSERT INTO dbo.request_service_log (request_service_log_id, request_service_id, severity_cde, log_cde, log_txt, source_id, message_id, application_id) values(?, ?, ?, ?, ?, ?, ?, ?)
参数值:
23584022,222635,C,10002002,Start Monitor Failed,0,25431082,NULL
代码:
public void insertData(字符串tableName,列表行){
列表列名称=null;
试一试{
//获取指定表的列名和类型
columnNames=getColumns(表名,“dbo”);
}
捕获(SQLSE异常){
System.out.println(se.getMessage());
}
字符串insertColumns=“”;
字符串insertValues=“”;
对于(int i=0;i
当项目
调用的拆分(',')
结果产生少于8个项目时,您将遇到此问题
您应该通过将i
从0迭代到7(包括7),并检查items
是否有足够的元素覆盖i
来解决此问题:
for (int i = 0 ; i != 8 ; i++) {
String item = (items.length() < i) ? items[i] : "NULL";
... // Now use item instead of items[i] below
}
for(int i=0;i!=8;i++){
字符串item=(items.length()
请发布堆栈跟踪您有一行错误:ps.setNull((1+1),Types.INTEGER)
,需要更改为ps.setNull((i+1),type.INTEGER)
ps.setNull((1+1),type.INTEGER)
应该是ps.setNull((i+1),type.INTEGER)代码>谢谢@Danilo我需要的是第二双眼睛。很好的观点@dasblinkenlight谢谢你指出了一个安全网解决方案。
for (int i = 0 ; i != 8 ; i++) {
String item = (items.length() < i) ? items[i] : "NULL";
... // Now use item instead of items[i] below
}