我有一个超过20000 row
s的excel文件,它有大量数据,并且该文件中的数据通过java程序插入到数据库中。
每当我运行该文件时,都会跳过某些值,而不会将其插入数据库。
任何人都可以解释为什么会如此?
此外,在插入超过300个值后, ORA-00933
:抛出SQL命令未正确结束的异常。
答案 0 :(得分:2)
出于安全原因(以及其他原因),您不应该只是在没有正确转义输入的情况下将输入连接到语句中。
使用预准备语句,这将使数据库或驱动程序能够处理输入中转义的特殊字符。如果没有逃避,您最终可能会遇到无效甚至有害的查询。
示例:
String a1Va2 = "';DROP table ata_keywords;'";
rs=ss.executeQuery("select keyword,ata_code,ac_model from ata_keywords where keyword='"+a1Va2+"'");
这将导致两个查询:
select keyword,ata_code,ac_model from ata_keywords where keyword='';
DROP table ata_keywords; //Ooops
'' //the last bit is ignored
您获得的异常表示某些输入包含导致查询无效的序列。
答案 1 :(得分:0)
托马斯已经解释了我的想法,SQL Injection
通过在a preparedStatement
中使用绑定变量,我们可以避免对查询字符串进行黑客攻击。
String queryString = "select keyword,ata_code,ac_model from ata_keywords where keyword = ?1";
PreparedStatement ss = conn.prepareStatement(queryString);
s.setString(1,a1Va2);
rs = ss.executeQuery();
如果您希望您的Query版本能够正常工作...... 用双引号替换单引号以逃避它。
rs=ss.executeQuery("select keyword,ata_code,ac_model from ata_keywords where keyword='"+a1Va2.replace("'","''")+"'");
答案 2 :(得分:0)
如果您知道插入的记录序列,问题记录将是恢复成功插入之前的记录。 记录加载序列遇到错误并导致前一个插入语句的隐式回滚,因此缺少记录插入块。 错误本身看起来像一个缺失的括号。