-
JDBC是Java应用程序接口(API)。全称是Java Database connect,它由一组用Java语言编写的类和接口组成,是Java语言中用来规范客户端程序如何来访问数据库的应用程序接口,提供了诸如查询和更新数据库中数据的方法。应用程序可通过这套API连接到关系数据库,并使用SQL语句来完成对数据库中数据的查询、更新和删除等操作。
-
与数据库相连,进行增删改查
package com.hp;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;
public class jdbc01 {
public static void main(String[] args) throws Exception {
f3();
}
//查询
private static void f4() throws Exception {
//注册驱动-反射去加载jar包中com.mysql。jdbcDriver这个类的DriverManager.registerDriver()
Class.forName("com.mysql.jdbc.Driver");
//获取连接对象
Connection con=DriverManager.getConnection("jdbc:mysql://localhost:3307/camp-2023?characterEncoding=utf8","root","root");
System.out.println(con);
//定义sql
String sql = "select * from t_dept where did=19 ";
//需要创建statement
Statement statement = con.createStatement();
//statement执行sql,返回结果集
ResultSet rs = statement.executeQuery(sql);
//解析
while(rs.next()) {
int did = rs.getInt("did");
String dname = rs.getString("dname");
String dlocation = rs.getString("dlocation");
String leader = rs.getString("leader");
System.out.println(did + "--" + dname + "--" + dlocation + "--" + leader);
}
//关闭资源
statement.close();
con.close();
}
//修改数据
private static void f3() throws Exception {
//注册驱动-反射去加载jar包中com.mysql。jdbcDriver这个类的DriverManager.registerDriver()
Class.forName("com.mysql.jdbc.Driver");
//获取连接对象
Connection con=DriverManager.getConnection("jdbc:mysql://localhost:3307/camp-2023?characterEncoding=utf8","root","root");
System.out.println(con);
//定义sql
String sql = "update t_dept set leader='张总' where did=19";
//需要创建statement
Statement statement = con.createStatement();
//statement执行sql,返回插入几行
int i = statement.executeUpdate(sql);
System.out.println("向数据库t_dept表中修改"+i+"行数据");
statement.close();
con.close();
}
//删除数据
private static void f2() throws Exception { //注册驱动-反射去加载jar包中com.mysql。jdbcDriver这个类的DriverManager.registerDriver()
Class.forName("com.mysql.jdbc.Driver");
//获取连接对象
Connection con = DriverManager.getConnection("jdbc:mysql://localhost:3307/camp-2023?characterEncoding=utf8", "root", "root");
System.out.println(con);
//定义sql
String sql = "delte from t_dept where did=18";
//需要创建statement
Statement statement = con.createStatement();
//statement执行sql,返回插入几行
int i = statement.executeUpdate(sql);
System.out.println("向数据库t_dept表中删除" + i + "行数据");
statement.close();
con.close();
}
//插入数据
private static void f1() throws Exception {
//注册驱动-反射去加载jar包中com.mysql。jdbcDriver这个类的DriverManager.registerDriver()
Class.forName("com.mysql.jdbc.Driver");
//获取连接对象
Connection con=DriverManager.getConnection("jdbc:mysql://localhost:3307/camp-2023?characterEncoding=utf8","root","root");
System.out.println(con);
//定义sql
String sql = "insert into t_dept values(null,'乌克兰分部','基辅','程总')";
//需要创建statement
Statement statement = con.createStatement();
//statement执行sql,返回插入几行
int i = statement.executeUpdate(sql);
System.out.println("向数据库t_dept表中插入"+i+"行数据");
statement.close();
con.close();
}
}
- 一共共有三个层面,控制层(controller),服务层(service),数据层(dao)。
其基本架构为
调用其他类,要先声明其他类,在调用其他类的方法
package com.dao.impl;
import com.dao.IDeptDao;
import com.pojo.Dept;
import com.utils.JdbcUtil;
import java.util.List;
public class DeptDaoImpl implements IDeptDao {
@Override
public List<Dept> list() {
List<Dept> list = JdbcUtil.list("select * from t_dept ", Dept.class);
return list;
}
/* @Override
public List<Dept> list(){
List<Dept> deptList = new ArrayList<>();
try {
//注册驱动-反射去加载jar包中com.mysql。jdbcDriver这个类的DriverManager.registerDriver()
Class.forName("com.mysql.jdbc.Driver");
//获取连接对象
Connection con= DriverManager.getConnection("jdbc:mysql://localhost:3307/camp-2023?characterEncoding=utf8","root","root");
System.out.println(con);
//定义sql
String sql = "select * from t_dept ";
//需要创建statement
Statement statement = con.createStatement();
//statement执行sql,返回结果集
ResultSet rs = statement.executeQuery(sql);
//解析
while(rs.next()) {
int did = rs.getInt("did");
String dname = rs.getString("dname");
String dlocation = rs.getString("dlocation");
String leader = rs.getString("leader");
Dept dept = new Dept(did,dname,dlocation,leader);
deptList.add(dept);
}
//关闭资源
statement.close();
con.close();
}catch (Exception e){
e.printStackTrace();
}
return deptList;
}*/
}
提到工具类
package com.utils;
import java.lang.reflect.Field;
import java.sql.*;
import java.util.ArrayList;
import java.util.List;
public class JdbcUtil {
public static <T> List<T> list(String sql, Class<T> c) {
ArrayList<T> list = new ArrayList<T>();
try {
//注册驱动-反射去加载jar包中com.mysql。jdbcDriver这个类的DriverManager.registerDriver()
Class.forName("com.mysql.jdbc.Driver");
//获取连接对象
Connection con= DriverManager.getConnection("jdbc:mysql://localhost:3307/camp-2023?characterEncoding=utf8","root","root");
System.out.println(con);
//需要创建statement
Statement statement = con.createStatement();
//statement执行sql,返回结果集
ResultSet rs = statement.executeQuery(sql);
//结果集rs得到结果集元数据
ResultSetMetaData md = rs.getMetaData();
//获取结果集的总列数
int columnCount = md.getColumnCount();
//解析
while(rs.next()) {//读取结果集的光标向下移动一行,光标默认在哪一行,列名所在的哪一行
//根据每一行数据,封装成一个实体对象
T t=c.newInstance();
//取出某一行的每一列数据,封装到对象t的属性中
for (int i = 1; i <columnCount ; i++) {
//通过列的序号,获取每一列的值
Object value= rs.getObject(i);
if(value !=null) {
//通过列的序号,获取每一列的名
String columnName = md.getColumnName(i);
//因为列名和实体类t中的属性名一致,为每一个属性构造一个反射中的set方法
Field f = c.getDeclaredField(columnName);
//赋予私有属性的赋值权限
f.setAccessible(true);
//使用反射,把value给到对象t的属性中
f.set(t, value);//理解为:把value赋值给对象的columName属性,相当于set方法
}
}
list.add(t);
}
//关闭资源
statement.close();
con.close();
}catch (Exception e){
e.printStackTrace();
}
return list;
}
}