两万字速通JDBC

目录

一、JDBC简介

1.1、JDBC概念

1.2、JDBC本质

1.3、JDBC好处

1.4、关系图示:

1.5、 MySQLjar包下载地址

一、DriverManager

1、注册驱动:

二、Connection

2.1、获取执sql对象

2.2、事务管理

    2.2.1、mysql事务管理

2.2.2、演示jdbc的事务

三、Statement

3.1、执行sql语句

四、ResultSet

 ResultSet案例

五、PreparedStatement

5.1、PreparedStatement作用:

5.2、SQL注入

演示普通登录:

5.2.1、 sql注入演示:

5.3、PreparedStatement解决SQL注入

 5.4、PrepareStatement原理

六、数据库连接池简介

6.1、数据库连接池优点

6.2、数据录库连接池实现

6.3、Driud使用步骤

七、完成商品品牌数据的增删改查操作

 表的信息

1、查询所有 

运行结果: 

2、增加数据

乱码问题: 

3、修改数据

运行结果: 

 4、删除数据

运行结果:​


一、JDBC简介

1.1、JDBC概念

①JDBC就是使用Java语言操作关系型数据录的一套API

②全称是(Java DataBase Connectivity),叫Java数据库连接

1.2、JDBC本质

①官方(sun公司)定义的一套操作所有关系型数据库的规则,即为接口

②各个数据库厂商去实现这套接口,提供数据库驱动jar包。

③我们可以使用这套接口(JDBC)编程,真正执行的代码是驱动jar包中的实现类

1.3、JDBC好处

①各数据库厂商使用相同的接口,Java代码不需要针对不同数据库分别开发不同的代码

②可随时替换底层数据库,访问数据库的Java代码基本不变

1.4、关系图示:

1.5、 MySQLjar包下载地址

MySQL :: MySQL Community Downloadshttps://dev.mysql.com/downloads/一般选择独立于平台的这个选项

①创建新的项目

 ②之后再建立一个模块

 ③在新建的的jdbc-demo模块中创建一个lib目录,将mysql的jar包复制粘贴到此处

④将刚才导入的jar包设置作用范围(右键jar包)

⑤在src下创建一个类

⑥ 类中:

package com.jdbc;import com.mysql.jdbc.Connection;
import java.sql.DriverManager;
import java.sql.Statement;public class JDBCDemo {public static void main(String[] args) throws Exception {//1、注册驱动Class.forName("com.mysql.jdbc.Driver");//2、获取连接//url的格式是:"jdbc:mysql://mysql的ip:端口号/操作的数据库"String url="jdbc:mysql://127.0.0.1:3306/kc_db01";//username是你的mysql用户名String username="root";//password是你的mysql密码String password="123456";Connection conn= (Connection) DriverManager.getConnection(url, username, password);//3、定义sqlString sql="update emp set salary=666 where ename='zhangsan'";//4、获取执行sql的Statement对象Statement stat=conn.createStatement();//5、执行sql语句,count就是影响的行数int count=stat.executeUpdate(sql);//6处理结果System.out.println("影响的行数:"+count);//7、释放资源(先开后释放)stat.close();conn.close();}
}

数据库之前:

 运行结果:

 运行之后数据库:

一、DriverManager

DriverManager(驱动管理类)作用:

1、注册驱动

2、获取数据库连接

1、注册驱动:

Class.forName("com.mysql.jdbc.Driver");

注册驱动的书写方法,表面上没有使用  DriverManager类,选中Driver,ctrl+b看源码可知


package com.mysql.jdbc;import java.sql.DriverManager;
import java.sql.SQLException;public class Driver extends NonRegisteringDriver implements java.sql.Driver {public Driver() throws SQLException {}static {try {DriverManager.registerDriver(new Driver());} catch (SQLException var1) {throw new RuntimeException("Can't register driver!");}}
}

它使用了 DriverManager.registerDriver()的方法

在MySQL5之后的驱动包,可以省略注册驱动的步骤

自动加载jar包中的META-INF/services/java.sql.Driver文件的驱动类

 2、获取连接

static Connection         getConnection(String url,String user,String password)

参数

  1、url:连接路径

        语法:jdbc:mysql://ip地址(域名):端口号/数据库名称?参数键值对1&参数键值对2....

        举例:jdbc:mysql://127.0.0.1:3306/db1(本机127.0.0.1,本机域名:localhost)

   细节: 如果连接的是本机mysql服务器,并且mysql默认端口号是3306  ,则url可以简写为:jdbc:mysql://数据库名称?参数键值对如:jdbc:mysql:///db1

配置userSSL=false参数,禁用安全连接方式,解决警告提示

2、user:用户名

3、password:密码

解决警告提示:

?userSSL=false

String url="jdbc:mysql://127.0.0.1:3306/db1?useSSL=false";

二、Connection

Connection(数据库连接对象)作用:

        1、获取执行SQL的对象

        2、管理事务

2.1、获取执sql对象

  • 普通执行SQL对象

Statement   createStatement()

  • 预编译SQL的执行SQL对象:防止SQL注入

PrepareStatement    prepareStatement(sql)

  • 执行存储过程对象

CallableStatement   prepareCall(sql)

2.2、事务管理

    2.2.1、mysql事务管理

开启事务:BEGIN;/START  TRANSACTION(start transaction)

提交事务:COMMIT;

回滚事务:ROLLBACK;

(MySQL默认自动提交事务)

JDBC事务管理: 

     Connection接口中定义了3个对应的方法

开启事务:setAutoCommit(boolean autoCommit);true为自动提交事务,false为手动提交事务(开启事务)

提交事务:commit()

回滚事务:rollback()

2.2.2、演示jdbc的事务

复制前面弄过的类到包下

package com.jdbc;import com.mysql.jdbc.Connection;import java.sql.DriverManager;
import java.sql.SQLException;
import java.sql.Statement;public class JDBCConnectionDemo {public static void main(String[] args) throws Exception {//1、注册驱动Class.forName("com.mysql.jdbc.Driver");//2、获取连接//url的格式是:"jdbc:mysql://mysql的ip:端口号/操作的数据库"String url="jdbc:mysql://127.0.0.1:3306/kc_db01";//username是你的mysql用户名String username="root";//password是你的mysql密码String password="123456";Connection conn= (Connection) DriverManager.getConnection(url, username, password);//3、定义sqlString sql1="update emp set salary=6666 where ename='zhangsan'";String sql2="update emp set salary=6666 where ename='lisi'";//4、获取执行sql的Statement对象Statement stat=conn.createStatement();//选中要处理的异常部分,ctrl+alt+t快捷键生成try {//开启事务conn.setAutoCommit(false);//执行sqlint count1=stat.executeUpdate(sql1);//处理结果System.out.println("影响的行数:"+count1);//执行时sqlint count2=stat.executeUpdate(sql2);//处理结果System.out.println("影响的行数:"+count2);//提交事务conn.commit();} catch (Exception e) {e.printStackTrace();//回滚事务(回到开启事务之前,即什么也没处理前)conn.rollback();}finally {//7、释放资源(先开后释放)stat.close();conn.close();}}
}

运行之前数据库emp表:

 运行结果:

 运行之后数据库emp表:

try之中的发生了异常 ,就会 被catch捕获,发生回滚,回滚到还没有开启事务之前,就是数据没有修改之前,若是没有用事务,就会导致可能一个成功一个失败,这是我们不愿意看到的。 启用了事务,用了回滚事务,可以保证多个事务要么同时成功,要么同时失败。

三、Statement

Statemen作用:

3.1、执行sql语句

int  executeUpdate(sql): 执行DML(对数据的增删改)DDL(对表和库的增删改)语句

返回值:(1)DML语句影响的行数(2)DDL语句执行后,执行成功也可能返回0

ResultSet   executeQuery(sql):执行DQL(对数据的查询操作)语句

返回值:ResultSet结果对象

四、ResultSet

ResultSet(结果集对象)作用:

1.封装了DQL查询语句的结果

ResultSet  stmt.executeQuery(sql):执行DQL语句,返回ResultSet对象

获取查询结果

boolean   next():(1)将光标从当前位置向前移动一行(2)判断当前行是否是有效行

    返回值:当前行有数据返回true,当前没数据返回false。

xxx     getXxx(参数):获取数据

    解释:xxx表示数据类型;如int  getInt(参数);String getString(参数);

    参数:对于int是列的编号,从1开始,对于String是列的名称。

使用步骤:

1、游标向下移动一行,并判断该行是否有数据:next()

2、获取数据:getXxx(参数)

示例:

while(rs.next()){rs.getXxx(参数);
}

实例:

package com.jdbc;import com.mysql.jdbc.Connection;import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;public class JDBCDemo3_ResultSet {public static void main(String[] args) throws Exception {//1、注册驱动Class.forName("com.mysql.jdbc.Driver");//2、获取连接//url的格式是:"jdbc:mysql://mysql的ip:端口号/操作的数据库"String url="jdbc:mysql://127.0.0.1:3306/kc_db01";//username是你的mysql用户名String username="root";//password是你的mysql密码String password="123456";Connection conn= (Connection) DriverManager.getConnection(url, username, password);//3、定义sqlString sql="select *from emp";//4、获取执行sql的Statement对象Statement stmt=conn.createStatement();//5、执行sql语句ResultSet rs=stmt.executeQuery(sql);//6处理结果while(rs.next()){//获取数据 getXxx();括号中可以写所在行,也可以写列名int id=rs.getInt(1);String ename=rs.getString(2);int salary=rs.getInt(3);//另一种写法:写行的名称
//          int id=rs.getInt("id");
//          String ename=rs.getString("ename");
//          int salary=rs.getInt("salary");System.out.println(id);System.out.println(ename);System.out.println(salary);System.out.println("-----------");}//7、释放资源(先开后释放)rs.close();stmt.close();conn.close();}
}

数据库中emp表

 运行之后:

 ResultSet案例

需求:查询account账户数据,封装为Account对象中,并且存储到ArrayList集合中

 创建一个pojo包,用来存放对象的。

 创建了一个类,提供getSet方法

package com.pojo;public class Account {private int id;private String ename;private int salary;public int getId() {return id;}public void setId(int id) {this.id = id;}public String getEname() {return ename;}public void setEname(String ename) {this.ename = ename;}public int getSalary() {return salary;}public void setSalary(int salary) {this.salary = salary;}//为了更好的显示,重写toString()方法@Overridepublic String toString() {return "Account{" +"id=" + id +", ename='" + ename + '\'' +", salary=" + salary +'}'+"\n";}
}

jdbc包下创建的类中

package com.jdbc;import com.mysql.jdbc.Connection;
import com.pojo.Account;import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.List;public class JDBCDemo4_ResultSet {public static void main(String[] args) throws Exception {//1、注册驱动Class.forName("com.mysql.jdbc.Driver");//2、获取连接//url的格式是:"jdbc:mysql://mysql的ip:端口号/操作的数据库"String url="jdbc:mysql://127.0.0.1:3306/kc_db01";//username是你的mysql用户名String username="root";//password是你的mysql密码String password="123456";Connection conn= (Connection) DriverManager.getConnection(url, username, password);//3、定义sqlString sql="select *from emp";//4、获取执行sql的Statement对象Statement stmt=conn.createStatement();//5、执行sql语句ResultSet rs=stmt.executeQuery(sql);//6处理结果//创建集合对象List list=new ArrayList<>();while(rs.next()){//创建Account对象Account account=new Account();//获取数据 getXxx();括号中可以写所在行,也可以写列名int id=rs.getInt(1);String ename=rs.getString(2);int salary=rs.getInt(3);//赋值数据account.setId(id);account.setEname(ename);account.setSalary(salary);list.add(account);}System.out.println(list);//7、释放资源(先开后释放)rs.close();stmt.close();conn.close();}
}

运行结果:

五、PreparedStatement

5.1、PreparedStatement作用:

1、预编译SQL语句并执行:预防SQL注入问题

5.2、SQL注入

SQL注入是通过操作输入来修改事先定义好的SQL语句,用以达到执行代码对服务器进行攻击的方法。

演示普通登录:

首先数据录kc_db1下的emp表为:

package com.jdbc;import com.mysql.jdbc.Connection;import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;public class JDBCDemo5_UserLogin {public static void main(String[] args) throws Exception {//2、获取连接//url的格式是:"jdbc:mysql://mysql的ip:端口号/操作的数据库"String url="jdbc:mysql://127.0.0.1:3306/kc_db01";//username是你的mysql用户名String username="root";//password是你的mysql密码String password="123456";Connection conn= (Connection) DriverManager.getConnection(url, username, password);String name="zhangsan";String pwd="1233";//3、定义sqlString sql="select *from emp where ename='"+name+"'and password='"+pwd+"'" ;System.out.println("这条SQL语句是:"+sql);//4、获取执行sql的Statement对象Statement stat=conn.createStatement();//5、执行sql语句ResultSet rs = stat.executeQuery(sql);//6处理结果,rs有值说明查找成功if(rs.next()){System.out.println("登录成功");}else{System.out.println("登录失败");}//7、释放资源(先开后释放)rs.close();stat.close();conn.close();}
}

运行结果:

 输入其他(不成功的原因是数据库中没有账号密码为这个的):

5.2.1、 sql注入演示:

对于这条sql语句来说不点在于密码,账号任意

 String name="随便写的名";String pwd=" ' or '1'='1";

运行结果:

这条SQL语句是:select *from emp where ename='随便写的名'and password=' ' or  '1'='1'

 sql注入的本质就是改变原有的SQL语句,加入or之后1=1恒为真,所以这条语句就是true

5.3、PreparedStatement解决SQL注入

①获取PreparedStatement对象

//sql语句中的参数,使用?占位符代替
String sql="select *from user where username=? and password=?";
//通过Connection对象获取,并传入对应的sql语句
PreparedStatement  pstmt=conn.prepareStatement(sql);

②设置参数

PreparedStatement对象:setXxx(参数1,参数2):表示给参数1(?的位置)赋值为参数2

Xxx:数据类型;任意setInt(参数1,参数2)

参数

  •    参数1:表示?的位置编号,从1开始
  •    参数2: ?的值

③执行sql

executeUpdate();/excuteQuery();括号内不需要传递sql。

创建类:

package com.jdbc;import com.mysql.jdbc.Connection;import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.Statement;
import java.util.Scanner;public class JDBCDemo5_UserLogin {public static void main(String[] args) throws Exception {//2、获取连接//url的格式是:"jdbc:mysql://mysql的ip:端口号/操作的数据库"String url="jdbc:mysql://127.0.0.1:3306/kc_db01";//username是你的mysql用户名String username="root";//password是你的mysql密码String password="123456";Connection conn= (Connection) DriverManager.getConnection(url, username, password);String name="随便写的名";String pwd=" ' or '1'='1";//3、定义sqlString sql="select *from emp where ename=? and password=?" ;//4、获取的PreparedStatement对象PreparedStatement pstmt = conn.prepareStatement(sql);//设置参数pstmt.setString(1, name);pstmt.setString(2, pwd);//5、执行sql语句ResultSet rs =pstmt.executeQuery();System.out.println("这条SQL语句是:"+sql);//6处理结果,rs有值说明查找成功if(rs.next()){System.out.println("登录成功");}else{System.out.println("登录失败");}//7、释放资源(先开后释放)rs.close();pstmt.close();conn.close();}
}

 运行结果:

 这样就防止了sql注入,setXxx会对传入的参数会进行转义,不会拼接成字符串而是\' or\ ' 1\' = \' 1\'

 输入正确的:

 5.4、PrepareStatement原理

PrepareStatement好处:

1、预编译SQL,性能更高

2、防止sql注入。

my.ini配置文件可以看到日志


log-output=FILE 
general-log=1
general_log_file="D:\mysql.log" 
slow-query-log=1
slow_query_log_file="D:\mysql_slow.log" 
long_query_time=2

预编译功能默认关闭

①:PreparedStatement预编译功能开启:userServerPrepStmts=true

 在sql语句?之后书写参数

        String url="jdbc:mysql://127.0.0.1:3306/kc_db01"?userServerPrepStmts=true;

开启就会要prepare预编译: 

 关闭之后就没有Prepare阶段

六、数据库连接池简介

①数据库连接池是个容器,负责分配管理数据库连接(Connection)

②他允许应用程序重复使用一个现有的数据录连接,而不是再重新建立一个(其实就是提前建立好连接之后直接用)

③释放空闲时间超过最大空闲时间的数据库链接来避免因为没有释放数据库连接而引起的数据库连接遗漏

6.1、数据库连接池优点

①资源重用(用完放回,而不释放)

②提升系统的响应速度(提前申请好了,要用是直接重连接池拿即可)

③避免数据录连接遗漏(某一资源超过最大时间强制会放回)

6.2、数据录库连接池实现

标准接口:DataSource

官方(SUN)提供的数据库连接池标准接口,由第三方组织实线这个接口

功能:获取连接

Connection getConnection()

常见的数据库连接池:

DBCP

C3P0

Druid(德鲁伊):Druid连接池是阿里巴巴开源的数据库连接池项目,功能强大,性能优秀,是Java语言最好的数据库连接池之一。

6.3、Driud使用步骤

1、导入Driud的jar包

2、定义配置文件

3、加载配置文件

4、获取数据库连接池对象

5、获取连接

1、导入Druid的jar包,直接赋值jar包到lib目录下即可

 选中jar包右键选择添加库,选择jar的作用范围为模块即可

2、定义配置文件druid.properties

 内容一般为:

driverClassName=com.mysql.jdbc.Driver
url=jdbc:mysql://127.0.0.1:3306/kc_db01?useSSL=false&useServerPrepStmts=true
username=root
password=123456
#初始化连接数量
initialSize=5
#最大连接数量
maxActive=10
#最大等待时间
maxWait=3000

直接赋值刚才写的配置文件druid.properties复制到src下

 类下:

package com.druid;import com.alibaba.druid.pool.DruidDataSourceFactory;import javax.sql.DataSource;import java.io.FileInputStream;
import java.sql.Connection;
import java.util.Properties;public class druidDemo {public static void main(String[] args) throws Exception {//1、导入jar包//2、定义配置文件//3、加载配置文件Properties prop=new Properties();//加载prop.load(new FileInputStream("jdbc-demo/src/druid.properties"));//4、获取连接池对象DataSource dataSource = DruidDataSourceFactory.createDataSource(prop);//5、获取数据库连接ConnectionConnection connection = dataSource.getConnection();System.out.println(connection);//打印当前路径System.out.println(System.getProperty("user.dir"));//E:\jdbc}
}

运行结果: 

七、完成商品品牌数据的增删改查操作

查询:查询所有数据

添加:添加品牌

修改:根据id修改

删除:根据id删除

准备环境:

数据库表tb-brand

实体类Brand

测试用例

 表的信息


drop table if exists tb_brand;
-- 创建tb_brand表
create table tb_brand
( -- id 主键 id 	int primary key auto_increment, -- 品牌名称brand_name varchar(20), -- 企业名称company_name varchar(20), -- 排序字段ordered int, -- 描述信息description varchar(100), -- 状态:0:禁用1启用`status` int 
)
character set utf8;
-- 添加数据 
insert into tb_brand (brand_name, company_name, ordered, description, `status`)
values ('三只松鼠','三只松鼠股份有限公司',5,'好吃不上火',0), 
('华为','华为技术有限公司',100,'华为致力于把数字世界带入每个人、每个家庭、每个组织,构建万物互联的智能世界',1),
('小米','小米科技有限公司', 50,'are you ok', 1);
SELECT * FROM tb_brand;

 整列编辑:alt+鼠标左键

快捷生成方法:alt+insert

1、查询所有 

 在pojo包下创建一个类(pojo就是用来存放对象的Brand):

package com.pojo;public class Brand {// id 主键private Integer id;// 品牌名称private String brand_name;// 企业名称private String company_name;// 排序字段private Integer ordered;// 描述信息private String description;// 状态:0:禁用1启用private Integer status;public Integer getId() {return id;}public void setId(Integer id) {this.id = id;}public String getBrand_name() {return brand_name;}public void setBrand_name(String brand_name) {this.brand_name = brand_name;}public String getCompany_name() {return company_name;}public void setCompany_name(String company_name) {this.company_name = company_name;}public Integer getOrdered() {return ordered;}public void setOrdered(Integer ordered) {this.ordered = ordered;}public String getDescription() {return description;}public void setDescription(String description) {this.description = description;}public Integer getStatus() {return status;}public void setStatus(Integer status) {this.status = status;}@Overridepublic String toString() {return "Brand{" +"id=" + id +", brand_name='" + brand_name + '\'' +", company_name='" + company_name + '\'' +", ordered='" + ordered + '\'' +", description='" + description + '\'' +", status=" + status +'}'+"\n";}
}

因为status是状态0或1,如果我们弄int类型,默认值是0,而用Integer包装类默认值则是null,符合我们的要求

新建一个example创建一个BrandText类

package com.example;import com.alibaba.druid.pool.DruidDataSourceFactory;
import com.pojo.Brand;
import org.junit.Test;import javax.sql.DataSource;
import java.io.FileInputStream;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.util.ArrayList;
import java.util.List;
import java.util.Properties;/*** 品牌数据的增删改查*/
public class BrandText {/*** 查询所有的* 1、SQL:select*from tb_brand* 2、参数:不需要* 3、结果:List*/@Testpublic void textSelectAll() throws Exception{//1、获取Connection连接对象Properties prop=new Properties();//加载prop.load(new FileInputStream("E://JDBC/jdbc-demo/src/druid.properties"));//获取连接池对象DataSource dataSource = DruidDataSourceFactory.createDataSource(prop);//获取数据库连接ConnectionConnection conn = dataSource.getConnection();//2、定义SQLString sql="select*from tb_brand";//3、获取pstmt对象PreparedStatement pstmt=conn.prepareStatement(sql);//4、设置参数//5、执行sqlResultSet rs=pstmt.executeQuery();//6、处理结果List  封装Brand对象,装载到List集合//创建List集合对象List list=new ArrayList<>();Brand brand=null;while(rs.next()){//获取数据int id = rs.getInt("id");//快捷键ctrl+alt+v生成左边String brandName = rs.getString("brand_name");String companyName = rs.getString("company_name");int ordered = rs.getInt("ordered");String description = rs.getString("description");int status = rs.getInt("status");//封装Brand对象brand=new Brand();brand.setId(id);brand.setBrand_name(brandName);brand.setCompany_name(companyName);brand.setOrdered(ordered);brand.setDescription(description);brand.setStatus(status);list.add(brand);}System.out.println(list);//7、释放资源rs.close();pstmt.close();conn.close();}
}

运行结果: 

2、增加数据

/*** 添加* SQL:insert into tb_brand (brand_name, company_name, ordered, description, status)values(?,?,?,?,?);* 参数是除了id之外的所有参数信息* 结果:boolean* @throws Exception*/@Testpublic void textAdd()throws Exception{/*模拟页面提交的参数品牌名称[]'*/String brand_name="阿里巴巴";// 企业名称String company_name="阿里巴巴";// 排序字段int ordered=1;// 描述信息String description="知名top企业";// 状态:0:禁用1启用int status=1;//1、获取Connection连接对象Properties prop=new Properties();//加载prop.load(new FileInputStream("E://JDBC/jdbc-demo/src/druid.properties"));//获取连接池对象DataSource dataSource = DruidDataSourceFactory.createDataSource(prop);//获取数据库连接ConnectionConnection conn = dataSource.getConnection();//2、定义SQLString sql="insert into tb_brand (brand_name, company_name, ordered, description, status)values(?,?,?,?,?)";//3、获取pstmt对象PreparedStatement pstmt=conn.prepareStatement(sql);//4、设置参数pstmt.setString(1, brand_name);//ctrl+b快速复制pstmt.setString(2, company_name);pstmt.setInt(3, ordered);pstmt.setString(4, description);pstmt.setInt(5, status);//5、执行sqlint count = pstmt.executeUpdate();System.out.println(count>0);//7、释放资源pstmt.close();conn.close();}

乱码问题: 

我们运行之后发查询数据库发现乱码了,此时说明编码不一致,只需要在配置文件druid.properties中加入:

characterEncoding=utf8

 加完之后运行:

3、修改数据

 @Testpublic void textUpdate()throws Exception{/*模拟页面提交的参数品牌名称[]'*/String brand_name="一本正经";// 企业名称String company_name="一本";// 排序字段int ordered=666;// 描述信息String description="心心比心";// 状态:0:禁用1启用int status=1;int id=3;//1、获取Connection连接对象Properties prop=new Properties();//加载prop.load(new FileInputStream("E://JDBC/jdbc-demo/src/druid.properties"));//获取连接池对象DataSource dataSource = DruidDataSourceFactory.createDataSource(prop);//获取数据库连接ConnectionConnection conn = dataSource.getConnection();//2、定义SQLString sql="update tb_brand set brand_name=?,company_name=?,ordered=?,description=?,status=? where id=?";//3、获取pstmt对象PreparedStatement pstmt=conn.prepareStatement(sql);//4、设置参数pstmt.setString(1, brand_name);//ctrl+b快速复制pstmt.setString(2, company_name);pstmt.setInt(3, ordered);pstmt.setString(4, description);pstmt.setInt(5, status);pstmt.setInt(6, id);//5、执行sqlint count = pstmt.executeUpdate();System.out.println(count>0);//7、释放资源pstmt.close();conn.close();}

运行结果: 

 数据库中的数据变化:

 4、删除数据

 /*** 删除数据的sql为delete from 表名 where 删除条件* @throws Exception*/@Testpublic void textDelete()throws Exception{//1、获取Connection连接对象Properties prop=new Properties();//加载prop.load(new FileInputStream("E://JDBC/jdbc-demo/src/druid.properties"));//获取连接池对象DataSource dataSource = DruidDataSourceFactory.createDataSource(prop);//获取数据库连接ConnectionConnection conn = dataSource.getConnection();//2、定义SQLString sql="delete from tb_brand where id=3";//3、获取pstmt对象PreparedStatement pstmt=conn.prepareStatement(sql);//5、执行sqlint count = pstmt.executeUpdate();System.out.println("删除"+(count>0));//7、释放资源pstmt.close();conn.close();}

运行结果:

 数据库对比图;

 后面也可以通过前端回传数据到后端接收来使用数据


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部