它的抓取工具,在运行时会获得更长的字符串值长度,例如152263
。
我想将此字符串值插入数据库(SQL-nvarchar(max))
整个长度无法容纳在单列(after 42600 its truncated
)中,因此我更改了表,增加了另外一列并插入值。
if (fullText.length() > 42600) {
preparedStatement.setString(35, fullText.substring(0, 42500));
preparedStatement.setString(36, fullText.substring(42500, fullText.length()));
} else {
preparedStatement.setString(35, fullText);
preparedStatement.setString(36, "");
}
上面的一个完美地适用于2列。 在某些情况下,其出口超过两列 让我知道如何将它分成3倍(等于字符串长度)并存储到sql db中的3列中。
答案 0 :(得分:0)
if (fullText.length() > 42600) {
preparedStatement.setString(35, fullText.substring(0, 42500));
if (fullText.length() > 85000) {
preparedStatement.setString(36, fullText.substring(42500, 85000));
preparedStatement.setString(37, fullText.substring(85000, fullText.length()));
} else {
preparedStatement.setString(36, fullText.substring(42500, fullText.length()));
}
} else {
preparedStatement.setString(35, fullText);
preparedStatement.setString(36, "");
preparedStatement.setString(37, "");
}
答案 1 :(得分:0)
根据给定的限制检查长度,并比较最长和最短范围。不确定是否要在空列中存储“”或NULL
String first = "";
String middle = "";
String last = "";
if (fullText.length > SPLIT_LIMIT * 2) {
last = fullText.substring(SPLIT_LIMIT * 2 + 1);
}
if (fullText.length > SPLIT_LIMIT) {
middle = fullText.substring(SPLIT_LIMIT + 1, SPLIT_LIMIT * 2);
first = fullText.substring(0, SPLIT_LIMIT * 2);
} else {
first = fullText;
}
preparedStatement.setString(35, first);
preparedStatement.setString(36, middle);
preparedStatement.setString(37, last);
答案 2 :(得分:0)
这是一个使用循环来灵活计算列数的解决方案:
String text = "";
int idCounter = 35;
while(text.length() > 42600){
preparedStatement.setString(idCounter, text.substring(0, 42600));
text = text.substring(42601,text.length());
idCounter++;
}
preparedStatement.setString(idCounter, text);
(未经测试)