java中PreparedStatement解决需转义字符向数据库中插入时的转义问题
2011-11-04 06:39
417 查看
简单的执行如下语句去做数据库的插入操作是有问题的!它处理不了单引号,双引号等需要转义的字符的插入问题!
String sql = "insert into emailOriginal(id,date,subject,source,target" +
") value(\""
+ vo.getId() + "\",\""
+ vo.getDate()+"\",\""
+ vo.getSubject()+"\",\""
+ vo.getSource()+"\",\""
+ vo.getTarget()+"\");";
。。。
pstmt = dbc.getConnection().prepareStatement(sql);
。。。
pstmt.execute(sql);
会有如下错误:
com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException:
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'notional" stuff
经过查找发现是插入“nation”时,双引号没有经过转义!
现在修改成使用PreparedStatement,用?预处理查询条件,会避免上述简单的字符串拼接造成的转义问题。
可以插入如下的记录了:
+------+------+--------+--------+----------+
| id | date | source | target | subject |
+------+------+--------+--------+----------+
| id | date | source | target | "subject |
| id | date | source | target | 'subject |
+------+------+--------+--------+----------+
String sql = "insert into emailOriginal(id,date,subject,source,target" +
") value(\""
+ vo.getId() + "\",\""
+ vo.getDate()+"\",\""
+ vo.getSubject()+"\",\""
+ vo.getSource()+"\",\""
+ vo.getTarget()+"\");";
。。。
pstmt = dbc.getConnection().prepareStatement(sql);
。。。
pstmt.execute(sql);
会有如下错误:
com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException:
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'notional" stuff
经过查找发现是插入“nation”时,双引号没有经过转义!
现在修改成使用PreparedStatement,用?预处理查询条件,会避免上述简单的字符串拼接造成的转义问题。
String sql = "insert into emailOriginal(id,date,subject,source,target" + ") value(?,?,?,?,?);"; PreparedStatement pstmt = null; try { pstmt = dbc.getConnection().prepareStatement(sql); pstmt.setString(1, vo.getId()); pstmt.setString(2, vo.getDate()); pstmt.setString(3, vo.getSubject()); pstmt.setString(4, vo.getSource()); pstmt.setString(5, vo.getTarget()); pstmt.execute(); //pstmt.execute(sql); pstmt.close(); } catch (Exception e) { e.printStackTrace(); }其中的
pstmt.setString(1, vo.getId());会帮助字符串转义。
可以插入如下的记录了:
+------+------+--------+--------+----------+
| id | date | source | target | subject |
+------+------+--------+--------+----------+
| id | date | source | target | "subject |
| id | date | source | target | 'subject |
+------+------+--------+--------+----------+
相关文章推荐
- JAVA学习提高之----解决插入数据库时遇到的引号问题
- java向数据库中插入数据,数据库乱码问题解决
- 在JAVA向Mysql的数据库中插入数据过大所遇到的问题
- Java访问数据库的速度瓶颈问题的分析及解决
- CurrentCulture and UICulture解决关于全球的的日期格式都能插入数据库和一些如果¥,$的正确显示问题...
- Java访问数据库的速度瓶颈问题的分析及解决
- 解决Struts插入数据库中文乱码问题
- java格式化字符串,在指定位置插入指定字符串,兼容中英文以及特殊字符,例如:换行,用于解决生成pdf换行问题等问题
- Java访问数据库的速度瓶颈问题的分析及解决
- asp.net关于TextBox.Text的值为空时,将string数据插入到数据库中int数据的问题的解决方法
- Java访问数据库速度瓶颈问题分析解决
- SQL server触发器、存储过程操作远程数据库插入数据,解决服务器已存在的问题
- Spring、Hibernate 数据不能插入到数据库问题解决
- Java_通过PreparedStatement往MySql数据库插入中文出现'?'乱码问题解决;
- Java 插入数据库问题
- Java解决取数据时“因数据库中 字符串含空格 而取值不成功”的问题
- 关于java中向数据库中插入数据时,报错Caused by: java.lang.NullPointerException的问题
- 启用事务操作,解决批量插入或更新sqlite,mssql等数据库耗时问题
- 如何解决使用Java Entity不能插入自增列的问题
- Java与数据库SQLSserver2005的连接问题解决