小编ins*_*ect的帖子

业务逻辑中推荐不必要的错误处理吗?例如.空检查/百分比限制检查等

我们通常会在业务逻辑中进行不必要的检查以避免失败.

例如.

1. public ObjectABC funcABC(){

      ObjectABC obj = new ObjectABC;
     ..........
     ..........
     //its never set to null here.
     ..........
     return obj; 
} 

ObjectABC o = funABC();

if(o!=null){
//do something
}
Run Code Online (Sandbox Code Playgroud)

如果我们确定它永远不会为null,为什么我们需要这个null检查?这是一个好习惯吗?

2. int pplReached = funA(..,..,..);
   int totalPpl   = funB(..,..,..);

   funA() just puts a few more restriction over result of funB().


    Double percentage = (totalPpl==0||totalPpl<pplReached) ? 0.0 : pplReached/totalPpl;
Run Code Online (Sandbox Code Playgroud)

我们需要'totalPpl<pplReached'检查吗?

问题是:我们不是通过进行此类检查来吞下一些基本问题吗?通过进行这些检查可以避免理想地显示的问题.

推荐的方式是什么?

java error-handling error-checking

3
推荐指数
1
解决办法
332
查看次数

HSQLDB和group by的奇怪行为

我使用HSQLDB编写junits,我的查询是这样的:

String queryStr = "from ManualUrlBatchModel where status IN(:status) group by batchUser order by creationTime";
        Query query = getSession(requestType).createQuery(queryStr);
        query.setParameterList("status", status);
Run Code Online (Sandbox Code Playgroud)

我在给定状态下检索每个用户一个批次(取决于创建时间FIFO顺序).

它适用于端到端测试,但在编写junits时失败.

例外说:

Caused by: java.sql.SQLException: Not in aggregate function or group by clause: org.hsqldb.Expression@164f8d4 in statement [select manualurlb0_.manual_url_batch_id as manual1_7_, manualurlb0_.creation_time as creation2_7_, manualurlb0_.modification_time as modifica3_7_, manualurlb0_.attribute_list as attribute4_7_, manualurlb0_.batch_name as batch5_7_, manualurlb0_.batch_user as batch6_7_, manualurlb0_.input_s3_key as input7_7_, manualurlb0_.locale as locale7_, manualurlb0_.notify_when_complete as notify9_7_, manualurlb0_.output_s3_key as output10_7_, manualurlb0_.processed_url_count as processed11_7_, manualurlb0_.s3_bucket as s12_7_, manualurlb0_.status as status7_, manualurlb0_.submitted_url_count as …
Run Code Online (Sandbox Code Playgroud)

junit dbunit aggregate-functions hsqldb

3
推荐指数
1
解决办法
4612
查看次数

使用hibernate获取具有实体属性值的物理列值

我有一个表T,其中列通常定义.

@Entity
@Table(name="T")
public class T {
@Column(name="test_id")
private Long testId;

}
Run Code Online (Sandbox Code Playgroud)

给定实体属性"testId",我想获得相应的DB列名称(即"test_id").怎么可能实现?

编辑1: 我希望将此列保留在与testId相比具有实际DB列名(test_id)的单独位置.我使用HQL从DB获取这些值,它具有键作为实体名称(即testId),我想在DB中使用实际的列名.

java sql hibernate

3
推荐指数
1
解决办法
8540
查看次数

Propagation.REQUIRES_NEW 导致 LockWaitTimeOutException

有两个函数 A 和 B 用事务注释定义。

我从 A 呼叫 B。

@Transactional(value=Constants.READ_WRITE_REQUEST)
public int A(....){
    B();
}

@Transactional(propagation=Propagation.REQUIRES_NEW,value=Constants.READ_WRITE_REQUEST)
public int B(....){
     C();        
}

@Transactional(value=Constants.READ_WRITE_REQUEST)
public int C(....){
    ...
}
Run Code Online (Sandbox Code Playgroud)

它导致了

Caused by: java.sql.SQLException: Lock wait timeout exceeded; try restarting transaction

    at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1055)

    at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:956)

    at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3491)

    at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3423)

    at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:1936)

    at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:2060)

    at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2542)
Run Code Online (Sandbox Code Playgroud)

我从函数 B 中删除了 Propagation.REQUIRES_NEW,问题得到了解决。

是因为旧事务持有锁而创建了新事务吗?对此有何想法?

java spring transactions

2
推荐指数
1
解决办法
5195
查看次数

更清洁的方式来获得原型的自动装配字段的新实例

我遇到了这个问题,同时尝试自动装配一个可运行的类,并在不同的调用中创建它的不同实例并将其保存在一个数组中.

xml配置是:

<bean name="threadName" Class="ABC" scope="prototype" />
Run Code Online (Sandbox Code Playgroud)

在我的代码中,我正在尝试这样的事情:

public class ThreadHandler{


@Autowired
private ABC threadName;

//getter
ABC getThreadName(){
     return threadName;
}

public void someFunction(){
     List<ABC> abc = new ArrayList(ABC>();
     for (int i=0;i<SOME_CONST;i++){
          ABC tName = getThreadName();
          abc.add(tName);
          tName.start();
      }
}   
Run Code Online (Sandbox Code Playgroud)

}

让我们ABC成为一个班级Thread/Runnable/Callable.

通过这种方式,它会抛出java.lang.IllegalThreadStateException.但是,如果我使用它,它的工作正常ABC tName =appContext.getBean("threadName",ABC.class);

为什么会这样?

在尝试从getMethod获取对象时,我们不会获得新实例吗?

java spring autowired illegalstateexception

2
推荐指数
1
解决办法
1万
查看次数

从URL中删除十六进制字符

请处理这个琐碎的问题.

我得到一些"SOME_DOMAIN?q\x3dnintendo+mathe\x26um\x3d1\x26ie\x3dUTF-8\x26tbm\x3dshop\x26cid\x3d8123694338777545283\x26sa\x3dX\x26ei\x3dL8cjUJmHO8L30gGa1ICgCw\x26ved\x3d0CI4BEIIIMAk"包含一些转义字符的URL .

删除这些十六进制字符的最佳方法是什么?我有这个下面的片段,它解决了我现在的问题,但看起来不是一个可靠的解决方案.

    url = url.replace("\\x2F","/");
    url = url.replace("\\x26","&");
    url = url.replace("\\x3d","=");
    url = url.replace("\\x2F","/");
    url = url.replace("\\x2F","/");
Run Code Online (Sandbox Code Playgroud)

我没有遇到过这个问题,但URL之间可能会出现空格.应该URLDecoder.decode解决我的问题?

好心劝告.

谢谢

java url url-encoding

2
推荐指数
1
解决办法
2447
查看次数

使用@Component 提供属性名称/值

请处理这个基本问题。

我曾经使用 @Autowired 注释,其中可以使用该类的键/值格式为属性(类变量)赋予一个值。

<bean id="class" class="a.b.c.Class" lazy-init="true">
        <property name="var1" value="${var1}" />
</bean>
Run Code Online (Sandbox Code Playgroud)

我将 Class 更改为带有不需要自动装配的组件扫描选项的 @Component 。我现在如何添加属性变量?

另外,我不想在编写 Junit 时遇到麻烦。

谢谢,

java spring components autowired

2
推荐指数
1
解决办法
2648
查看次数

使用IN子句优化Oracle查询

我在参数中使用两个查询,并在其中填充了PreparedStatementusing setLongsetStringoperation。

查询1

SELECT A, B FROM TABLE1 WHERE A in  (SELECT A FROM TABLE2 WHERE C in (?,?,?) )
Run Code Online (Sandbox Code Playgroud)

查询2

SELECT A, B FROM TABLE1 WHERE A in (?,?)
Run Code Online (Sandbox Code Playgroud)

有人告诉我它为每个可能的设置大小创建一个唯一的查询,并污染了Oracle的SQL缓存。另外,由于大小不固定,oracle可以为每个查询选择不同的执行计划。

可以应用哪些优化来使其更好?

如果我创建大小为50的子句列表并使用伪/冗余变量填充其余的列表,那会好吗?

如果我没看错,那么除非将其提取出来并再次用作语句列表,否则很难优化条款中的选择语句。

java sql oracle query-optimization

2
推荐指数
1
解决办法
888
查看次数

无法获取运行perl脚本所需的Google API密钥和GoogleSearch.Wsdl

如果这是微不足道的道歉.

我试图运行此代码 - http://oreilly.com/pub/h/974#code从Yahoo!获取URL 目录.

我无法获得谷歌API基本密钥,并在网上发现它不再需要了.

我也需要google.wsdl,并在Google的API常见问题解答(http://code.google.com/apis/soapsearch/api_faq.html#tech4)上找到它可以从http://api.google.com/上获取GoogleSearch.wsdl正在抛出404错误.

它也不是必需的吗?如果是,那么只需通过减少参数数量来改变方法调用就可以了吗?

有没有人对这个问题有任何想法?

yahoo perl wsdl google-api

1
推荐指数
1
解决办法
7523
查看次数

从大文件中删除重复项

我们有大量数据,我们想对它们执行一些操作。删除重复项是主要操作之一。

前任。

a,me,123,2631272164
yrw,wq,1237,123712,126128361
yrw,dsfswq,1323237,12xcvcx3712,1sd26128361
Run Code Online (Sandbox Code Playgroud)

这是文件中的三个条目,我们希望在第一列的基础上删除重复项。因此,应删除第 3 行。每行可能有不同数量的列,但我们感兴趣的列将始终存在。

在内存中操作看起来不可行。

另一种选择是将数据存储在数据库中并从中删除重复项,但这也不是一项简单的任务。我应该遵循什么设计将数据转储到数据库并删除重复项?

我假设人们一定遇到过这样的问题并解决了它。

我们通常如何解决这个问题呢?

PS:请将此视为现实生活问题而不是面试问题;)

algorithm file-io large-files

1
推荐指数
1
解决办法
2712
查看次数

数据集成失败,出现错误"Uncaught TypeError:Object [object Object]没有方法'dataTable'"

我想将DataTables用于表格的各种功能.我无法解决这个问题.

我的代码是:

<script type="text/javascript" src="<%=Constants.JSROOTURL%>jquery-1.7.1.min.js"></script>
<script type="text/javascript" src="js/jquery.dataTables.js"></script>
<script type="text/javascript" src="//ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js"></script>
<script type="text/javascript" src="//datatables.net/download/build/jquery.dataTables.nightly.js"></script>

<script type="text/javascript">
    var jq = jQuery.noConflict();
    jq(document).ready( function(){
        jq("#results").dataTable();
    });
</script>
Run Code Online (Sandbox Code Playgroud)

错误说:

Uncaught TypeError: Object [object Object] has no method 'dataTable' imageValidation.html:234
(anonymous function) imageValidation.html:234
n jquery.min.js:2
o.fireWith jquery.min.js:2
e.extend.ready jquery.min.js:2
c.addEventListener.B
Run Code Online (Sandbox Code Playgroud)

任何的意见都将会有帮助.

datatable jquery jquery-ui

0
推荐指数
1
解决办法
8487
查看次数