数据库:
弄清 数据库管理系统与数据库与表与表数据都是什么含义
会安装与卸载数据库
会使用DOS登录mysql/会使用sqlyog(或者类似工具)连接数据库,进行可视化操作
SQL代码:
数据库相关:
创建、删除、使用、查看、查看创建语句
*create database 数据库名; 创建数据库
*show databases; 查看数据库
show create database 数据库名; 查看建库语句
*drop database 数据库名; 删除数据库
*use 数据库名; 使用指定数据库
表结构相关:
创建、删除、修改、查看、查看创建语句
***
create table 表名(
字段1 类型,
字段2 类型,
...
)
注意主键唯一非空:id int primary key, 将id设置为主键
自动增长:auto_increment
*desc 表名; 查看某个现有表的结构
*show tables; 查看当前数据库下所有的表
*show create table 表名; 查看建表语句
rename table 旧表名 to 新表名 修改表名
*alter table 表名 add 列名 类型; 添加列操作
*alter table 表名 modify 列名 类型; 修改列类型
*alter table 表名 drop 列名; 删除列
alter table 表名 change 旧列名 新列名 类型; 修改列名称
*drop table 表名; 删除表
***truncate 表名; 摧毁表(删除表)
表数据相关
增:
***insert into 表名(列名1,列名2, ...) values(列值1, 列值2, ...);指定列插入
***insert into 表名 values(列值1, 列值2, ...); 不指定列插入(所有列)
删:
***delete from 表名 where 条件 删除指定条件的数据
***delete from 表名 删除表内所有数据
***truncate table 表名 摧毁表再重新创建表,达到删除表内所有数据
改:
***update 表名 set 字段=值 ,... where 条件
查:
普通查询:
***** select 字段1,字段2,...from 表名; 查询指定字段信息
***** select * from 表名; 查询表中所有字段
where子句 *****
order by与别名 ***
函数 ***
count:统计指定列不为NULL的记录行数;
sum:计算指定列的数值和,如果指定列类型不是数值类型,那么计算结果为0;
max:计算指定列的最大值,如果指定列是字符串类型,那么使用字符串排序运算;
min:计算指定列的最小值,如果指定列是字符串类型,那么使用字符串排序运算;
avg:计算指定列的平均值,如果指定列类型不是数值类型,那么计算结果为0
goup by ***
分组查询是指使用group by字句对查询信息进行分组。即以某个字段作为分组依据,将这个字段值相同的数据分到一组,以组为单位查询数据。
JDBC:
概念:java连接数据库的工具,java提供了JDBC的接口规范,数据库厂商提供给了针对各种数据库的具体实现类
步骤:
1:注册驱动
DriverManager:驱动控制管理类
registerDriver(java.sql.Driver driver)
方式一:
手动调用registerDriver注册驱动,不建议,因为如果是mysql的驱动Driver中已经在静态代码块中注册过一遍了。我们无需二次注册,所以不建议。
方式二:
Class.forName("驱动的全名");建议,因为避免了二次注册。
2:获取连接
DriverManager的方法:
public static Connection getConnection(String url,String user, String password)
url:数据库资源地址 jdbc:mysql://localhost:3306/mydatabase
user:账号
password:密码
3:获取执行平台
4:执行语句
普通执行平台:
Statement:sql执行平台类,我们通过连接获取这个连接的执行平台,在平台上执行SQL语句
Connection提供了获取执行平台的方法:
Statement createStatement() throws SQLException
Statement提供了执行SQL语句的方法
int executeUpdate(String sql); --执行insert update delete语句.
ResultSet executeQuery(String sql); --执行select语句.
预处理平台:
PreparedStatement:预处理平台类
Connection提供了获取预处理执行平台对象的方法:
PreparedStatement prepareStatement(String sql) 通过SQL语句获取预处理执行平台对象,给予的sql语句中,用户输入的值可以使用?替代,可以避免SQL注入问题
PreparedStatement提供了执行sql的方法
void setString(int parameterIndex, String x) 为指定编号的?赋值 字符串的值
setXxx(int index,Object value) 为指定编号的?赋值
int executeUpdate() 执行增删改语句
ResultSet executeQuery() 执行查询语句
5:处理结果
ResultSet:结果集类
boolean next()
getXXX(int col) 通过第几列获取该行该列的值 注意:从1开始
getXXX(String colName) 通过列名获取该行该列的值
6:释放资源
如果使用异常捕获,则释放资源应该在finally代码块中,需要释放的资源有:结果集、平台对象、连接对象
工具类:
方便我们获取连接的工具类
在静态代码块中注册驱动,为常用的数据库属性值赋值
提供获取连接对象的方法,该方法通常为静态方法
还可以在未属性赋值时使用配置文件properties
DBUtils:
Apache提供的简化JDBC操作的工具类
QueryRunner:用于执行SQL语句
构造方法:
空参:创建一个不带连接/连接池的QueryRunner对象,如果用这种对象,在执行sql操作时,需要传入一个连接对象
带参:接收DataSource(连接池)参数创建的QueryRunner对象,如果用这种对象,在执行sql操作时,不需要再传入连接对象,因为连接池已经提供了连接
普通方法:
Connection conn:连接
String sql:语句
ResultSetHandler handler:结果集处理对象
Object... param:如果sql中有?则传入?对应的值
query(Connection conn,String sql,ResultSetHandler handler)
query(String sql,ResultSetHandler handler)
query(String sql,ResultSetHandler handler,Object... param)
update(Connection conn,String sql)
update(String sql)
update(String sql,Object... param)
ResultSetHandler:结果集处理类
参见文档表格,这里主要基础BeanListHandler
连接池:
用于存放并组织多个连接DataSource接口
我们学习DBCP,实现类为BasicDataSource
连接池使用:
创建对象
设置属性值
1:获取连接,使用连接 Connection getConnetion();
2:通过连接池,创建QueryRunner对象 |