首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在java中将包含left to right和right to left语言字符串添加到StringBuilder中

如何在java中将包含left to right和right to left语言字符串添加到StringBuilder中
EN

Stack Overflow用户
提问于 2012-12-31 19:55:16
回答 2查看 1.4K关注 0票数 1

我把java中的StringBuilder搞混了。我的代码如下:

代码语言:javascript
复制
StringBuilder cmdB = new StringBuilder(
            "INSERT IGNORE INTO Query ( context, category, generality, freshness, TokenCount, type) VALUES ");
    for (int i = 0; i < querydata.size(); i++) {

        if (i == 0)
            cmdB.append("('");
        else
            cmdB.append(",('");
        cmdB.append(querydata.get(i).getContext() + "',"
                + querydata.get(i).getCategory() + ","
                + querydata.get(i).getGenerality() + ","
                + querydata.get(i).getFreshness() + ","
                + querydata.get(i).getTokenCount() + ","
                + querydata.get(i).getType());
        cmdB.append(")");
    }
    cmdB.append(";");

我有Mysql作为数据库,想要创建插入1000行的字符串。querydata.get(i).getContext()返回字符串,包含英语(从左到右)和波斯语(从右到左)。

当我的querydata.get(i).getContext()返回“دانلودکرکبازیghost recon”时,我的Stringbuilder添加了它。我的结果如下所示。

INSERT IGNORE INTO查询(上下文,类别,通用性,新鲜度,TokenCount,类型)值(‘پخشزندهفوتبال’,2,1.0,0.0,2,1),(‘عکسهایجشنوارهفیلمفجر’,2,1.0,0.0,2,1),(‘نتایجلیگبرتر’,2,1.0,0.0,2,1),(‘دانلودکرکبازیghost recon',2,1.0,0.0,2,1)。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-12-31 20:32:00

就我看来,字符串的内容在逻辑顺序上没有什么问题,可能会让您感到困惑的是,打印双向文本时呈现它的方式。如果您将鼠标拖到字符串上,您可以通过选择跳转的方式来查看哪些文本串正在以哪种主要方向呈现。

如果我用换行符分隔这些值集,我会得到

INSERT IGNORE INTO查询(上下文、类别、通用性、新鲜度、TokenCount、类型)值

(‘پخشزندهفوتبال’,2,1.0,0.0,2,1),

(‘عکسهایجشنوارهفیلمفجر’,2,1.0,0.0,2,1),

我不确定您在浏览器中看到了什么,但在我的浏览器中,它将INSERT INTO ... VALUES行视为LTR,然后将后续行视为主要是RTL,但不包括包含ghost recon的行。下面是在波斯语脚本部分周围插入了Unicode从左到右标记(U+200E)的相同字符串,以强制将引号和括号视为LTR:

INSERT IGNORE INTO查询(上下文、类别、通用性、新鲜度、TokenCount、类型)值

(‘‎عکسهایجشنوارهفیلمفجر‎’,2,1.0,0.0,2,1),

(‘‎نتایجلیگبرتر‎’,2,1.0,0.0,2,1),

(‘‎دانلودکرکبازی‎幽灵侦察’,2,1.0,0.0,2,1)。

但我也同意this answer的观点,即您应该考虑使用PreparedStatement而不是使用StringBuilder构建SQL,以防止SQL注入攻击(或模糊错误),以防您的任何上下文字符串包含撇号(这种情况比您认为的更常见)。

票数 3
EN

Stack Overflow用户

发布于 2012-12-31 20:04:00

我不确定你的问题到底是问什么,但你真的应该考虑使用批插入工具来做这么大的插入。它在内存、速度和安全性方面都会更好。看看SpringSource的JdbcTemplate和它的batchUpdate方法。下面是取自谷歌搜索的一个简单的例子。

代码语言:javascript
复制
public void insertBatch(final List<Customer> customers){
 
  String sql = "INSERT INTO CUSTOMER " +
    "(CUST_ID, NAME, AGE) VALUES (?, ?, ?)";
 
  getJdbcTemplate().batchUpdate(sql, new BatchPreparedStatementSetter() {
 
    @Override
    public void setValues(PreparedStatement ps, int i) throws SQLException {
        Customer customer = customers.get(i);
        ps.setLong(1, customer.getCustId());
        ps.setString(2, customer.getName());
        ps.setInt(3, customer.getAge() );
    }
 
    @Override
    public int getBatchSize() {
        return customers.size();
    }
  });
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14101265

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档