视图
视图,一种虚拟的表,可以将SQL查询结果缓存存入视图中
优点:优化了SQL的编写
缺点:会占用更多的空间,不可做SQL优化
视图的创建
创建emp_view视图
-- 以下视图将会被缓存至视图中(SELECT * FROM emp WHERE ename LIKE '%a%');
视图的使用
-- 使用试图SELECT * FROM emp_view
直接查询视图,视图是一张虚拟的特殊表,最好只进行查询操作
SQL优化
尽量使用字段名代替*
做表设计时,字段的类型最好是varchar代替char
字段里的值,最好用数字代替字符串
尽量把过滤条件精细,能用and不用or
索引的设计,最多5个,不能太多
模糊查询,尽量要确定开始元素,让索引生效
数据库对数字没有严格的要求,name=123索引失效,name=’123’索引生效
无用的索引最好及时删除
JDBC数据库连接
准备
准备对应数据库版本的连接jar包,下载后进行导入
地址:https://dev.mysql.com/downloads/connector/j/
步骤
- 注册驱动
Class.forName("com.mysql.jdbc.Driver");//适用于mysql5.x版本Class.forName("com.mysql.cj.jdbc.Driver");//适用于mysql8.x版本
- 创建连接
使用DriverManager.getConnection()方法来创建一个Connection对象,它代表一个数据库的物理连接,//协议名 //IP地址:端口号 //库名 //字符集 //时区String url = "jdbc:mysql://localhost:3306/cgb2106?characterEncoding=utf8";Connection c = DriverManager.getConnection(url, "root", "root");//三个参数分别为链接地址,用户名,密码
- 获取传输器
需要使用一个类型为Statement或PreparedStatement的对象,并提交一个SQL语句到数据库执行查询。Statement s = c.createStatement();
- 进行查询
执行SQL—-executeQuery()执行查询的SQLResultSet r = s.executeQuery("select * from dept");
若要执行一个SQL语句:UPDATE,INSERT或DELETE语句,那么需要下面的代码片段:
stmt = conn.createStatement();String sql;sql = "DELETE FROM Employees";ResultSet rs = stmt.executeUpdate(sql);
- 处理结果集
next()方法判断当前行有无数据,有数据就返回truewhile (r.next()){String a = r.getString(1);//获取第一列的数据String b = r.getString(2);//获取第二列的数据String d = r.getString(3);//获取第三列的数据// String dname = r.getString("dname");// String deptno = r.getString("deptno");// String loc = r.getString("loc");//获取指定字段的值// System.out.println("deptno:" + deptno + ",dname:" + dname + ",loc:" + loc);System.out.println(a + b + d);}
- 清理环境资源
r.close();//关闭结果集s.close();//关闭传输器c.close();//关闭连接
示例代码
package cn.tedu.jdbc;import java.sql.Connection;import java.sql.DriverManager;import java.sql.ResultSet;import java.sql.Statement;public class TestJDBC {public static void main(String[] args) throws Exception {//1.注册驱动 Driver.classClass.forName("com.mysql.jdbc.Driver");//2.获取连接(用户名、密码、端口号、库名)//协议名 //IP地址:端口号 //库名String url = "jdbc:mysql://localhost:3306/cgb2106?characterEncoding=utf8";Connection c = DriverManager.getConnection(url, "root", "root");//3.获取传输器Statement s = c.createStatement();//4.执行SQL---executeQuery()执行查询的SQLResultSet r = s.executeQuery("select * from dept");/*5.处理结果集next()方法判断当前行有无数据,有数据就返回true*/while (r.next()){String a = r.getString(1);//获取第一列的数据String b = r.getString(2);//获取第二列的数据String d = r.getString(3);//获取第三列的数据// String dname = r.getString("dname");// String deptno = r.getString("deptno");// String loc = r.getString("loc");//获取指定字段的值// System.out.println("deptno:" + deptno + ",dname:" + dname + ",loc:" + loc);System.out.println(a + b + d);}//6.释放资源r.close();//关闭结果集s.close();//关闭传输器c.close();//关闭连接}}
