在MySQL中,我们可能要在引号里面使用引号。比如我们想要插入这样一行数据:作者是邵发老师,出版社是 '新华’出版社
注意’新华’出版社的’新华’被引号包裹
如果你这样写SQL语句会报错
insert into book values('邵发老师',''新华'出版社')
这是因为’号在SQL语句中有特殊意义,所以它不能被看做普通的字符串来处理。除了引号外,百分号也是如此
既然引号等其他符号有特殊意义,不能看做普通字符串处理。那我们就用转义的方法,让我们的编译器把引号等这些有特殊意义的符号,强制转换为字符串来看待
常见转义符号
特殊符号 | 转义字符 |
---|---|
’ | ’ |
‘’ | ’’ |
% | %% |
好了那上面的INSERT语句应该这样写
插入作者:邵发老师 出版社:‘新华’出版社的图书记录
insert into book values('邵发老师',''新华'出版社')
JDBC框架也可以实现我们的转义,因为一般情况下一些查询是用户输入的,那么很可能用户输入的时候就带有转义字符,那么这个时候你就不能确保这些是否转义过了,如果没有转义的话,就会报错
我恩师的JDBC框架可以轻松实现转义功能,只需要调用一个函数就可以实现。这里面有JDBC框架下载地址:JDBC框架
复制mysql文件夹到src文件夹下即可使用
想了解JDBC框架的,请看我写的一篇博客:JDBC框架应用
在操作数据库之前,我们要有一个数据库
这里是SQL语句备份的数据库,大家运行下就有这个数据库了
/*
SQLyog Ultimate v11.24 (32 bit)
MySQL - 5.6.39 : Database - af_school
*********************************************************************
*//*!40101 SET NAMES utf8 */;/*!40101 SET SQL_MODE=''*/;/*!40014 SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */;
/*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */;
/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */;
/*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */;
CREATE DATABASE /*!32312 IF NOT EXISTS*/`af_school` /*!40100 DEFAULT CHARACTER SET utf8 */;USE `af_school`;/*Table structure for table `admin` */DROP TABLE IF EXISTS `admin`;CREATE TABLE `admin` (`username` varchar(32) DEFAULT NULL,`password` varchar(32) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;/*Data for the table `admin` */insert into `admin`(`username`,`password`) values ('shaofa','123456');/*Table structure for table `book` */DROP TABLE IF EXISTS `book`;CREATE TABLE `book` (`author` varchar(32) DEFAULT NULL,`title` varchar(100) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;/*Data for the table `book` *//*Table structure for table `exam` */DROP TABLE IF EXISTS `exam`;CREATE TABLE `exam` (`id` int(11) NOT NULL COMMENT '学号',`chinese` int(11) DEFAULT NULL COMMENT '语文成绩',`english` int(11) DEFAULT NULL COMMENT '英语成绩',`math` int(11) DEFAULT NULL COMMENT '数学成线',PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;/*Data for the table `exam` */insert into `exam`(`id`,`chinese`,`english`,`math`) values (20180001,89,90,98),(20180002,78,82,93),(20180003,90,73,95),(20180004,88,98,83),(20180005,96,79,75),(20180006,77,98,82);/*Table structure for table `leave_event` */DROP TABLE IF EXISTS `leave_event`;CREATE TABLE `leave_event` (`id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '请假记录ID',`stuId` int(11) NOT NULL COMMENT '学生ID',`daysFrom` date DEFAULT NULL COMMENT '哪天开始',`daysTo` date DEFAULT NULL COMMENT '哪天结束',`type` tinyint(4) DEFAULT NULL COMMENT '类型,0病假,1事假',`reason` varchar(256) DEFAULT NULL COMMENT '事由',PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=8 DEFAULT CHARSET=utf8;/*Data for the table `leave_event` */insert into `leave_event`(`id`,`stuId`,`daysFrom`,`daysTo`,`type`,`reason`) values (1,20180001,'2018-01-02','2018-01-03',0,'感冒'),(2,20180001,'2018-03-06','2018-03-08',0,'发烧'),(3,20180003,'2018-03-01','2018-03-07',1,'出国旅游'),(4,20180005,'2018-03-07','2018-03-07',1,'家里有事'),(5,20180003,'2018-03-17','2018-03-18',0,'不舒服'),(7,20190001,'2019-07-05','2019-07-10',1,'休息');/*Table structure for table `student` */DROP TABLE IF EXISTS `student`;CREATE TABLE `student` (`id` int(11) NOT NULL COMMENT '学号',`name` varchar(32) NOT NULL COMMENT '姓名',`sex` tinyint(1) DEFAULT NULL COMMENT '性别',`phone` varchar(16) DEFAULT '13800000000' COMMENT '手机号',`birthday` date DEFAULT NULL COMMENT '生日',PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;/*Data for the table `student` */insert into `student`(`id`,`name`,`sex`,`phone`,`birthday`) values (20180001,'盖聂',1,'1409900089','1982-03-09'),(20180002,'卫庄',1,'1282399999','1993-10-01'),(20180003,'张良',NULL,NULL,'1996-03-11'),(20180004,'伏念',1,NULL,'1982-09-24'),(20180005,'颜路',1,'13699292899','1983-11-21'),(20180006,'赤练',0,'13819289890','1998-03-12'),(20180007,'端木蓉',0,'13800000000','1978-05-12'),(20180008,'盗跖',1,'13410012908','1993-09-10'),(20180009,'白凤',1,'13509890090','1994-04-20'),(20180010,'天明',1,'18799891829','2002-04-19'),(20180011,'月儿',0,'13882938990','2003-06-10');/*!40101 SET SQL_MODE=@OLD_SQL_MODE */;
/*!40014 SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS */;
/*!40014 SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS */;
/*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */;
JDBC框架- - - 实现转义
这里面写了3个测试函数
package my;import mysql.AfSql;
import mysql.AfSqlConnection;
import mysql.AfSqlContext;
import mysql.util.AfSqlInsert;public class Test
{//测试转义函数public static void testEscape(){AfSqlContext ctx = Instance(AfSql.MYSQL);String value = "美丽'人'生";value = ctx.escape(value);System.out.println("转义后: " + value);}//使用转义Insert语句public static void testInsert() throws Exception{// 连接MySQL服务器AfSqlConnection conn = new AfSqlConnection(AfSql.MYSQL);t("127.0.0.1", 3306, "af_school", "root", "");// 简化SQL语句,用api实现inset语句功能AfSqlInsert asi = new AfSqlInsert("book");asi.add2("author", "邵发");asi.add2("title", "谁与争'风'");String sql = String();System.out.println(sql);ute( sql);conn.close();System.out.println("关闭连接!");}// 测试JDBC框架直接插入对象技术(并转义)public static void testInsertPOJO() throws Exception{// 连接MySQL服务器AfSqlConnection conn = new AfSqlConnection(AfSql.MYSQL);t("127.0.0.1", 3306, "af_school", "root", "");Book row = new Book();row.setAuthor("小张");row.setTitle("非常好'零基础'的入门教程");conn.insert( row );conn.close();System.out.println("关闭连接!");}public static void main(String[] args){ try{testEscape();} catch (Exception e){// TODO Auto-generated catch blocke.printStackTrace();}}}
本文发布于:2024-02-01 10:45:48,感谢您对本站的认可!
本文链接:https://www.4u4v.net/it/170675555236073.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
留言与评论(共有 0 条评论) |