JDBC简介:
????????????????????????JDBC(Java DataBase Connectivity, java数据库连接)是一种用于执行SQL语句的Java API (简而言之 使用JAVA语言 让SQL在MySQL中执行),可以为多种关系数据库提供统一访问,它由一组用Java语言编写的类和接口组成。JDBC提供了一种基准,据此可以构建更高级的工具和接口,使数据库开发人员能够编写数据库应用程序,同时,JDBC也是个商标名。
?
为什么需要JDBC?反向思考没有JDBC会出现什么情况?
?
此时每一个程序员要学习每个数据库官方提供的方法,此时也不太好!
使用接口:定义方法,但是没有实现。 多态,定制规则。
介绍完毕,上代码!!!
实体类
//创建表格实体类,实体类属性必须和表格列名一致(见名知意)写入get set toString方法
public class Food {
private Integer fid;
private String fname;
private float price;
private Integer kid;
public Integer getFid() {
return fid;
}
public void setFid(Integer fid) {
this.fid = fid;
}
public String getFname() {
return fname;
}
public void setFname(String fname) {
this.fname = fname;
}
public float getPrice() {
return price;
}
public void setPrice(float price) {
this.price = price;
}
public Integer getKid() {
return kid;
}
public void setKid(Integer kid) {
this.kid = kid;
}
@Override
public String toString() {
return "Food{" +
"fid=" + fid +
", fname='" + fname + '\'' +
", price=" + price +
", kid=" + kid +
'}';
}
}
?dao层操作
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.util.ArrayList;
import java.util.List;
public class FoodDao {
//提升作用域
Connection connection =null;
PreparedStatement preparedStatement =null;
ResultSet resultSet =null;
//查询所有
public List<Food> findAll(){
ArrayList<Food> list = new ArrayList<>();
try {
//加载驱动
Class.forName("com.mysql.cj.jdbc.Driver");
// DriverManager:驱动的管理者,通过它创建连接。-----通过此方法根据url路径找到数据库并验证账户和密码
connection = DriverManager.getConnection("jdbc:mysql://localhost:3306/111", "root", "root");
// sql预编译/加载
String sql="select * from food";
//执行sql语句
preparedStatement = connection.prepareStatement(sql);
resultSet = preparedStatement.executeQuery();
while (resultSet.next()){
Food food = new Food();
food.setFid(resultSet.getInt("fid"));
food.setFname(resultSet.getString("fname"));
food.setPrice(resultSet.getInt("price"));
food.setKid(resultSet.getInt("kid"));
list.add(food);
}
}catch (Exception e){
e.printStackTrace();
}finally {
try {
// 关闭连接 判断连接是否开启 使用完关闭,释放资源
if (resultSet!=null){
resultSet.close();
}
if (preparedStatement!=null){
preparedStatement.close();
}
if (connection!=null){
connection.close();
}
}catch (Exception e){
e.printStackTrace();
}
}
return list;
}
//新增操作
public int add(Food food){
try {
//加载驱动
Class.forName("com.mysql.cj.jdbc.Driver");
// DriverManager:驱动的管理者,通过它创建连接。-----通过此方法根据url路径找到数据库并验证账户和密码
connection = DriverManager.getConnection("jdbc:mysql://localhost:3306/111", "root", "root");
// sql预编译/加载
String sql="insert into food values (null,?,?,?)";
preparedStatement = connection.prepareStatement(sql);
//根据数字和问号占位符对应,根据对象获取值
preparedStatement.setObject(1,food.getFname());
preparedStatement.setObject(2,food.getPrice());
preparedStatement.setObject(3,food.getKid());
//i 返回执行sql语句后影响的行数
int i = preparedStatement.executeUpdate();
return i;
}catch (Exception e){
e.printStackTrace();
}finally {
try {
// 关闭连接 判断连接是否开启 使用完关闭,释放资源
if (resultSet!=null){
resultSet.close();
}
if (preparedStatement!=null){
preparedStatement.close();
}
if (connection!=null){
connection.close();
}
}catch (Exception e){
e.printStackTrace();
}
}
return 0;
}
//根据id删除数据
public int del(Integer id){
try {
//加载驱动
Class.forName("com.mysql.cj.jdbc.Driver");
// DriverManager:驱动的管理者,通过它创建连接。-----通过此方法根据url路径找到数据库并验证账户和密码
connection = DriverManager.getConnection("jdbc:mysql://localhost:3306/111", "root", "root");
// sql预编译/加载
String sql="delete from food where fid=?";
preparedStatement = connection.prepareStatement(sql);
preparedStatement.setObject(1,id);
//i 返回执行sql语句后影响的行数
int i = preparedStatement.executeUpdate();
return i;
}catch (Exception e){
e.printStackTrace();
}finally {
try {
// 关闭连接 判断连接是否开启 使用完关闭,释放资源
if (resultSet!=null){
resultSet.close();
}
if (preparedStatement!=null){
preparedStatement.close();
}
if (connection!=null){
connection.close();
}
}catch (Exception e){
e.printStackTrace();
}
}
return 0;
}
//修改操作
public int update(Food food ){
try {
//加载驱动
Class.forName("com.mysql.cj.jdbc.Driver");
// DriverManager:驱动的管理者,通过它创建连接。-----通过此方法根据url路径找到数据库并验证账户和密码
connection = DriverManager.getConnection("jdbc:mysql://localhost:3306/111", "root", "root");
// sql预编译/加载
String sql="update food set fname=?,price =?,kid=? where fid =?";
preparedStatement = connection.prepareStatement(sql);
//根据数字和问号占位符对应,根据对象获取值
preparedStatement.setObject(1,food.getFname());
preparedStatement.setObject(2,food.getPrice());
preparedStatement.setObject(3,food.getKid());
preparedStatement.setObject(4,food.getFid());
//i 返回执行sql语句后影响的行数
int i = preparedStatement.executeUpdate();
return i;
}catch (Exception e){
e.printStackTrace();
}finally {
try {
// 关闭连接 判断连接是否开启 使用完关闭,释放资源
if (resultSet!=null){
resultSet.close();
}
if (preparedStatement!=null){
preparedStatement.close();
}
if (connection!=null){
connection.close();
}
}catch (Exception e){
e.printStackTrace();
}
}
return 0;
}
}
?测试类测试代码
package com.lj1.Test;
import com.lj1.dao.FoodDao;
import com.lj1.entity.Food;
import java.util.List;
/**
* @program: JDBCday02
* @description:
* @author: 刘健
* @create: 2021-10-21 13:53
**/
public class Test1 {
//查询所有
public static void main(String[] args) {
FoodDao foodDao = new FoodDao();
List<Food> all = foodDao.findAll();
for (int i = 0; i < all.size(); i++) {
Food food = all.get(i);
System.out.println(food.getFid());
System.out.println(food.getFname());
System.out.println(food.getPrice());
System.out.println(food.getKid());
}
}
//新增操作
/* public static void main(String[] args) {
FoodDao foodDao = new FoodDao();
Food food = new Food();
food.setFname("汉堡包");
food.setPrice(1.1f);
food.setKid(1);
int add = foodDao.add(food);
System.out.println(add);
}*/
//根据id删除整行数据
/* public static void main(String[] args) {
FoodDao foodDao = new FoodDao();
int del = foodDao.del(17);
System.out.println(del);
}*/
//根据id修改数据
/*public static void main(String[] args) {
FoodDao foodDao = new FoodDao();
Food food = new Food();
food.setFid(14);
food.setFname("牛肉堡");
food.setPrice(1.2f);
food.setKid(2);
int add = foodDao.update(food);
System.out.println(add);
}*/
}
|