这是关于Java和MySQL的问题。我有这样的摘录:
String selectString = "select";
int selectIndex = config.getMappingSql().toLowerCase().indexOf(selectString);
int fromIndex = config.getMappingSql().toLowerCase().indexOf("from");
String subSql =config.getMappingSql().substring(selectIndex + Const.INT_6, fromIndex);
String callIdField = "";
String[] fields = subSql.split(",");
for (String field : fields) {
if (field.contains(" " + pk)) {
callIdField = field;
break;
}
}
String idSql = "select " + callIdField + " " + config.getMappingSql().substring(fromIndex) + " order by " + pk
变量getMappingSql
中的查询是:
SELECT orktape.id, orktape.filename, orkuser.lastname from orksegment left join orktape on orksegment.tape_id=orktape.id left join orkuser on orksegment.user_id=orkuser.id where orktape.mediatype = 'A'
但是结果是:
select from orksegment left join orktape on orksegment.tape_id=orktape.id left join orkuser on orksegment.user_id=orkuser.id where orktape.mediatype = 'A' order by id
我不是 Java 程序员,但我认为代码由于分隔符(表名和列名之间的句点)而丢弃了 “from” 之前的值。如果这是真的,有没有办法解决它,或者我必须重新编写查询?
最佳答案
不知道pk
我无法确定测试,但问题是你的for循环
for (String field : fields)
{
if (field.contains(" " + pk))
{
callIdField = field;
break;
}
}
最多 callIdField
将设置为其中 1 个字段。由于这没有设置任何内容,因此您的包含逻辑一定是错误的。修复此问题以开始,然后您需要随时连接 callIdField 或使用 StringBuilder。
关于Java 6 解析例程正在截断 SQLquery,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42581518/