SQL语法基础:
Structured Query language:结构化查询语言。通常与数据库的通信,是关系型数据库的一种标准语言。
SQL的分类:
DML:数据操作语言
DDL:数据定义语言
DCL:数据库控制语言
TCL:事务控制语言
Oracle11G/12C:
MYSQL: 小型关系型数据库。体积小,速度快,开发成本低,源码开发
常用命令:
Show databases查看所有数据库
Create database name; 创建数据库
数据类型:
int 整型 默认11位
varchar: 字符串
date 日期 2019-08-12
datatime: 全时间 2019-08-12 11:45:55
float 单精度浮点类型
double 双精度浮点类型
创建表的语法:
CREATE table stu(
s_id int,
s_name varchar(30),
s-sex varchar(2)
);
表名不与系统定义的名称冲突
每行字段(列)结尾都以英文逗号未结束
//查看表
Select *from stu;
Select id name,sex from stu;
//表增加一列
Alter table 表名
Add column 列名(字段名)数据类型
Alter table stu
Add column saddr varchar(200)
//表删除一列
Alter table stu
Drop column saddr
//修改列的属性
Alter table 表名
Change column 原列名 修改后列名 数据类型
主键约束:
能够确保按照主键的列找到唯一的一行(要求:不能为空,且内容唯一)
Drop database 数据库名 //删除库
Drop table 表名 //删除表结构
Delete from 表名 //删除表数据
//修改数据
Update 表名 set 列名/字段名 = 修改后的值 或 “修改后的字符串”
Update 表名 set 列名/字段名 =“” where id/ = “ “ //where 后边为条件
//起别名
Select 原名称 as 新名称,
去冗余
Select distinct (表项名 ) from 表名
Like 模糊查询
% :代表零个或多个
_ : 代表一个
Select *from stu3 where name like “%小%”
“_%小” 第二位是‘’小‘’ 字的
Limit m,n: 从第m个数据查,查询n条
Select * from stu3 where sage = 28 limit 2,2
//排序
Select * from stu3 Order by age (默认升序排列)+(desc)(倒序)
Select name from stu3 group by sname having sage >select avg(sage)
统计函数
Count sum max min
主外键有联系时先创建主表后创建从表 从表字段关联主表的字段,删除时先删除从表后删除主表
连接查询:
内连接:select * from tableName1,tableName2 where tableName1.field = tableName.field
例子:
SELECT * FROM stu3 ,lesson,course WHERE stu3.sid = lesson.lsid and course.cid = lesson.lcid
外连接(左外/右外)
数据库:
1 保存数据
2 管理数据(增删改查)
JDBC: java 数据库连接技术
1 加载驱动
2 获取链接
3 进行操作
4 关闭链接
package JDBC_Test;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.sql.Statement;
/**
* 测试驱动类
*/
public class test_jdbc {
public static void main(String[] args) {
Connection conn = null;
try {
//加载驱动类
Class.forName("com.mysql.cj.jdbc.Driver");
conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/test?serverTimezone=UTC","root","19990908");
//建立连接(内部包含Socket对象,是一个远程单连接,较为耗时)
//真正开发中为提高效率会用连接池来管理连接对象
//测试statement
Statement stm = conn.createStatement();
// String sql = "insert into user(name ) values ('leikuan')";
// stm.execute(sql);
//测试SQL注入 避免使用statement
String sql = "delete from user where id = 2";
stm.execute(sql);
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (SQLException e) {
e.printStackTrace();
}finally {
if(conn!=null){
try {
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
}
}
package JDBC_Test;
import com.mysql.cj.protocol.Resultset;
import java.sql.*;
//关闭顺序 (分开写)resultset-->PreparedStatement-->Connection
public class ResultSet_test {
public static void main(String[] args) {
Connection conn = null;
PreparedStatement pst =null;
ResultSet rs = null;
try {
//加载驱动类
Class.forName("com.mysql.cj.jdbc.Driver");
conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/test?serverTimezone=UTC","root","19990908");
String sql = "insert into user(id,name ) values (?,?)";// ? -->占位符
String sql = "select * from user where id>?";
pst = conn.prepareStatement(sql);
pst.setObject(1,2);
rs = pst.executeQuery();
while (rs.next()){
System.out.println(rs.getInt(1)+" "+rs.getString(2));
}
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (SQLException e) {
e.printStackTrace();
}finally {
if(rs!=null){
try {
rs.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
if(pst!=null){
try {
pst.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
if(conn!=null){
try {
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
}
}
package JDBC_Test;
import java.sql.*;
import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
public class TestDatetime {
public static long str2date (String dateStr){
DateFormat format = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
try {
return format.parse(dateStr).getTime();
} catch (ParseException e) {
return 0;
}
}
public static void main(String[] args) throws SQLException {
PreparedStatement ps = null;
Connection conn = null;
Statement stmt = null;
ResultSet rs = null;
try {
Class.forName("com.mysql.cj.jdbc.Driver");
conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/test?serverTimezone=UTC", "root", "19990908");
ps = conn.prepareStatement("select * from user1 where date >?and date <?");
java.sql.Date start = new java.sql.Date(str2date("2019-8-4 10:26:33"));
java.sql.Date end = new java.sql.Date(str2date("2019-8-11 10:26:33"));
ps.setObject(1,start);
ps.setObject(2,end);
rs = ps.executeQuery();
while (rs.next()){
System.out.println(rs.getInt("id")+"-->"+rs.getString("name")+"--"+rs.getDate("date"));
}
package JDBC_Test;
import java.sql.*;
//批量操作。
public class batch_test {
public static void main(String[] args) {
Connection conn = null;
Statement stmt =null;
ResultSet rs = null;
try {
//加载驱动类
Class.forName("com.mysql.cj.jdbc.Driver");
conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/school?serverTimezone=UTC","root","19990908");
String sql = "select * from stu";
stmt = conn.createStatement();
conn.setAutoCommit(false);
long start= System.currentTimeMillis();
stmt = conn.createStatement();
for (int i = 9;i<20000;i++){
stmt.addBatch("insert into user (id,name) values ("+i+",'lei"+i+"')");
}
stmt.executeBatch();
long end = System.currentTimeMillis();
conn.commit();//提交事务
System.out.println("耗时"+(end-start)+"ms");
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (SQLException e) {
e.printStackTrace();
}finally {
if(stmt!=null){
try {
stmt.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
if(conn!=null){
try {
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
}
}