栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

java resultset.getstring(“ col_name”)查询

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

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(  );    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的转义混淆(这不会发生)。

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



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/391269.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号