JDBCjava
问题:实际开发中,不可能用工具或者命令行操做数据库,数据库表中的数据最终要使用Java程序来操做,那么Java中如何操做数据库中的数据呢?mysql
答 : 在Java语言中,有一个专门链接数据库的规范(JDBC),专门负责链接数据库进行数据操做的规范sql
JDBC只是SUN编写的一堆接口(规范的体现),SUN公司本身并无实现数据库
问题 : 为何SUN只定义一个JDBC规范,而不实现呢?api
答 : 由于市面上的数据库不少,每一个数据库内部接口不会向外暴露,并且即使是暴露让SUN去实现,市面上不少数据库所有要SUN来实现不现实浏览器
实际中哪一个数据库须要支持JAVA语言,就须要本身实现Java的JDBC规范,由于实现了JDBC不少接口,那么就会有不少实现类,而不少实现类在java中会使用一个专门的包封装起来,叫作jar包(在JDBC中叫作驱动包),各大数据库产商实现JDBC规范之后都会把他们jar包放在官网上以供开发者下载使用架构
jdbc:dom
是一种用于执行SQL语句的Java API,能够为多种关系数据库提供统一访问,它由一组用Java语言编写的类和接口组成。JDBC提供了一种基工具
JDBC规范对应的api包性能
在其余操做之间先要把数据库表要建立出来
public static void main(String[] args) throws Exception {
String sql = "create table t_student (id int primary key auto_increment,name varchar(50),age int)";
//贾琏欲执事
//1,加载注册驱动
Class.forName("com.mysql.jdbc.Driver");
//2,获取数据库链接
Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/jdbcdemo", "root", "root");
//3,建立语句对象(用于执行SQL语句的对象)
Statement st = conn.createStatement();
//4, 执行SQL语句
//int rows = st.executeUpdate(String sql);执行DDL和DML语句,放回的是受影响的行数
//ResultSet res = st.executeQuery(String sql);执行DQL查询语句,返回的结果集对象
st.executeUpdate(sql);
//5,释放资源(先开后关)
st.close();
conn.close();
}
问题 : 咱们有了Statment对象能够执行SQL,为何还要使用PreparedStatment?
优点
Statement: 表示静态SQL语句对象. PreparedStatement:Statement的子接口,表示预编译SQL语句对象. 经过占位符(?)来拼SQL. |
建立语句对象 Statment
在执行SQL语句的时候回带上SQL语句
在执行SQL语句的方法中不须要设置SQL语句
void setXxx(int parameterIndex,Xxx value):用于设置占位符参数, parameterIndex:第几个问号. 注意:从1开始. value:设置的真实值. Xxx:表示数据类型.String/int/long/Double/Date |
实际开发中,JavaWeb开发代码通常分为三层,分层结构是JavaWeb开发中的一种设计思想,这样会让咱们开发井井有条,每一层只要完成对应的功能便可,使得项目便于开发和维护
1 . Web层/表现层 : 主要接受前台浏览器用户的参数,给浏览器响应数据等等
DAO : Data Access Object 数据访问对象
实际开发中 : 用户请求到-Web层--->Service层-->DAO层
开发中若是使用的分层,编写的包和类名接口名等等都是有固定规则,不能随便瞎写
公司域名倒写+项目名称/模块名称+dao 如 : cn.sxt.crm.dao |
公司域名倒写+项目名称/模块名称+dao+impl 如 : cn.sxt.crm.dao.impl |
对应表的名称 + Dao/DAO
如 : StudentDao/DAO , TeacherDao/DAO |
对应表的名称 + Dao/DAOImpl
如 : StudentDaoImpl/DAOImpl , TeacherDaoImpl/DAOImpl |
POJO(Plain Ordinary Java Object)简单的Java对象
domian : 域对象
公司域名倒写+项目名称/模块名称+domain/pojo 如 : cn.sxt.crm.domain |
公司域名倒写+项目名称/模块名称+test 如 : cn.sxt.crm.test |
公司域名倒写+项目名称/模块名称+util/utils 如 : cn.sxt.crm.util/utils |