小白对JDBC的一点认识
作者:互联网
对JDBC的一点粗浅认识
what:jdbc是什么
jdbc是一种规范,是连接数据库与java项目的桥梁
之前没有jdbc的时候,程序员要想连接数据库,都要自己手写一遍连接流程,而市面上有多种数据库,不同的数据库,连接操作的流程是不一样的,这个过程很繁琐。
最早的时候sun的天才们想要出一套可以连接市面上数据库的api(万能数据线,可类比成现在的三头数据线),但是发现各个数据库的操作都不相同,差别太大,工程量太大了。(相当于要每一头数据线要让jdbc自己使用厂家那边的技术来制造,工程量过大)
所以它跟厂家们约定了一套规范,它的那头它自己造,多头的那一侧就由各个厂家自己造。
各个厂家提供的驱动就是他们造的专属数据线的头。
why :为什么要使用jdbc
不同的数据库,java程序连接修改数据的代码不一样,使用JDBC后更换数据库只需要更换驱动和导入相应的数据库jar包即可,不必修改代码,这样显然更方便
How 怎么使用jdbc
一:加载驱动
Class.forName(“com.mysql.jdbc.Driver”);
二:获得连接
Connection conn=DriverManager.getConnection("jdbc:mysql://localhost:3306/test", "root", "123");
括号中的三个位置分别对应(url,username,password)
关于url的解释 : 协议(jdbc):数据库类型://ip:端口/数据库
三:预编译(传sql语句)
String sql = "INSERT INTO person(user_name, sex)values(?,?)";
//预编译
PreparedStatement ps= conn.prepareStatement(sql); //预编译SQL,减少sql执行
四:接收结果集并进行操作
//查询
rs = ps.executeQuery();
while(rs.next()) {
Person per= new Person();
per.setName(rs.getString("user_name"));
per.setSex(rs.getString("sex"));
return per;
}
五:关闭资源
public static void closeConn(Connection conn,PreparedStatement ps,ResultSet rs) {
try {
if(rs != null) rs.close();
if(ps != null) ps.close();
if(conn != null) conn.close();
} catch (Exception e) {
e.printStackTrace();
}
}
附上老师写的jdbc代码
例子
public class JDBCUtil {
private static DataSource ds;
private static Properties p = new Properties();
private static Connection conn;
private static PreparedStatement ps;
private static ResultSet rs;
static {
try(InputStream is = JDBCUtil.class.getResourceAsStream("/jdbc.properties")){
p.load(is);
//这个jdbc.properties配置文件里面只放着,url ,username ,password,驱动名称
//最后会附上一张图来说明
// 加载驱动
Class.forName(p.getProperty("driverClassName"));
// 创建数据源
ds = DruidDataSourceFactory.createDataSource(p);
} catch (Exception e) {
e.printStackTrace();
}
}
//提供连接数据库的方法
public static Connection getConnection() {
try {
conn = ds.getConnection();
} catch (SQLException e) {
e.printStackTrace();
}
return conn;
}
//把连接放回连接池
public static void closeConn(Connection conn,PreparedStatement ps,ResultSet rs) {
try {
if(rs != null) rs.close();
if(ps != null) ps.close();
if(conn != null) conn.close();
} catch (Exception e) {
e.printStackTrace();
}
}
public static PreparedStatement getPs() {
return ps;
}
public static ResultSet getRs() {
return rs;
}
//统一查询 省略很多的代码
public static ResultSet executeQuery(String sql, Object... strs) {
try {
conn = getConnection();
//创建preparestatement对象
ps = conn.prepareStatement(sql);
//给参数设值
if(strs != null) {
for(int i = 0;i < strs.length;i++) {
ps.setObject(i+1, strs[i]);
}
}
System.out.println("执行sql:" + ps);
//执行查询
rs = ps.executeQuery();
return rs;
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
public static Connection getConn() {
return conn;
}
public static void setConn(Connection conn) {
JDBCUtil.conn = conn;
}
public static void setPs(PreparedStatement ps) {
JDBCUtil.ps = ps;
}
public static void setRs(ResultSet rs) {
JDBCUtil.rs = rs;
}
//统一执行增删改的操作
public static void executeOrUpdate(String sql, Object[] args) {
try {
conn = getConnection();
//创建preparestatement对象
ps = conn.prepareStatement(sql);
System.out.println("执行sql:" + ps);
//给参数设值
if(args != null) {
for(int i = 0;i < args.length;i++) {
ps.setObject(i+1, args[i]);
}
}
//执行
ps.executeUpdate();
} catch (Exception e) {
e.printStackTrace();
}
}
}
Dao层:对数据库中的内容进行增删改查
public class DeptDaoImpl implements DeptDao{
@Override
public void save(Dept dept) {
String sql="insert into dept_inf(name,remark)values(?,?)";
Object[] strs= {dept.getName(),dept.getRemark()};
try {
JDBCUtil.executeOrUpdate(sql, strs);
}catch(Exception e){
e.printStackTrace();
}finally {
JDBCUtil.closeConn(JDBCUtil.getConnection(), JDBCUtil.getPs(), null);
}
}
@Override
public void del(Integer[] id) {
String sql="delete from dept_inf where id=?";
Object[] strs= {id};
try {
JDBCUtil.executeOrUpdate(sql, strs);
}catch(Exception e){
e.printStackTrace();
}finally {
JDBCUtil.closeConn(JDBCUtil.getConnection(), JDBCUtil.getPs(), null);
}
}
@Override
public Dept getDeptById(Integer id) {
String sql = "select * from dept_inf where id=?";
//准备参数
Object[] strs = {id};
ResultSet rs = null;
try {
//调用JDBCUtil.executeQuery(sql,strs) 返回结果集
rs = JDBCUtil.executeQuery(sql, strs);
//循环 创建部门对象
while(rs.next()) {
Dept dept = new Dept();
dept.setName(rs.getString("name"));
dept.setRemark(rs.getString("remark"));
dept.setId(rs.getInt("id"));
return dept;
}
} catch (SQLException e) {
e.printStackTrace();
}finally {
JDBCUtil.closeConn(JDBCUtil.getConn(), JDBCUtil.getPs(), rs);
}
//返回null
return null;
}
@Override
public void update(Dept dept) {
String sql="update dept_inf set name=?,remark=? where id=?";
Object [] strs= {dept.getName(),dept.getRemark(),dept.getId()};
try {
JDBCUtil.executeOrUpdate(sql, strs);
}catch(Exception e){
e.printStackTrace();
}finally {
JDBCUtil.closeConn(JDBCUtil.getConnection(), JDBCUtil.getPs(), null);
}
}
//删除单个部门
@Override
public void delete(Integer id) {
String sql="delete from dept_inf where id=?";
Object[] strs= {id};
try {
JDBCUtil.executeOrUpdate(sql, strs);
}catch(Exception e){
e.printStackTrace();
}finally {
JDBCUtil.closeConn(JDBCUtil.getConnection(), JDBCUtil.getPs(), null);
}
}
@Override
public List<Dept> findAllDept() {
String sql="select * from dept_inf";
List<Dept> depts=new ArrayList<>();
ResultSet rs=null;
try {
rs=JDBCUtil.executeQuery(sql, null);
while(rs.next()) {
Dept dept=new Dept();
dept.setId(rs.getInt("id"));
dept.setName(rs.getString("name"));
dept.setRemark(rs.getString("remark"));
dept.setState(rs.getInt("state"));
depts.add(dept);
}
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally {
JDBCUtil.closeConn(JDBCUtil.getConn(), JDBCUtil.getPs(), rs);
}
return depts;
}
}
啊哈哈哈,最后那个例子没有时间改了,你们凑合看一下,等我有时间了就来修改
标签:ps,JDBC,rs,认识,dept,小白,sql,JDBCUtil,public 来源: https://blog.csdn.net/clm137100/article/details/113806788