在正常的运行SQL语句是需要分为检查和提交,检查就是检查SQL语句的书写是否正确,而提交就是把SQL语句提交运行,然后出结果。一般SQL语句都是自动提交,所以不关闭一般在快速运行中不h会被轻易辨认出来,而关闭自动提交的事务为conn.setAuto Commit(false);还有一个是事务回滚,在代码运行过程中出现错误可以用事务回滚回到上一级,回滚为conn.rollback();最后一个事务为提交事务,在各项工作通过之后加入提交后才会出现结果,代码为conn.commit();
事务有四大特性,他们分别是:
①原子性
事务是一个整体,无法分割,只能一起成功或者失败。
②一致性
事务执行之前和之后都必须处于一种一致的状态。
③隔离性
多事务并发时,互相独立,互不影响。
④持久性
数据库数据若不变更,会永久不变。
约束,MySQL的约束是数据库用来确保数据满足业务规则的手段,对数据做的条件限制。
约束的类型:
1、主键约束(PRIMAR YKEY);
2、唯一约束(UNIQUE);
3、非空约束(NOT NULL);
4、检查约束(CHECK);
5、外键约束(FOREIGN KEY);
注意主键约束,是不为空且唯一,每个表只会有一个约束并且会主动加入索引,唯一约束就是让这一列不能重复,非空约束就是这列不能为空,检查约束可用来实施一些简单的规则,比如列值必须在某个范围内。检查的规则必须是一个结果为true或false 的表达式检查约束可用来实施一些简单的规则,比如列值必须在某个范围内。
多表查询:多表查询意思是将多个数据表链接在一起,在一起展现,需要注意的是,多表查询需要两个表有主外键关系,方法如下:
select 表1 . 列1 , 表1 . 列2 , 表1 . 列2 , 表2 , 列2 where 表1 left join 表2 on 表1 . 列2=表2 , 列2;
注意:表1的列1为主键,而表2的列1为外键,所以两个表能够联表查询。
俩目标查询的关键词有 :left join ,right join 这两个为最常用的两个常用词
JDBC:JDBC就是一个起到链接作用的接口,可以打通Java与MySQL两个平台的交互,因为JDBC的存在,两个各立的平台能够数据互通,JDBC的代码的形式,主要是有MVC架构、MySQL驱动、链接文件组成。
MVC分层模型,如下:
jdbc.properties 为存储驱动与MySQL用户名、密码、地址的地方。如下图
Util包内的内容如下:
package com.nz.Util;
import java.io.InputStream;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.Properties;
public class MySQLDriverUtil {
//外层定义全局类变量,以便使用
public static final Properties pro = new Properties();
//静态代码块,只执行一次类加载
static{
//将配置文件转为输入流
InputStream is = MySQLDriverUtil.class.getResourceAsStream("/jdbc.properties");
try {
//加载配置文件
pro.load(is);
is.close();
//类加载驱动
Class.forName(pro.getProperty("driver"));
} catch (Exception e) {
e.printStackTrace();
}
}
//1.在全局创建一个静态的ThreadLocal的对象 全局线程栈
private static ThreadLocal<Connection> tl = new ThreadLocal<Connection>();
//对本机建立jdbc链接
public static Connection getConnect(){
//2.先从ThreadLocal中获取当前线程上绑定的Connection对象
Connection conn = tl.get();
try {
//3.判断数据库连接对象是否为null
if(conn == null){ //4.如果为null 创建一个新的数据库连接
conn = DriverManager.getConnection(pro.getProperty("url"), pro.getProperty("username"),
pro.getProperty("password"));
//5.将新的数据库连接存储到ThreadLocal对象中
tl.set(conn);
}
} catch (Exception e) {
e.printStackTrace();
}
return conn;
}
//关闭连接流,并清空全局线程栈
public static void flowClose(Connection con){
try {
con.close();
tl.remove();
} catch (SQLException e) {
e.printStackTrace();
}
}
//关闭update流
public static void flowClose(Connection con, PreparedStatement ps){
try {
con.close();
ps.close();
tl.remove();
} catch (SQLException e) {
e.printStackTrace();
}
}
//关闭select流,并销毁全局线程栈
public static void flowClose(Connection con, PreparedStatement ps,ResultSet rs){
try {
con.close();
ps.close();
rs.close();
tl.remove();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
以上便是多表查询与jdbc的内容。