MySQL&JDBC回顾

 

1.创建一个库

    create database 库名;

    create database 库名 character set 编码;

创建带有编码的:

查看编码:

2、删除一个库

Drop database 库名;

3、使用数据库

use 库名;

4、查看当前正在操作的库

select database();

1、创建一张表

create table 表名(

     字段名 类型(长度)[约束],

     字段名 类型(长度)[约束],

     字段名 类型(长度)[约束]

);

 

2、查看数据库表

 创建完成后,我们可以查看数据库表

show tables;

 

查看表的结构

desc 表名;

3.删除一张表

drop table 表名;

4、修改表

4.1 添加一列

alter table 表名 add 字段名 类型(长度) [约束];

 

4.2 修改列的类型(长度 约束)

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

4.3 修改列的列名

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

4.4 删除表的列

alter table 表名 drop 列名;

4.5 修改表名

rename table 表名 to 新表名;

4.6 修改表的字符集

alter table 表名 character set 编码;

查看当前表的编码

 三、对数据库表记录进行操作(修改)

1.插入记录

Insert into 表名(列名1,列名2,列名3....) value(值1,值2,值3.....);

insert into 表名 values(值1,值2,值3.....)

插入数据中文乱码问题解决办法

直接修改数据库安装目录里面的my.ini文件的第57行

方式一:【不建议!

直接修改数据库安装目录里面的my.ini文件的第57

 

方式二:

set names gbk;

2.修改表记录

2.1 不带条件的

update 表名 set 字段名=, 字段名=, 字段名=……

2.2 带条件的

update 表名 set字段名=, 字段名=, 字段名=…… where 条件

3.删除表记录

3.1 带条件的

delete from 表名 where 条件

注意,删除后,uid不会重置!

 

3.2.不带条件的

先准备数据

insert into tbl_user values(null,’老王’,’666’);

 

删除操作

delete from 表名;

 

 

 

3.3 面试题

说说deletetruncate的区别?

delete删除的时候是一条一条的删除记录,它配合事务,可以将删除的数据找回。

truncate删除,它是将整个表摧毁,然后再创建一张一模一样的表。它删除的数据无法找回。

 

Delete操作演示:

 

 

Truncate操作演示:

注意:delete删除,uid不会重置!而使用truncate操作,uid会重置

 

4.查询操作

 

 

语法:

 

select [distinct] *| 列名,列名 from 表名 [where条件]

 

4.1 简单查询

 

1.查询所有商品

 

select * from product

2. 查询商品名和商品价格

select pname,price from product;

3.查询所有商品信息使用表别名

select * from product as p;

4.查询商品名,使用列别名

select pname as p from product;(as可省略)

 

 

5.去掉重复值(按照价格)

select distinct(price) from product;

先准备数据:

insert into product values (null,'李士雪',38,null);

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

select pname,price+10 from product;

4.2 条件查询

1.查询商品名称为"左慈"的商品信息

2.查询价格>60元的所有商品信息

3.查询商品名称含有""字的商品信息

4.查询商品id(3,6,9)范围内的所有商品信息

5.查询商品名称含有""字并且id6的商品信息

6.查询id2或者6的商品信息

4.3 排序

1.查询所有的商品,按价格进行排序(升序、降序)

2.查询名称有""的商品信息并且按照价格降序排序

4.4 聚合函数

1.获得所有商品的价格的总和。

2.获得所有商品的平均价格

3.获得所有商品的个数

4.5 分组操作

1.添加分类id (alter table product add cid varchar(32);)

2.初始化数据

update product set cid='1';

update product set cid='2' where  pid in (5,6,7);

 

1.根据cid字段分组,分组后统计商品的个数。

2.根据cid分组,分组统计每组商品的平均价格,并且平均价格大于20000元。

4.6 查询总结

select  一般在的后面的内容都是要查询的字段

from  要查询到表

where

group by

having  分组后带有条件只能使用having

order by 它必须放到最后面

5、JDBC开发步骤

 1.注册驱动

 2.获得连接

 3.获得语句执行者

 4.执行sql语句

 5.处理结果

 6.释放资源

5.1 注册驱动

 

   看清楚了,注册驱动就只有一句话:Class.forName(“com.mysql.jdbc.Driver”),下面的内容都是对这句代码的解释。今后我们的代码中,与注册驱动相关的代码只有这一句。

 

DriverManager类的registerDriver()方法的参数是java.sql.Driver,但java.sql.Driver是一个接口,实现类由mysql驱动来提供,mysql驱动中的java.sql.Driver接口的实现类为com.mysql.jdbc.Driver!那么注册驱动的代码如下:

 

DriverManager.registerDriver(new com.mysql.jdbc.Driver());

 

上面代码虽然可以注册驱动,但是出现硬编码(代码依赖mysql驱动jar包),如果将来想连接Oracle数据库,那么必须要修改代码的。并且其实这种注册驱动的方式是注册了两次驱动!

 

JDBC中规定,驱动类在被加载时,需要自己“主动”把自己注册到DriverManger中,下面我们来看看com.mysql.jdbc.Driver类的源代码:

 

com.mysql.jdbc.Driver.java

 

public class Driver extends NonRegisteringDriver implements java.sql.Driver {

static {

try {

java.sql.DriverManager.registerDriver(new Driver());

} catch (SQLException E) {

throw new RuntimeException("Can't register driver!");

}

}

……

}

 

 

 

com.mysql.jdbc.Driver类中的static块会创建本类对象,并注册到DriverManager中。这说明只要去加载com.mysql.jdbc.Driver类,那么就会执行这个static块,从而也就会把com.mysql.jdbc.Driver注册到DriverManager中,所以可以把注册驱动类的代码修改为加载驱动类

 

Class.forName(“com.mysql.jdbc.Driver”); 

5.2 获取连接

获取连接需要两步,一是使用DriverManager来注册驱动,二是使用DriverManager来获取Connection对象。

 

获取连接的也只有一句代码:

DriverManager.getConnection(url,username,password),

其中username和password是登录数据库的用户名和密码,如果我没说错的话,你的mysql数据库的用户名和密码分别是:root、123。

url查对复杂一点,它是用来找到要连接数据库“网址”,就好比你要浏览器中查找百度时,也需要提供一个url。下面是mysql的url:

jdbc:mysql://localhost:3306/mydb1

JDBC规定url的格式由三部分组成,每个部分中间使用冒号分隔。

l 第一部分是jdbc,这是固定的;

l 第二部分是数据库名称,那么连接mysql数据库,第二部分当然是mysql了;

l 第三部分是由数据库厂商规定的,我们需要了解每个数据库厂商的要求,mysql的第三部分分别由数据库服务器的IP地址(localhost)、端口号(3306),以及DATABASE名称(mydb1)组成。

  

下面是获取连接的语句:

Connection con = DriverManager.getConnection(“jdbc:mysql://localhost:3306/web08”,”root”,”root”);

 

还可以在url中提供参数:

jdbc:mysql://localhost:3306/web08?useUnicode=true&characterEncoding=UTF8

useUnicode参数指定这个连接数据库的过程中,使用的字节集是Unicode字节集;

characherEncoding参数指定穿上连接数据库的过程中,使用的字节集编码为UTF-8编码。请注意,mysql中指定UTF-8编码是给出的是UTF8,而不是UTF-8。要小心了!

5.3 获取Statement

在得到Connectoin之后,说明已经与数据库连接上了,下面是通过Connection获取Statement对象的代码:

Statement stmt = con.createStatement();

Statement是用来向数据库发送要执行的SQL语句的!

5.4 发送SQL查询语句

String sql = “select * from user”;

ResultSet rs = stmt.executeQuery(sql);

注意,执行查询使用的不是executeUpdate()方法,而是executeQuery()方法。executeQuery()方法返回的是ResultSet,ResultSet封装了查询结果,我们称之为结果集。

5.5 读取结果集中的数据

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

rs.next();//光标移动到第一行

rs.getInt(1);//获取第一行第一列的数据

当你使用rs.getInt(1)方法时,你必须可以肯定第1列的数据类型就是int类型,如果你不能肯定,那么最好使用rs.getObject(1)。在ResultSet类中提供了一系列的getXXX()方法,比较常用的方法有:

Object getObject(int col)

String getString(int col)

int getInt(int col)

double getDouble(int col)

5.6 关闭

与IO流一样,使用后的东西都需要关闭!关闭的顺序是先得到的后关闭,后得到的先关闭。

rs.close();

stmt.close();

con.close();

 

posted @ 2019-01-25 11:32  可乐咖啡  阅读(191)  评论(0编辑  收藏  举报