数据库的单表查询,熟悉SQL语句

回顾MYSQL

回顾JDBC

今日学习目标:

使用SQL语句完成单表的增删改查

使用JDBC通过java代码完成单表的增删改查

创建数据库:create 数据库名;

删除数据库:drop database 数据库名;

查看数据库:show databases;

创建数据库并进行设置编码格式:create database 数据库名 character set gbk;

显示数据库结构:show create database 数据库名;

使用库:use 数据库名;

查看当前正在操作的库:select database();

二:对数据库表的操作

创建表语句:

 create table user(
    uid int(32) primary key auto_increment,
    uname varchar(32),
    upassword varchar(32)
    );

查询表:show tables;

查看表结构:desc 表名;

删除表:drop table 表名;

修改表:

1.添加一列:alter table 表名 add 字段名 类型(长度) [约束]

2.修改列的类型(长度、约束)

alter table 表名 modify 要修改的字段名 类型(长度) [约束]

3.修改列的名字:

alter table 表名 change 旧列名 新列名类型(长度)、[约束]

4.删除表的列

alter table 表名 drop 列名

.

5.修改表名:

rename table 表名 to 新表名; 

6.修改表的字符集:

alter table 表名 character set 编码:

查看当前表的编码:show create table user_tb;

三、对数据库中表记录的操作_插入和修改操作:

插入语法:

insert into 表名(列1,列2,列3...) values (值1,值2,值3...)--向表中插入某些列

insert into 表名 values(值1,值2,值3...)--向表中插入所有列

注意:1.参数和值前后长度保持一致 2.值如果是字符串和时间,则加上单引号。

 注意:出现乱码时,在MySQL配置文件my.ini中修改下列属性

方式一:

[mysql]
57 行:default-character-set=gbk

方式二:set names gbk;

更新语法:

update 表名 set 字段名=值,字段名=值 ...;(它会将该列的所有值改变)

update 表名 set 字段名=值,字段名=值 ... where 条件;(只会修改条件满足的那一列)

删除语法:

delete from 表名 [where  条件];

面试题:删除表中所有记录使用delete from 表名;还是用truncate table 表名;

删除方式:

delete 一条一条删除,不清空auto_increment记录数(自动递增:主键)

注意:删除后不会重置id。

不带条件删除(全部删除):

truncate 直接将表删除,重新建一样的表,auto_increment 将置为零,从新开始:

事务方面:

delete 删除的数据,如果在一个事务中可以找回。

truncate 删除的数据找不回来。

查询语法:

select [distinct] *  |  列名1,列名2 ... from 表 [where 条件];

1.查询所有商品使用表别名:

语法:select * from product as p;(as可以省略)

2.查询商品名,使用列别名:

语法:select pname as name from product;(as可以省略)

3.去掉重复值(按照名字)

select distinct(pname )from product;

4.将所有商品价格+10进行显示

select pname,price+10 from product;

5.查询名字中含有‘士’字的商品信息:(模糊查询:like语句中,%代表零个或多个任意字符,_代表一个字符)

6.查询id是3,6,9的商品:

7.查询名字含有士字并且price小于100:(and:多个条件并列查询)

8.or的使用:(或查询)

9.聚合函数:

9.1:获取所有商品价格总和:

9.2:获取所有商品的平均价格:

9.3:获取所有商品个数:

10.排序:

10.1:查询所有的商品,按价格进行排序:(升序:asc   降序:desc)

10.2:查询商品名称有“士”的商品信息,并且按照价格降序排列:(order by 要放在where条件之后)

11:分组

11.1:添加分类id:用来进行分组使用;

11.2:分组:先将所有数据初始化为1:

再将需要分组区分的重新按条件查询并设置为2:

然后根据需求查询需要的组:

11.3:分组查询商品个数:(可用来查询当前系统教师,学生,超级管理员的个数)

13.4:根据cid分组,分组统计每组商品的平均价格,并且平均大于20000元;

查询(顺序)总结:

select  *| 字段...  ()一般在的后面的内容都是要查询的内容

from   表

where  查询条件

group by 分组字段(注:分组后带有条件,只能使用having)

      having分组条件

order by 排序字段  asc|desc(升|降) (注:该字段必须放在最后)

JDBC:Java DataBase Connectivity:java数据库连接,SUN公司推出的java访问数据库的标准规范(接口)。

JDBC开发步骤:

1.注册驱动  2.获得连接  3.获得语句执行者  4.执行SQL语句  5.处理结果

  数据库驱动:class.forName("com.mysql.jdbc.Driver");
  数据库连接:Connection con = DriverManager.getConnetion("jdbc:mysql://localhost:3306/mydb1","root","1107");
  扩展参数:jdbc:mysql://localhost:3306/mydb1?useUnicode=true&characterEncoding=UTF8
  useUnicode参数:指定这个连接数据库的过程中,使用的字节集是Unicode字节集;
  characterEncoding参数:指定Java程序连接数据库的过程中,使用的字节集编码为UTF-8编码,注意:mysql指定UTF-8编码是
  给出的是UTF-8,而不是UTF8;

3.获得执行语句

String sql = “insert into user(id,password) values (null,'123')”;

Statement 语句执行者 :Statement stmt = con.createStatement();

防止使用‘or’关键字,攻击服务器:

       

        // 4.创建预处理对象
        PreparedStatement pstmt = conn.prepareStatement(sql);
        // 5.设置参数(给占位符)
        pstmt.setString(1, username);
        pstmt.setString(2, password);
        // 6.执行查询操作
        ResultSet rs = pstmt.executeQuery();

int executeUpdate(String sql); -- 执行 inert update delete 语句   (DML语句)

ResultSet executeQuery(String sql); --执行select语句  (DQL语句)

boolean execute(String sql);--执行select返回true 执行其他的语句返回false,

ResultSet实际上是一张二维的表格,它内部有一个“行光标”,光标默认位置在"第一行的上方",这里可以调用rs的对象的next()方法把“行光标”向下移动一行,当第一次调用next()方法时,“行光标”就到了第一行记录的位置,这是就可以使用ResultSet提供的getXXX(int col)方法来获取指定的列的数据了。

rs.next();   rs.getInt(1);//此时getXXX,XXX根据数据类型改变。

释放资源:关闭顺序(先得到的后关闭,后得到的先关闭)

rs.close();    stmt.close();  con.close();

核心代码:

package cn.itheima.test;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import org.junit.Test;

public class TestLogin {
	@Test
	public void testLogin() {
		try {
			String username = "老王";
			String password = "456";
			login(username, password);
		} catch (Exception e) {
			e.printStackTrace();
		}
	}

	public void login(String username, String password) throws ClassNotFoundException, SQLException {
		// 1.注册驱动
		Class.forName("com.mysql.jdbc.Driver");
		// 2.获取连接
		Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/web08?useUnicode=true&characterEncoding=UTF8", "root", "1107");
		// 3.创建执行sql语句的对象:注意:除了Driver是jdbc下面的包,其他都是sql中的包
		Statement stmt = conn.createStatement();
		// 4.书写一个sql语句
		String sql = "select uname,upwd from user where " + "uname ='" + username + "' and upwd='" + password + "'";
		// 5.执行sql语句
		ResultSet rs = stmt.executeQuery(sql);
		// 6.对结果集进行处理
		if (rs.next()) {
			System.out.println("登录成功!");
			System.out.println("用户名:" + username + "密码:" + password);
			System.out.println(sql);
		} else {
			System.out.println("查无此人!");
		}
		if (rs != null) {
			rs.close();
		}
		if (stmt != null) {
			stmt.close();
		}
		if (conn != null) {
			conn.close();
		}

	}

public void login1(String username, String password) throws ClassNotFoundException, SQLException {
		// 1.注册驱动
		Class.forName("com.mysql.jdbc.Driver");
		// 2.获取连接
		Connection conn = DriverManager.getConnection(
				"jdbc:mysql://localhost:3306/web08?useUnicode=true&characterEncoding=UTF8", "root", "1107");
		// 3.先编写sql语句
		String sql = "select * from user where uname = ? and upwd=?";
		// 4.创建预处理对象
		PreparedStatement pstmt = conn.prepareStatement(sql);
		// 5.设置参数(给占位符)
		pstmt.setString(1, username);
		pstmt.setString(2, password);
		// 6.执行查询操作
		ResultSet rs = pstmt.executeQuery();
		// 7.对结果集进行处理
		if (rs.next()) {
			System.out.println("登录成功!");
			System.out.println("用户名:" + username + "密码:" + password);
			System.out.println(sql);
		} else {
			System.out.println("查无此人!");
		}
		if (rs != null) {
			rs.close();
		}
		if (pstmt != null) {
			pstmt.close();
		}
		if (conn != null) {
			conn.close();
		}

	}
}

分页查询关键字limit(2,2)第一个参数为起始位置,第二个参数表示每页显示的数据数量。

起始位置计算:(要查询第几页-1)*第二个参数 = 起始位置。

每页显示三条记录,查询第三页数据:如下:

猜你喜欢

转载自blog.csdn.net/qq_35508162/article/details/82344152