我正在研究的Java项目使用了代码分析工具的组合:PMD,Checkstyle和FindBugs.这些可以解决大量的错误,风格问题等,但是经常会漏网:
public class AbstractBadlyNamedClass { // Not abstract!
// ...
}
Run Code Online (Sandbox Code Playgroud)
注倒过来的检查,即public abstract BadlyNamedClass给出了PMD警告"抽象类应命名为AbstractXXX".
任何人都可以建议是否有办法检查这一点,或者使用上述工具之一(可能是某种自定义规则?)或其他自动化工具来完成这项工作?
在MySQL中,以下声明有效:
mysql>insert into emp1(empno,empname,empsal,empcity) values (100,'vinay',10000,'USA');**
mysql> select * from emp1;
+-------+---------+--------+---------+
| empno | empname | empsal | empcity |
+-------+---------+--------+---------+
| 100 | vinay | 10000 | USA |
+-------+---------+--------+---------+
Run Code Online (Sandbox Code Playgroud)
在Oracle中,以下声明有效:
mysql> insert into emp1 values(&empno,'&empname',&empsal,'&empcity');**
Run Code Online (Sandbox Code Playgroud)
但是这在MySQL中不起作用 - 为什么不能将这些值放在前面&呢?
我正在开发一个应用程序,其中在属性文件中定义了一些配置值,其值或有效范围在某种程度上取决于存储在数据库中的数据.
这似乎是错误的,原因有几个,但是我很难找到这个名字,或者确实发表任何可能暗示这是不好的做法的文章.有人可以建议吗?
我在下面的SQL语句执行时看不到前导/尾随空格psql:
select name from my_table;
Run Code Online (Sandbox Code Playgroud)
是否有务实的方式来查看前导/尾随空格?
@echo on并且在批处理文件中@echo off的括号内if块中执行时似乎没有任何影响.这是一个简单的演示:
@echo off
echo Test #1
if 1 == 1 (
@echo on
echo Test #2
@echo off
echo Test #3
)
@echo on
echo Test #4
Run Code Online (Sandbox Code Playgroud)
在命令行上运行上面的输出是:
测试#1
测试#2
测试#3
C:\ mybatchfilelocation> echo测试#4
测试#4
任何人都可以解释这个和/或建议一个解决方法吗?(期望它可能通过大量使用goto和标签来修复,但如果可能的话,我更愿意继续使用括号格式...)
我的应用程序(Spring 4 MVC/Hibernate 4/MySQL/Maven)使用基于注释的配置将Spring与Hibernate集成在一起.几个小时后它没有使用数据库我总是看到这个错误:
com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: The last packet successfully received from the server was 84,510,841 milliseconds ago. The last packet sent successfully to the server was 84,510,841 milliseconds ago. is longer than the server configured value of 'wait_timeout'. You should consider either expiring and/or testing connection validity before use in your application, increasing the server configured values for client timeouts, or using the Connector/J connection property 'autoReconnect=true' to avoid this problem.
sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:57)
sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
java.lang.reflect.Constructor.newInstance(Constructor.java:526)
com.mysql.jdbc.Util.handleNewInstance(Util.java:411)
com.mysql.jdbc.SQLError.createCommunicationsException(SQLError.java:1121)
com.mysql.jdbc.MysqlIO.send(MysqlIO.java:3938)
com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:2551) …Run Code Online (Sandbox Code Playgroud) 我有一个自定义验证器,用于确保在保存实体之前应用某些业务规则.
例如(假设的),当ProductPrice保存下面定义的时,我验证给定产品的fromDate和endDate(由productId标识)与ProductPriceDB中该产品的现有行没有重叠.
@MyCustomValidator
class ProductPrice {
Long productId;
Date fromDate;
Date toDate;
}
Run Code Online (Sandbox Code Playgroud)
只要将其ProductPrice保存为单个实体,这样就可以正常工作.一旦该实体作为一对多关系添加到另一个实体中,如下所示,
class Product {
List<ProductPrice> productPrices;
}
Run Code Online (Sandbox Code Playgroud)
更新父(Product)实体(为了保存它工作正常),以及子实体(List中的一个或多个ProductPrice)中的一些更改,然后它失败,因为保存List中的一个ProductPrice实例不知道接下来要保存的ProductPrice的任何信息.
详细说明:
假设数据库中有两ProducePrice行给定Product,如下所示:
Id Product Id From Date To Date Price
1 PRD-001 01-01-2016 10-06-106 29.99
2 PRD-001 11-06-2016 10-12-106 32.99
Run Code Online (Sandbox Code Playgroud)
假设我想将rows(ProductPrice)作为Product实体的一部分更新为以下值:
Id Product Id From Date To Date Price
1 PRD-001 01-01-2016 30-06-106 29.99
2 PRD-001 01-07-2016 31-12-106 32.99
Run Code Online (Sandbox Code Playgroud)
以上数据仍然有效,但hibernate验证器将失败.这是因为节省了第一排的时候,如果我查询数据库来检查fromDate和toDate现有行,然后将与第2行现有的数据库中的重叠.但这不正确,因为第二行也将用有效值更新.也可能是,表中有3行,我在当前事务中只更新其中的2行,第3行未触及.因此,我必须在验证器中查询数据库以检查有效性.
问题太长了,我可能不清楚解释问题.但总而言之,是否有可能查询当前的持久化上下文并获取脏的数据(即将保存)?
java validation hibernate hibernate-validator bean-validation
假设我有一个表“day_attribute_type”
id bigint(20) AI PK
code varchar(255)
persist_date bigint(20)
update_date bigint(20)
active bit(1)
max int(11)
min int(11)
name varchar(255)
Run Code Online (Sandbox Code Playgroud)
如果我在结果网格中添加一个新行并按“应用”按钮,我将得到以下查询:
INSERT INTO `tl2`.`day_attribute_type` (`persist_date`, `update_date`, `active`, `max`, `min`, `name`)
VALUES ('1', '2', b'1', b'12', b'12', b'text');
Run Code Online (Sandbox Code Playgroud)
看起来 Workbench 不仅将“b”放在位字段之前,而且还放在其他一些字段之前。后期编辑查询并删除有问题的东西真的很烦人。
MySQL WorkBench 8.0.16 x64、Windows 10 MYSQL 社区服务器 8.8.12
我已经更新 MySQL Workbench 一年了,这个讨厌的错误仍然出现......我什至重新安装了我的 Windows。
看起来没有人会修复它。这里提到了。请有人尝试在 Linux/Max 上重现此错误并确认您是否有此错误。
编辑:这个问题只涉及Java 1.6(及以下).抱歉没有在原帖中说清楚.
这里的层次结构显示Java Exception分为两种类型:RuntimeException而不是RuntimeException:
我可能会错过一些东西,但不会更好地分成类似的东西UncheckedException而CheckedException不是吗?例如,以下语句具有相当多的已检查异常:
try {
transaction.commit();
} catch (SecurityException e) {
} catch (IllegalStateException e) {
} catch (RollbackException e) {
} catch (HeuristicMixedException e) {
} catch (HeuristicRollbackException e) {
} catch (SystemException e) {
}
Run Code Online (Sandbox Code Playgroud)
我只是真的对它是成功还是失败感兴趣所以想要将已检查的异常作为一个组来处理,而不是未经检查的异常,因为捕获意外错误不是好的做法.所以考虑到这一点,也许我可以这样做:
try {
transaction.commit();
} catch (Exception e) {
if (e instanceof RuntimeException) {
// Throw unchecked exception
throw e;
}
// Handle checked exception
// ...
}
Run Code Online (Sandbox Code Playgroud)
但这看起来非常糟糕.有没有更好的办法?
java exception try-catch runtimeexception checked-exceptions
java ×5
mysql ×4
database ×2
sql ×2
batch-file ×1
checkstyle ×1
cmd ×1
dom ×1
domxpath ×1
echo ×1
eclipse ×1
evaluate ×1
exception ×1
hibernate ×1
jdbc ×1
maven ×1
oracle ×1
php ×1
pmd ×1
postgresql ×1
properties ×1
psql ×1
rdbms ×1
spring ×1
sql-insert ×1
try-catch ×1
validation ×1
whitespace ×1
windows ×1
xpath ×1