笔记之_Java的JDBC整理
时间:2021-07-01 10:21:17
帮助过:22人阅读
new java.sql.Date(DateFormat.getDateInstance().parse(joinDate).getTime()))
JDBC:Java程序连接数据库的技术
DriverManager:驱动管理类
Connection:桥梁接口
Preparedstatement:接口可以使用参数,较statement更好更安全
Resultset:接口,结果集
服务器:
应用服务器
数据服务器
JDBC API:与数据库建立连接、执行SQL语句、处理结果
递归调用一定有一个结束的条件
常见数据库端口号:
MySQL:3306
Oracle:1521
Tomcat:8080
执行操作:
Pst.execute():返回布尔值
Pst.executeQuery():查询使用
Pst.executeUpdate():增删改使用
Try{}中创建的语句不能关掉,在外面创建,在外面关
使用resultSet变量保存executeQuery()返回的结果集
ResultSet.next()返回布尔值
判断有没有下一行数据
如果有暂时将下一行数据交给resultSet变量保存
Rs.getInt(1
):参数为数据库表的列号
JDBC步骤:
加载驱动
建立连接
创建指挥官
返回结果
final在static前
UI表示层:展示数据,接收输入和业务逻辑层交互数据
BIZ业务逻辑层:处理操作流程,决定调用功能,和数据访问层进行交互
DAO数据访问层:负责数据库的连接访问
DB数据库:
代码测试层:
依赖注入层:
实体类:数据传递的载体
com.项目名称.entity:实体类包名,第一个创建
com.项目名称.dao:数据访问接口层包名
com.项目名称.daoImpl:数据访问实现层包名
com.项目名称.biz:业务逻辑层包名
ui:UI包名,放Test文件
Java日期用Date需要导包Java.util.Date
子表与主表在类中的关系:
子表的实体类中保存主表对应的实体类对象
Private Department dept;
数据库操作必须包括的五个操作:主键查询,全查,增,删,改
util.Dtae是sql.Date的父类
util.Dtae转为sql.Date:
new Date(da.getTime());
将字符串转为Java的Date类型:
DateFormat.getDateInstance().parse(String)
new SimpleDateFormat("yyyy-MM-dd"
).parse(time);
将日期转换为字符串
new SimpleDateFormat("yyyy-MM-dd"
).format(date);
exetends:继承,一个类继承一个抽象类,一个接口继承另一个接口
implements:实现接口,一个类实现一个接口
利用泛型对数据访问层接口约束
业务逻辑层没有接口的嵌入,因为业务逻辑层是对数据访问层的基本方法的组合,组合的方法没有相同的,所以接口嵌入的意义不大
使用JDBC连接数据库:
package com.wulin.dao;
import java.sql.Connection;
import java.sql.DriverManager;
//所有数据访问类的父类
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
public class BaseDao {
//4个字符串+3个核心对象+2个方法+1个静态代码块
public final static String DRIVER="oracle.jdbc.driver.OracleDriver"
;
public final static String URL="jdbc:oracle:thin:@localhost:1521:orcl"
;
public final static String UID="zhangxin"
;
public final static String PWD="zhangxin"
;
protected Connection conn=
null;
protected PreparedStatement pst=
null;
protected ResultSet rs=
null;
static{
try {
Class.forName(DRIVER);
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
}
public void open_db(){
try {
conn=
DriverManager.getConnection(URL,UID,PWD);
} catch (SQLException e) {
e.printStackTrace();
}
}
public void close_db(){
try {
if (rs!=
null) {
rs.close();
}
if (pst!=
null) {
pst.close();
}
if (conn!=
null) {
conn.close();
}
} catch (SQLException e) {
// TODO: handle exception
e.printStackTrace();
}
}
}
通用查询:
public List<Employee> query(Map<String, Object>
pars) {
//1.sql命令的拼接
//2.将参数的值有序化
List<Department> depts=
ddao.findAll();
Map<Integer, Department> ds=
new HashMap<Integer, Department>
();
for (Department department : depts) {
ds.put(department.getDeptId(), department);
}
List<Employee> emps=
new ArrayList<Employee>
();
List<Object> temp=
new ArrayList<Object>
();
StringBuffer sb=
new StringBuffer("select * from employee where 1=1 "
);
for (String k : pars.keySet()) {
sb.append(" and ").append(k).append(" =?"
);
temp.add(pars.get(k));
}
try {
super.open_db();
super.pst=
super.conn.prepareStatement(sb.toString());
for (
int i = 0; i < temp.size(); i++
) {
pst.setObject(i+1
, temp.get(i));
}
super.rs=
super.pst.executeQuery();
Employee emp=
null;
while (
super.rs.next()) {
emp=
new Employee();
emp.setEmpId(super.rs.getInt(1
));
emp.setEmpName(super.rs.getString(2
));
emp.setEmpPosition(super.rs.getString(3
));
emp.setEmpHrId(super.rs.getInt(4
));
emp.setEmpInDate(super.rs.getDate(5
));
emp.setEmpSalary(super.rs.getDouble(6
));
emp.setEmpBonus(super.rs.getDouble(7
));
emp.setDeptId(super.rs.getInt(8
));
emp.setDept(ds.get(emp.getDeptId()));
emps.add(emp);
}
} catch (SQLException e) {
e.printStackTrace();
}finally{
super.close_db();
}
return emps;
笔记之_Java的JDBC整理
标签:主键 日期 nts driver tomcat resultset 第一个 array query