Java 6 解析例程正在截断 SQLquery

标签 java mysql

这是关于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/

相关文章:

java - 如何使用反射获取匿名类字段

mysql - Django - 对 manage.py 与服务应用程序使用不同的 MySQL 用户?

php - 使用 PhP/MySQL/Drupal 的带宽使用问题

java - 选择“查询”,将出现在 Netbeans 和 mysql 中的组合框中

php - 无法在数据库中存储文件详细信息

java - java中将iso8859-1转换为utf8

java - Eclipse 执行速度比另一台电脑慢

使用 Netbeans 的 REST Web 服务的 Java 客户端

java - 连接目标主机时捕获I/O异常(java.net.SocketException): Too many open files

mysql - sql - @curRow 基于列