报告错误的正常位置是 http://bugs.mysql.com/,这是我们的错误数据库的地址。这个数据库是公开的,任何人都可以浏览和搜索。如果您登录系统,您还可以输入新报告。
如果您在 MySQL 服务器中发现敏感的安全漏洞,请立即发送电子邮件至 告知我们
。例外:支持客户应将所有问题(包括安全漏洞)报告给 Oracle 支持,网址为http://support.oracle.com/。
<secalert_us@oracle.com>
编写一份好的错误报告需要耐心,但一次就把它做好可以为我们和你自己节省时间。一个好的错误报告,包含错误的完整测试用例,使我们很可能会尽快修复。
本节将帮助您正确撰写报告,以免浪费时间做对我们没有太大帮助或根本没有帮助的事情。
如果您有可重复的错误报告,请将其报告给位于http://bugs.mysql.com/的错误数据库。我们能够重复的任何错误都有很高的机会尽快修复。
要报告其他问题,您可以使用 MySQL 邮件列表之一。
请记住,我们可能会回应包含过多信息的消息,但不会回应包含太少信息的消息。人们经常忽略事实,因为他们认为自己知道问题的原因,并认为一些细节无关紧要。
一个好的原则是:如果您对陈述某事有疑问,请陈述。如果我们必须要求您提供初始报告中缺失的信息,那么在您的报告中多写几行比等待更长的时间等待答复更快、更省事。
错误报告中最常见的错误是 (a) 不包括所使用的 Connector/J 或 MySQL 的版本号,以及 (b) 没有完整描述安装 Connector/J 的平台(包括 JVM 版本和平台) MySQL 本身所安装的类型和版本号)。
这是高度相关的信息,在 100 例中有 99 例,错误报告没有它就毫无用处。我们经常会收到这样的问题,“为什么这对我不起作用?” 然后我们发现请求的功能在那个 MySQL 版本中没有实现,或者报告中描述的错误已经在较新的 MySQL 版本中得到修复。
有时错误是平台相关的;在这种情况下,我们几乎不可能在不知道操作系统和平台版本号的情况下修复任何东西。
如果可能的话,创建一个不涉及任何第三方类的可重复的独立测试用例。
为了简化这个过程,我们为带有 Connector/J 的测试用例提供了一个基类,名为“ com.mysql.cj.jdbc.util.BaseBugReport
”。要使用此类为 Connector/J 创建测试用例,请创建您自己的类,该类继承
com.mysql.cj.jdbc.util.BaseBugReport
并覆盖方法setUp()
,
tearDown()
和
runTest()
。
在该setUp()
方法中,创建用于创建表的代码,并使用演示错误所需的任何数据填充它们。
在该runTest()
方法中,使用您在该方法中创建的表和数据创建演示错误的代码setUp
。
在该tearDown()
方法中,删除您在该setUp()
方法中创建的所有表。
在上述三种方法中的任何一种中,使用该getConnection()
方法的一种变体来创建到 MySQL 的 JDBC 连接:
getConnection()
- 提供到中指定的 JDBC URL 的连接getUrl()
。如果连接已经存在,则返回该连接,否则创建新连接。getNewConnection()
- 如果您需要为您的错误报告获取一个新连接(即,涉及多个连接),请使用此选项。getConnection(String url)
- 返回使用给定 URL 的连接。getConnection(String url, Properties props)
- 使用给定的 URL 和属性返回连接。
如果您需要使用不同于“jdbc:mysql:///test”的 JDBC URL,也请覆盖该方法
getUrl()
。
使用assertTrue(boolean expression)
和
assertTrue(String failureMessage, boolean
expression)
方法创建测试用例中必须满足的条件,以证明您期望的行为(相对于您观察到的行为,这就是您最有可能提交错误报告的原因)。
最后,创建一个main()
创建测试用例新实例的方法,并调用该
run
方法:
public static void main(String[] args) throws Exception {
new MyBugReport().run();
}
一旦你完成了你的测试用例,并验证它展示了你报告的错误,将它与你的错误报告一起上传到http://bugs.mysql.com/。