JDBC:Java DataBase ConnectivitySUN公司推出的访问数据库的标准规范。
JDBC和理解数据库驱动之间的关系:抽象和实现的关系。
开发准备工作:
- JDBC规范在何处:
JDK
java.sql.*;javax.sql.*;
- 数据库驱动:jar
二、开发第一个JDBC程序:(很重要)
CREATE DATABASE day15;
USE day15;
create table users(
id int primary key auto_increment,
name varchar(40),
password varchar(40),
email varchar(60),
birthday date
)character set utf8 collate utf8_general_ci;
insert into users(name,password,email,birthday) values(‘zs’,’123456′,’zs@sina.com’,’1980-12-04′);
insert into users(name,password,email,birthday) values(‘lisi’,’123456′,’lisi@sina.com’,’1981-12-04′);
insert into users(name,password,email,birthday) values(‘wangwu’,’123456′,’wangwu@sina.com’,’1979-12-04′);
用JDBC把数据查询出来,并打印到控制台上。
- 编码步骤:(非常重要)
//注册驱动
//获取与数据库的连接:任何的与数据库的交互都是基于连接的
//得到代表SQL语句的对象
//执行SQL语句
//如果执行的查询语句,会返回结果集,进行遍历
//释放占用的资源
- 关于ResultSet对象的游标:
三、JDBC常用的类或接口详解
1、DriverManager:
a、注册驱动
DriverManager.registerDriver(new com.mysql.jdbc.Driver()):注册驱动,不推荐使用。
原因有两个:
a、导致驱动被注册2次
b、编译时严重依赖具体的数据库驱动
改进方案:
Class.forName(“com.mysql.jdbc.Driver”);
b、获取与数据库的链接
- static Connection getConnection(String url,String user,String password);
- static Connection getConnection(String url,Properties props);
- static Connection getConnection(String url);
Connection conn =
DriverManager.getConnection(“jdbc:mysql://localhost:3306/day15?user=root&password=sorry”);
链接URL:
SUN公司和数据库厂商之间的一种协议。(查看具体数据库的帮助文档)
常用数据库的连接串:
MySQL:jdbc:mysql://localhost:3306/day15或者jdbc:mysql:///day15(本机默认端口)
Oracle:jdbc:oracle:thin:@localhost:1521:sid
2、java.sql.Connection接口
接口的实现在数据库的驱动中。所有与数据的交互都是基于连接对象的。
Statement createStatement();创建代表SQL语句的对象。
3、java.sql.Statement接口
实现在数据库的驱动中。代表SQL语句对象。
- ResultSet executeQuery(String sql):返回结果集。sql语句必须是查询语句。
- int executeUpdate(String sql):返回语句影响到的行数。sql语句一般为DML语句,或者是没有返回结果集的其他语句,比如DDL。
- boolean execute(String sql):可以执行任何的sql语句。返回值不代表是否执行成功。返回true说明有结果集,返回false说明没有结果集。
4、java.sql.ResultSet接口
a、封装结果
封装了查询结果,有一个可移动的游标,游标的开始位置在第一条记录的前面。
取某条记录的某列数据:
Object getObject(String columName):按照列名来取
Object getObject(int columCount):按照列的顺序来取,第一列为1
设计JavaBean封装查询结果:
Java类型和数据库类型的对应关系
ResultSet中提供了对应类型的重载方法。
b、可滚动结果集
boolean next():向下滚动。返回有无记录
boolean provious():向上滚动。返回有无记录
boolean absolute(int rowCount):定位到某条记录。第一条为1
void beforeFirst():滚动到第一条的前面
void afterLast():滚动到最后一条的后面
5、释放资源:JDBC编码模板
资源有限,合理释放。目前需要全部释放。
四、利用JDBC进行CRUD
五、利用JDBC改写用户注册和登陆案例
1、拷贝用户的注册和登陆案例
2、搭建开发环境
a、拷贝数据库驱动到WEB-INF/lib目录中
b、把刚写的JDBC工具类和配置文件搞过来
3、根据JavaBean设计你的数据库表
USE day15;
CREATE TABLE user(
username varchar(100) PRIMARY KEY,
password varchar(100) NOT NULL,
email varchar(100) NOT NULL,
birthday date NOT NULL
);
4、添加一个DAO的实现
六、SQL注入、参数问题:PreparedStatement(很重要)
1、PreparedStatement的优势:(能用这个就不要使用Statement)
a、执行效率要比Statement要高。
b、设置语句中的参数要方便。
c、设置参数后已经发生了变化, 已经不是原来的字符串语句。可以防止SQL注入。
2、具体编码
七、JavaWeb案例:客户基本信息的管理
0、需求分析
1、搭建开发环境
建立一个JavaWeb应用,拷贝以下jar包到WEB-INF\lib目录中
mysql-connector-driver.jar
commons-beanutils.jar
commons-logging.jar
2、建立JavaBean或者设计数据库表
USE day15;
CREATE TABLE customers(
id varchar(100) PRIMARY KEY,
name varchar(100) NOT NULL,
gender char(1) NOT NULL,#1 male;0 female
birthday date NOT NULL,
cellphone varchar(20) NOT NULL,
email varchar(100) NOT NULL,
hobby varchar(100),#吃饭,睡觉
type varchar(100),#VIP|普通客户
description varchar(255)
);
3、编码:
JavaBean:
Service接口: