1、如何通过JDBC访问数据库
jdbc:java数据库连接,jdbc定义了一套操作所有关系型数据库的接口(规则),通过jdbc访问数据库一般有以下步骤:
(1)加载jdbc驱动器,通俗jdbc的jar包,maven项目导一个依赖即可
(2)加载jdbc驱动,并将其注册到DriverManager中,一般使用反射:Class.forName(String driver)
(3)建立数据库连接,取得Connection对象;一般通过DriverManger.getConnection(url,username,password)方法实现,url代表连接数据库的地址,username表示连接数据库的用户名,password表示连接数据库的密码
(4)建立statement对象或是PreparedStatement对象,一般使用使用connection对象创建
(5)执行Sql语句
(6)访问结果集对象ResultSet对象
(7)依次将ResultSet、statement、preparedstatement、connection关闭,释放掉所占用资源,为什么这样做?原因在于Jdbc驱动在底层通常是通过网络IO实现SQL命令与数据传输。
2、Jdbc事务
1、事务的概念 (1)事务:一个包含多个步骤的业务操作,如果这个业务操作被事务管理,则这多个步骤要么同时成功,要么同时失败。使用connection对象来管理事务,操作事务的一般步骤:
a、开启事务;使用setAutoCommit(boolean autoCommit):调用该方法设置参数为false,即可开启事务,记住一定要在sql执行之前开启事务
b、提交事务:commit()在所有代码执行完毕后,调用commit方法,提交事务
c、回滚事务:在出现异常时,可以使用rollback方法进行回滚事务
2、事务的四大特征 a、原子性:最小的操作单位,要么同时成功,要么同时失败
b、持久性:当事务提交或者回滚后,数据控会持久化保存数据
c、隔离性:多个事务之间,相互独立
d、一致性:事务操作前后,数据总量不变
3、jdbc有哪些隔离级别 隔离级别:多个事务之间是隔离的、相互独立的。但是多个事务操作一批数据(多个线程请求相同数据),则会引发一些问题,设置不同的隔离级别,可以解决这些问题: a、存在脏读:一个事务读取到另一个事务中没有提交的数据
b、不可重复读(虚读):在同一个事务中,两次读取到的数据不一样
c、幻读:一个事务操作(DML)数据表中所有记录,另一个事务添加了一条数据,则第一个事务查询不到自己的修改
4、隔离级别 a、read uncommitted :读未提交,会产生的问题:脏读、不可重复读、幻读
b、read committed:读已提交:产生问题:不可重复读,幻读
c、repeattable read:可重复读,产生问题:幻读(mysql默认)
d、serializable:串行化,可以解决所有问题
注意:隔离级别越高安全性越大,但是效率越来越低
3、如何避免sql注入
(1)prepareedStatement
(2)使用正则表达式过滤传入的参数
(3)字符串过滤
(4)检查是否包含非法字符、页面判断码
4、数据库的三大范式是什么
第一范式:属性不可分 第二范式:非主属性完全依赖候选码 第三范式:满足第一范式,没有部分传递依赖
5、char和Varchar的区别是什么
(1)char的长度是不可变的,而varchar的长度是可变的
例如:定义一个char[10]和varchar[10],如果存进去“abcd”,那么char所占的长度依然为10,除了“adbc”,后面还跟着6个空格,而varchar的长度立马会变为4
(2)char的存取速度比varchar要快得多,因为它的长度是固定的,方便程序的存储和查找,但是char也为此付出的是空间的代价
(3)char的存储方式是对英文符(ASCLL)占用1个字节,对一个汉字占用两个字节,而varcahr的存储方式是,对每一个英文字符占用2个字节,汉字也占用2个字节
6、MySQL的内连接、左连接、右连接有什么区别
内连接显示两个表中有联系的所有数据;左连接以左表为参照显示所有数据;右连接以右表为参照,显示所有数据。
7、说一下数据库的事务隔离
读未提交、读已提交、可重复度、可串行
8、说一下MySql常用的引擎
在mysql数据裤子,常用的引擎主要就是2个:Innodb和MyIASM
9、如何做MySQl的性能优化
(1)MySql数据表字段要选取合适的字段属性
(2)使用连接Join来代替字查询
(3)使用联合Union来代替手动创建临时表
(4)使用事务机制来完成需要多个SQl操作数据处理,保证数据的完整性和安全访问
(5)使用外接来优化关联表的性能,外键可以用来保证数据的关联性
(6)使用索引提高MySQ数据库的性能,索引时提高数据库性能的常用方法,它可以令数据库服务器以比没有索引快得多的速度检索特定的行,尤其是在查询语句中包含MAX(),MIN()和order by这些命令的时候,性能提高更为明显。 (7)通过优化查询语句提高查询速度。
什么是MYSQL主从复与读写分离
MySql主从复制就是一个异步的复制过程,底层是基于MySql数据库自带的二进制日志功能,就是一台或者多台MYSQl数据库(即是从库)从另一台MYsql数据库(即主库)进行日志的复制然后再解析日志并应用到自身,最终实现从库的数据和主库的数据保持一致,mysql主从复制是MYSQL数据库自带的功能,无需借助第三方工具。
MYSQl复制过程分三步:
主库将改变记录到二进制日志(binary log)
从库将主库的binary log拷贝到它的中继日志(relay log)
从库重做中继日志中的事件,将改变应用到自己的数据库中
注意 :主库负责处理事务性的增删改查操作,从库负责处理查询操作。主从复制、读写分离就是为了数据库能支持更大的并发。