网上说的都不是太清楚,想自己试一下,但现在正在准备面试呢。
高手求解。
高手求解。
解决方案 »
- 请教一个关于线程的问题
- javafx1.2中如何用mysql
- 看了好多帖子说J2SE学完后学J2EE,想知道大家说的J2EE具体是什么?
- java.sql.Date 和java.util.Date 怎么互相转换?
- 我想将自己定义的时间+到数据库中怎么+?
- 十万火急!!!求教高手们一个问题.
- 如何得到当前时间后一段时间
- JEditorPane显示jsp文件在linux服务器下出错
- 求助,谁有五子棋java源代码?帮个忙,以一千分送之。
- 为什么我的屏幕闪得这么厉害???根本停不下来啊!
- 使用Java Socket实现广域网通信
- Exception in Thread "main " java.lang.NullPointerException 运行出错哪位大神帮忙解决下
/* */ throws SQLException
/* */ {
/* 3206 */ if (x == null) {
/* 3207 */ setNull(parameterIndex, 1);
/* */ } else {
/* 3209 */ checkClosed();
/* */
/* 3211 */ int stringLength = x.length();
/* */
/* 3213 */ if (this.connection.isNoBackslashEscapesSet())
/* */ {
/* 3216 */ boolean needsHexEscape = false;
/* */
/* 3218 */ for (int i = 0; i < stringLength; ++i) {
/* 3219 */ char c = x.charAt(i);
/* */
/* 3221 */ switch (c)
/* */ {
/* */ case '\0':
/* 3224 */ needsHexEscape = true;
/* 3225 */ break;
/* */ case '\n':
/* 3228 */ needsHexEscape = true;
/* */
/* 3230 */ break;
/* */ case '\r':
/* 3233 */ needsHexEscape = true;
/* 3234 */ break;
/* */ case '\\':
/* 3237 */ needsHexEscape = true;
/* */
/* 3239 */ break;
/* */ case '\'':
/* 3242 */ needsHexEscape = true;
/* */
/* 3244 */ break;
/* */ case '"':
/* 3247 */ needsHexEscape = true;
/* */
/* 3249 */ break;
/* */ case '\26':
/* 3252 */ needsHexEscape = true;
/* */ }
/* */
/* 3256 */ if (needsHexEscape)
/* */ {
/* */ break;
/* */ }
/* */
/* */ }
/* */
/* 3263 */ if (!(needsHexEscape)) {
/* 3264 */ byte[] parameterAsBytes = null;
/* */
/* 3266 */ StringBuffer quotedString = new StringBuffer(x.length() + 2);
/* 3267 */ quotedString.append('\'');
/* 3268 */ quotedString.append(x);
/* 3269 */ quotedString.append('\'');
/* */
/* 3271 */ if (!(this.isLoadDataQuery)) {
/* 3272 */ parameterAsBytes = StringUtils.getBytes(quotedString.toString(), this.charConverter, this.charEncoding, this.connection.getServerCharacterEncoding(), this.connection.parserKnowsUnicode());
/* */ }
/* */ else
/* */ {
/* 3278 */ parameterAsBytes = quotedString.toString().getBytes();
/* */ }
/* */
/* 3281 */ setInternal(parameterIndex, parameterAsBytes);
/* */ } else {
/* 3283 */ byte[] parameterAsBytes = null;
/* */
/* 3285 */ if (!(this.isLoadDataQuery)) {
/* 3286 */ parameterAsBytes = StringUtils.getBytes(x, this.charConverter, this.charEncoding, this.connection.getServerCharacterEncoding(), this.connection.parserKnowsUnicode());
/* */ }
/* */ else
/* */ {
/* 3292 */ parameterAsBytes = x.getBytes();
/* */ }
/* */
/* 3295 */ setBytes(parameterIndex, parameterAsBytes);
/* */ }
/* */
/* 3298 */ return;
/* */ }
/* */
/* 3301 */ StringBuffer buf = new StringBuffer((int)(x.length() * 1.1D));
/* 3302 */ buf.append('\'');
/* */
/* 3311 */ for (int i = 0; i < stringLength; ++i) {
/* 3312 */ char c = x.charAt(i);
/* */
/* 3314 */ switch (c)
/* */ {
/* */ case '\0':
/* 3316 */ buf.append('\\');
/* 3317 */ buf.append('0');
/* */
/* 3319 */ break;
/* */ case '\n':
/* 3322 */ buf.append('\\');
/* 3323 */ buf.append('n');
/* */
/* 3325 */ break;
/* */ case '\r':
/* 3328 */ buf.append('\\');
/* 3329 */ buf.append('r');
/* */
/* 3331 */ break;
/* */ case '\\':
/* 3334 */ buf.append('\\');
/* 3335 */ buf.append('\\');
/* */
/* 3337 */ break;
/* */ case '\'':
/* 3340 */ buf.append('\\');
/* 3341 */ buf.append('\'');
/* */
/* 3343 */ break;
/* */ case '"':
/* 3346 */ if (this.usingAnsiMode) {
/* 3347 */ buf.append('\\');
/* */ }
/* */
/* 3350 */ buf.append('"');
/* */
/* 3352 */ break;
/* */ case '\26':
/* 3355 */ buf.append('\\');
/* 3356 */ buf.append('Z');
/* */
/* 3358 */ break;
/* */ default:
/* 3361 */ buf.append(c);
/* */ }
/* */ }
/* */
/* 3365 */ buf.append('\'');
/* */
/* 3367 */ String parameterAsString = buf.toString();
/* */
/* 3369 */ byte[] parameterAsBytes = null;
/* */
/* 3371 */ if (!(this.isLoadDataQuery)) {
/* 3372 */ parameterAsBytes = StringUtils.getBytes(parameterAsString, this.charConverter, this.charEncoding, this.connection.getServerCharacterEncoding(), this.connection.parserKnowsUnicode());
/* */ }
/* */ else
/* */ {
/* 3378 */ parameterAsBytes = parameterAsString.getBytes();
/* */ }
/* */
/* 3381 */ setInternal(parameterIndex, parameterAsBytes);
/* */ }
/* */ }
这是mysql的实现,它会把所有的数据库关键字,连接符之类的特殊字符转义掉
我的问题是,preparestatement内部如何防止参数里面的这种特殊字符呢?
会抛出什么异常呢?
preparestatement是个接口,具体都是数据库厂家实现的,上面那段代码就是mysql的实现。不手动过滤特殊字符,还能怎么样?