java resultset getstring()_java resultset.getstring(“ col_name”)查询

小编典典

JDBC驱动程序不会在中转义ResultSet。如果这样做的话将是非常糟糕的。看这个简单的例子:

数据库表x确实包含一列value。有两行:一行有两个字符串('\'和'n'),一行有一个字符串(换行符)。我已经在输出中添加了字符串长度以进行澄清。

select *, length(value) from x;

value | length

-------+--------

\n | 2

+| 1

|

该表是使用JDBC读取的:

Connection db = DriverManager.getConnection( /* these parameters are up to you */ );

Statement st = db.createStatement();

ResultSet rs = st.executeQuery("select value, length(value) from x");

while(rs.next()){

String value = rs.getString(1);

int length = rs.getInt(2);

System.out.println("length="+length+", value='"+value+"'");

}

您会看到:到目前为止,在代码中的任何位置都没有显式转义。输出为:

length=2, value='\n'

length=1, value='

'

您会看到:仍然没有逃脱-无论是代码还是JDBC。

如果混用Java文字,事情会变得有些模糊:如果执行以下操作:

st.execute("insert into x values ('\n')");

然后猜猜发生了什么事?您又排了 一个 字符!

length=2, value='\n'

length=1, value='

'

length=1, value='

'

这是因为Java 编译器 将两个字符’\ n’转换为一个换行符。因此,JDBC驱动程序和数据库只能看到一个字符。

但是,如果您将阅读一些userinput并且用户将进行键入\,n然后没有人会转义此行,则该行将包含两个字符。

下一步

您说,您使用进行了明确的转义StringEscapeUtils。然后会发生这种情况:

具有一个字符的行将不更改地从DB传递到屏幕。

具有两个字符的行将变为StringEscapeUtils包含一个字符的字符串。之后,这两行对您来说都一样。

摘要

不要将编译器的String-Literal转义与JDBC的转义混淆(这不会发生)。

不要添加不必要的转义层。

2020-11-19

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值