- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
如果我理解(并测试示例 JDBC 代码;使用 Jaybird for Firebird),即使使用正确的(= 尊重类型映射)更新方法(例如 ResultSet.updateString
),或者也许 PreparedStatement
参数,也可能带来“转换异常” ”。
在实际使用结果集(例如运行更新程序方法)之前是否可以(并且这是一个好的做法)测试实际的 Java 类型/值是否可以安全地转换为目标 SQL 数据类型?
“问题”只是单向吗? IE。当从SQL转换回Java时(使用getter方法),是否保证正确的getter方法永远不会失败(由于转换问题)?
我的示例(使用 Jaybird 3.0.2、JDK1.8):
NUMERIC(9,2)
。对应的更新器是: ResultSet.updateBigDecimal(int columnIndex, BigDecimal x)
。如果我使用 x = new BigDecimal("123456789.1234")
(更大的精度和规模),我(逻辑上)会得到一个异常:线程“main”org.firebirdsql.jdbc.field.TypeConversionException中出现异常:转换为大十进制时出错。VARCHAR(5)
。相应的更新程序是: ResultSet.updateString(int columnIndex, String x)
。如果我使用 x = "123456"
(较长的字符串 6 > 5),我(逻辑上)会得到一个异常:线程“main”java.sql.DataTruncation 中的异常:数据截断。除了尝试运行查询并捕获异常之外,是否有一些通用的优雅方法(不取决于特定类型)如何检查实际的 Java 值/对象是否可以“保存”到某些 SQL 字段?
我想检查数据编辑对话框中已有的值(在实际运行更新查询之前)。简单的测试“VALUE OK/NOT OK”就可以了(只知道目标 SQL 类型)。
对我来说,找到所有必须“逐个类型”检查的规则(即 VARCHAR 检查字符串长度、NUMERIC 检查精度和小数位数等)似乎相当困难 - 但还有什么?或者这就足够了吗?对于整数和浮点类型不需要检查任何东西?)。
我尝试查看 Jaybird 源代码,但“转换过程”非常复杂(并且特定于类型),我自己找不到答案。
最佳答案
在实际设置值之前,JDBC 不提供任何内容来“检查”值,因此 Jaybird 也不提供:设置值就是检查。确切的行为取决于驱动程序,Jaybird 尝试验证设置值,但其他驱动程序可能会选择将其推迟到数据库本身(因此错误只会在执行时发生)。
通常,您会根据业务需求设计数据库并选择列类型,这自然会在您尝试将其放入数据库之前进行验证。
如果您到目前为止还没有这样做,请开始通过限制长度、使用 Hibernate Validator 之类的东西或 UI 框架的验证来向您的输入表单添加验证。
如果您正在处理高度动态的需求(例如用户提供的查询等),那么您应该使用 JDBC 提供的功能来创建您自己的验证:ParameterMetaData
准备好的声明和 ResultSetMetaData
结果集(也可以从准备好的语句访问),特别是这些对象的 getPrecision
(和 getScale
),甚至可能是 DatabaseMetadata.getColumns
之类的东西.
对于字符类型,getPrecision
将指示最大字符数,对于 numeric
或 decimal
类型,您可以使用最大数量小数点之前的数字作为精度 - 小数位
。
但是在 Jaybird 中,这并不是 100% 准确,例如,如果 Jaybird 无法识别底层,getPrecision
可能会为 numeric(8,2)
返回 9列,Jaybird(和 Firebird)实际上允许精度高达 10,但有一些限制(即 Integer.MAX_VALUE
的未缩放最大值,即该类型的 21474836.47)。
关于第二个问题,使用 getter 是否会导致转换异常:正常情况不会,但例如在值较大的 BIGINT
上调用 getInt()
比 Integer.MAX_VALUE
或 Integer.MIN_VALUE
会。
关于Java JDBC 类型转换(Firebird/Jaybird): check value/type compatibility before using getter or updater ResultSet method?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47329576/
我正在尝试将一个字符串逐个字符地复制到另一个字符串中。目的不是复制整个字符串,而是复制其中的一部分(我稍后会为此做一些条件......) 但我不知道如何使用迭代器。 你能帮帮我吗? std::stri
我想将 void 指针转换为结构引用。 结构的最小示例: #include "Interface.h" class Foo { public: Foo() : mAddress((uint
这有点烦人:我有一个 div,它从窗口的左上角开始过渡,即使它位于文档的其他任何位置。我试过 usign -webkit-transform-origin 但没有成功,也许我用错了。有人可以帮助我吗?
假设,如果将 CSS3 转换/转换/动画分配给 DOM 元素,我是否可以检测到该过程的状态? 我想这样做的原因是因为我正在寻找类似过渡链的东西,例如,在前一个过渡之后运行一个过渡。 最佳答案 我在 h
最近我遇到了“不稳定”屏幕,这很可能是由 CSS 转换引起的。事实上,它只发生在 Chrome 浏览器 上(可能还有 Safari,因为一些人也报告了它)。知道如何让它看起来光滑吗?此外,您可能会注意
我正在开发一个简单的 slider ,它使用 CSS 过渡来为幻灯片设置动画。我用一些基本样式和一些 javascript 创建了一支笔 here .注意:由于 Codepen 使用 Prefixfr
我正在使用以下代码返回 IList: public IList FindCodesByCountry(string country) { var query =
如何设计像这样的操作: 计算 转化 翻译 例如:从“EUR”转换为“CNY”金额“100”。 这是 /convert?from=EUR&to=CNY&amount=100 RESTful 吗? 最佳答
我使用 jquery 组合了一个图像滚动器,如下所示 function rotateImages(whichHolder, start) { var images = $('#' +which
如何使用 CSS (-moz-transform) 更改一个如下所示的 div: 最佳答案 你可以看看Mozilla Developer Center .甚至还有例子。 但是,在我看来,您的具体示例不
我需要帮助我正在尝试在选中和未选中的汉堡菜单上实现动画。我能够为菜单设置动画,但我不知道如何在转换为 0 时为左菜单动画设置动画 &__menu { transform: translateX(
我正在为字典格式之间的转换而苦苦挣扎:我正在尝试将下面的项目数组转换为下面的结果数组。本质上是通过在项目第一个元素中查找重复项,然后仅在第一个参数不同时才将文件添加到结果集中。 var items:[
如果我有两个定义相同的结构,那么在它们之间进行转换的最佳方式是什么? struct A { int i; float f; }; struct B { int i; float f; }; void
我编写了一个 javascript 代码,可以将视口(viewport)从一个链接滑动到另一个链接。基本上一切正常,你怎么能在那里看到http://jsfiddle.net/DruwJ/8/ 我现在的
我需要将文件上传到 meteor ,对其进行一些图像处理(必要时进行图像转换,从图像生成缩略图),然后将其存储在外部图像存储服务器(s3)中。这应该尽可能快。 您对 nodejs 图像处理库有什么建议
刚开始接触KDB+,有一些问题很难从Q for Mortals中得到。 说,这里 http://code.kx.com/wiki/JB:QforMortals2/casting_and_enumera
我在这里的一个项目中使用 JSF 1.2 和 IceFaces 1.8。 我有一个页面,它基本上是一大堆浮点数字段的大编辑网格。这是通过 inputText 实现的页面上的字段指向具有原始值的值对象
ScnMatrix4 是一个 4x4 矩阵。我的问题是什么矩阵行对应于位置(ScnVector3),旋转(ScnVector4),比例(ScnVector3)。第 4 行是空的吗? 编辑: 我玩弄了
恐怕我是 Scala 新手: 我正在尝试根据一些简单的逻辑将 Map 转换为新 Map: val postVals = Map("test" -> "testing1", "test2" -> "te
输入: This is sample 1 This is sample 2 输出: ~COLOR~[Green]This is sample 1~COLOR~[Red]This is sam
我是一名优秀的程序员,十分优秀!