java中JDBC的讲解

您所在的位置:网站首页 model在java中 java中JDBC的讲解

java中JDBC的讲解

#java中JDBC的讲解| 来源: 网络整理| 查看: 265

1. JDBC入门 1.1编写步骤

创建工程,导入驱动jar包

注册驱动

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

获取连接

Java代码需要发送SQL给MySQL服务端,就需要先建立连接

Connection conn = DriverManager.getConnection(url, username,password);

定义SQL语句

String sql = “update…” ;

获取执行SQL对象

执行SQL语句需要SQL执行对象,而这个执行对象就是Statement对象

Statement stmt = conn.createStatement();

执行SQL

stmt.executeUpdate(sql);

处理返回结果

释放资源

1.2具体操作

创建新的空的项目

定义项目的名称,并指定位置

对项目进行设置,JDK版本、编译版本

创建模块,指定模块的名称及位置

导入驱动包

将mysql的驱动包放在模块下的lib目录(随意命名)下,并将该jar包添加为库文件

在添加为库文件的时候,有如下三个选项

Global Library : 全局有效

Project Library : 项目有效

Module Library : 模块有效

在src下创建类

具体代码

package com.shujuku.jdbc; import java.sql.Connection; import java.sql.DriverManager; import java.sql.Statement; /** * JDBC快速入门 */ public class JDBCDemo { public static void main(String[] args) throws Exception { //1.注册驱动 Class.forName("com.mysql.cj.jdbc.Driver"); //2.获取链接 String url = "jdbc:mysql://127.0.0.1:3306/schoolinfo"; //3306/ 后面写要连接的数据库的名字 String username = "root"; String password = "*******"; Connection conn = DriverManager.getConnection(url, username, password); //3.定义SQL语句 String sql = "update yuangong set salary = 3000 where id = 8005"; // String sql = "select * form yuangong"; //4.获取执行sql的对象Statement Statement stmt = conn.createStatement(); //5.执行sql int count = stmt.executeUpdate(sql); //受影响的行数 //6.处理结果 System.out.println(count); //7.释放资源 stmt.close(); conn.close(); //因为先开connection后开statement,所以先释放statement } }

2. JDBC API详解 2.1 DriverManage(驱动管理类)作用

2.1.1 注册驱动:registerDriver(Driverdriver); //使用DriverManager注册给定的驱动程序

在Class.ForName中已经有了,没有也可以,在jar包中已经有了,所以Class.ForName删除也可以驱动成功

2.1.2 getConnection(Stringurl, String user, String password); //尝试建议与给定数据库URL的连接

url :

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

例:jdbc:mysql://127.0.0.1:3306/db1

注意:本机mysql服务器,并且端口是3306,可简写为:jdbc:mysql:///数据库名称?参数键值对。(三个斜杠)

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

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

2.2.1 获取执行SQL的对象:

普通执行SQL对象:StatementcreateStatement()

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

PreparedStatement preparedStatement(sql) 后面详讲

执行存储过程的对象(不重要):

CallableStatement prepareCall(sql)

2.2.2 管理事务:

MySQL事务管理:

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

提交事务:COMMIT;

回滚事务:ROLLBACK;

(MySQL默认自动提交事务)

JDBC事务管理:Connection接口中定义了3个对应的方法

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

提交事务:commit()

回滚事务:rollback()

代码

package com.shujuku.jdbc.api2; import java.sql.Connection; import java.sql.DriverManager; import java.sql.SQLException; import java.sql.Statement; /** * JDBC API:Connection */ public class JDBCDemo3 { public static void main(String[] args) throws Exception { //1.注册驱动 /** * 用"com.mysql.cj.jdbc.Driver" * "com.mysql.jdbc.Driver"已经被弃用 */ //Class.forName("com.mysql.cj.jdbc.Driver"); //2.获取链接 //简写 String url = "jdbc:mysql:///schoolinfo"; String username = "root"; String password = "******"; Connection conn = DriverManager.getConnection(url, username, password); //3.定义SQL语句 // String sql = "select * form yuangong"; String sql1 = "update yuangong set salary = 3000 where id = 8005"; String sql2 = "update yuangong set salary = 3000 where id = 8004"; //4.获取执行sql的对象Statement Statement stmt = conn.createStatement(); //开启事务 conn.setAutoCommit(false); try { //5.执行sql int count1 = stmt.executeUpdate(sql1); //受影响的行数 //6.处理结果 System.out.println(count1); //异常 int i = 3/0; /** * 出现错误两个都不会更改----- */ //5.执行sql int count2 = stmt.executeUpdate(sql2); //受影响的行数 //6.处理结果 System.out.println(count2); //提交事务 conn.commit(); } catch (Exception e) { //事务回滚,上面出现异常会回滚 conn.rollback(); e.printStackTrace(); } //7.释放资源 stmt.close(); conn.close(); //因为先开connection后开statement,所以先释放statement } }

报错回滚

在回滚报错后,数据库中的数据两条都不会改变

2.3 Statement的作用

执行SQL语句

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

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

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

返回值:ResultSet结果集对象

DML

package com.shujuku.jdbc.api4; import org.junit.Test; import java.sql.Connection; import java.sql.DriverManager; import java.sql.SQLException; import java.sql.Statement; /** * JDBC API: Statement */ public class JDBCDemo4 { @Test public void testDML() throws SQLException { //1.注册驱动 /** * 用"com.mysql.cj.jdbc.Driver" * "com.mysql.jdbc.Driver"已经被弃用 */ //Class.forName("com.mysql.cj.jdbc.Driver"); //2.获取链接 //简写 String url = "jdbc:mysql:///schoolinfo"; String username = "root"; String password = "******"; Connection conn = DriverManager.getConnection(url, username, password); //3.定义SQL语句 String sql = "update yuangong set salary = 3000 where id = 8005"; //1.更改数据 //4.获取执行sql的对象Statement Statement stmt = conn.createStatement(); //5.执行sql int count = stmt.executeUpdate(sql); //1.受影响的行数,即执行DML的返回值, 输出:>1(成功),0(失败) //6.处理结果 System.out.println(count); if(count > 0){ System.out.println("修改成功~"); System.out.println("修改成功~"); }else{ System.out.println("修改失败~"); } //7.释放资源 stmt.close(); conn.close(); //因为先开connection后开statement,所以先释放statement } }

DDL

创建新的数据库:

package com.shujuku.jdbc.api4; import org.junit.Test; import java.sql.Connection; import java.sql.DriverManager; import java.sql.SQLException; import java.sql.Statement; /** * JDBC API: Statement */ public class JDBCDemo4 { @Test public void testDML() throws SQLException { //1.注册驱动 /** * 用"com.mysql.cj.jdbc.Driver" * "com.mysql.jdbc.Driver"已经被弃用 */ //Class.forName("com.mysql.cj.jdbc.Driver"); //2.获取链接 //简写 String url = "jdbc:mysql:///schoolinfo"; String username = "root"; String password = "******"; Connection conn = DriverManager.getConnection(url, username, password); //3.定义SQL语句 // String sql = "update yuangong set salary = 3000 where id = 8005"; //1.更改数据 String sql ="create database db2"; //2.创建新的数据库 //4.获取执行sql的对象Statement Statement stmt = conn.createStatement(); //5.执行sql int count = stmt.executeUpdate(sql); //1.受影响的行数,即执行DML的返回值, 输出:>1(成功),0(失败) //6.处理结果 System.out.println(count); if(count > 0){ System.out.println("修改成功~"); System.out.println("修改成功~"); }else{ System.out.println("修改失败~"); } //7.释放资源 stmt.close(); conn.close(); //因为先开connection后开statement,所以先释放statement } }

删除数据库:

//5.执行sql

int count = stmt.executeUpdate(sql); //1.受影响的行数,即执行DML的返回值, 输出:>1(成功),0(失败)

/*

2.执行DDL语句,执行成功后返回不一定大于0.如:删除数据库,所以不能用count来判断是否成功

*/

package com.shujuku.jdbc.api4; import org.junit.Test; import java.sql.Connection; import java.sql.DriverManager; import java.sql.SQLException; import java.sql.Statement; /** * JDBC API: Statement */ public class JDBCDemo4 { @Test public void testDML() throws SQLException { //1.注册驱动 /** * 用"com.mysql.cj.jdbc.Driver" * "com.mysql.jdbc.Driver"已经被弃用 */ //Class.forName("com.mysql.cj.jdbc.Driver"); //2.获取链接 //简写 String url = "jdbc:mysql:///schoolinfo"; String username = "root"; String password = "*******"; Connection conn = DriverManager.getConnection(url, username, password); //3.定义SQL语句 // String sql = "select * form yuangong"; // String sql = "update yuangong set salary = 3000 where id = 8005"; //1.更改数据 // String sql ="create database db2"; //2.创建新的数据库 String sql = "drop database db2"; //3.删除数据库 //4.获取执行sql的对象Statement Statement stmt = conn.createStatement(); //5.执行sql int count = stmt.executeUpdate(sql); //1.受影响的行数,即执行DML的返回值, 输出:>1(成功),0(失败) /* 2.执行DDL语句,执行成功后返回不一定大于0.如:删除数据库,所以不能用count来判断是否成功 */ //6.处理结果 System.out.println(count); // if(count > 0){ // System.out.println("修改成功~"); // System.out.println("修改成功~"); // }else{ // System.out.println("修改失败~"); // } //7.释放资源 stmt.close(); conn.close(); //因为先开connection后开statement,所以先释放statement } } 2.4 ResultSet作用

封装了DQL查询语句的结果

ResultSet stmt.executeQuery(sql) : 执行DQL语句,返回ResultSet对象(对数据的查询操作)

获取查询结果

Boolean next() :

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

返回值

true :有效行,当前行有数据

false :无效行,当前行没有数据

xxx getXxx(参数) :获取数据

xxx :是数据类型;如:intgetint(参数) ;String getString(参数)

返回列的对应的类型

参数:(选择行)

int :列的编号,从1开始

String :列的名称

使用步骤:代码用循环

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

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

//循环判断游标是否是最后一行末尾

while(rs.next()){

//获取数据

rs.getXxx(参数)

}

处理结果中有两种方法

package com.shujuku.jdbc.api5; import com.shujuku.pojo.Account; import org.junit.Test; import java.sql.*; import java.util.ArrayList; import java.util.List; /** * JDBC API: Result */ public class JDBCDemo5 { @Test public void testResult() throws SQLException { //1.注册驱动 /** * 用"com.mysql.cj.jdbc.Driver" * "com.mysql.jdbc.Driver"已经被弃用 */ //Class.forName("com.mysql.cj.jdbc.Driver"); //2.获取链接 //简写 String url = "jdbc:mysql:///schoolinfo"; String username = "root"; String password = "******"; Connection conn = DriverManager.getConnection(url, username, password); //3.定义sql String sql = "select *from yuangong"; //4.获取statement对象 Statement stmt = conn.createStatement(); //5.执行sql ResultSet rs = stmt.executeQuery(sql); //6.处理结果,遍历rs中的所有数据 //6.1游标向下移动一行,并判断该行是否有数据 /** *1.第一种方法 */ // while (rs.next()){ // int id = rs.getInt(1); // String name = rs.getString(2); // double money =rs.getDouble(6); // // System.out.println(id); // System.out.println(name); // System.out.println(money); // // System.out.println("--------------"); // } /** * 2.第二种方法:重载 */ while (rs.next()){ int id = rs.getInt("id"); String name = rs.getString("name"); double money =rs.getDouble("salary"); System.out.println(id); System.out.println(name); System.out.println(money); System.out.println("--------------"); } //释放资源 rs.close(); stmt.close(); conn.close(); }

案例:

/** * 查询yuangong表数据,封装为Account对象中,并且存储到ArrayList集合中 * 1.定义实体类 * 2.查询数据,封装到Account对象中 * 3.存储到ArrayList集合中 * @throws SQLException */ @Test public void testResult2() throws SQLException { //1.注册驱动 /** * 用"com.mysql.cj.jdbc.Driver" * "com.mysql.jdbc.Driver"已经被弃用 */ //Class.forName("com.mysql.cj.jdbc.Driver"); //2.获取链接 //简写 String url = "jdbc:mysql:///schoolinfo"; String username = "root"; String password = "******"; Connection conn = DriverManager.getConnection(url, username, password); //3.定义sql String sql = "select *from yuangong"; //4.获取statement对象 Statement stmt = conn.createStatement(); //5.执行sql ResultSet rs = stmt.executeQuery(sql); //创建集合 List list = new ArrayList(); /** * 2.重载 */ while (rs.next()){ //每查询一个数据都要创建一个对象 Account account = new Account(); int id = rs.getInt("id"); String name = rs.getString("name"); double money =rs.getDouble("salary"); //赋值 account.setId(id); account.setName(name); account.setMoney(money); //存入集合 list.add(account); } System.out.println(list); //释放资源 rs.close(); stmt.close(); conn.close(); } }

需要新建一个Account的实体类

public class Account { private int id; private String name; private double money; public int getId() { return id; } public void setId(int id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public double getMoney() { return money; } public void setMoney(double money) { this.money = money; } @Override public String toString() { return "Account{" + "id=" + id + ", name='" + name + '\'' + ", money=" + money + '}'; } }

结果

2.5 PreparedStatement作用

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

SQL注入

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

SQL注入:

public class JDBCDemo6 { /** *用户注入 */ @Test public void testLogin_Inject() throws SQLException { //2.获取链接 //简写 String url = "jdbc:mysql:///studentdb"; String username = "root"; String password = "******"; Connection conn = DriverManager.getConnection(url, username, password); //接收用户输入,用户名和密码 String name = "adfag"; String pwd = "' or '1' = '1"; //注入成功 String sql = "select * from admin where username = '"+name+"' and password = '"+pwd+"' "; //获取stmt对象 Statement stmt = conn.createStatement(); //执行sql ResultSet rs = stmt.executeQuery(sql); //判断是否成功 if(rs.next()){ System.out.println("登录成功"); }else { System.out.println("登录失败"); } //释放资源 rs.close(); stmt.close(); conn.close(); } }

在SQL语句中显示:先执行 username= 'afadhfh' and password = '' 然后就执行or '1'='1'

最后结果是true。

2.5.2 解决

(1)获取PreparedStatement对象

//SQL语句中的参数值,使用?占位符替代

String sql = “select * from user where username = ? andpassword = ?”;

//通过Connection对象获取,并传入对应的sql语句

PreparedStatement pstmt = conn.preparedStatement(sql);

(2)设置参数

preparedStatement对象:setXxx(参数1,参数2):给?赋值

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

参数:

参数1:?的位置编号,从1开始

参数2:?的值

(3)执行SQL

executeUpdate(); / executeQuery(); :不需要再传送sql语句

原理:对传入的字符串中的敏感字符串进行转义,' or '1' = '1 à \' or \'1\' = \'1

开启PreparedStatement的预编译功能:(在url中)

useServerPrepStmts=true String url = "jdbc:mysql:///studentdb?useServerPrepStmts=true"; //useServerPrepStmts=true开启预编译

具体实现

/** * PreparedStatement:原理 * @throws SQLException */ @Test public void testPreparedStatement2() throws SQLException { //1.注册驱动 /** * 用"com.mysql.cj.jdbc.Driver" * "com.mysql.jdbc.Driver"已经被弃用 */ //Class.forName("com.mysql.cj.jdbc.Driver"); //2.获取链接 //简写 String url = "jdbc:mysql:///studentdb?useServerPrepStmts=true"; //开PreparedStatement的预编译功能 String username = "root"; String password = "******"; Connection conn = DriverManager.getConnection(url, username, password); //接收用户输入,用户名和密码 String name = "user"; String pwd = "' or '1' = '1"; //定义SQL String sql = "select * from admin where username = ? and password = ?"; //获取pstmt对象 PreparedStatement pstmt = conn.prepareStatement(sql); //设置?值 pstmt.setString(1,name); pstmt.setString(2,pwd); //执行sql ResultSet rs = pstmt.executeQuery(); //判断是否成功 if(rs.next()){ System.out.println("登录成功"); }else { System.out.println("登录失败"); } //释放资源 rs.close(); pstmt.close(); conn.close(); } 3. 数据库连接池

标准接口:DataSource (都要实现这个接口)

功能:获取连接

Connection getConnection()

常见的数据库连接池

DBCP

C3P0

Druid

Druid(德鲁伊)

阿里巴巴开源数据库连接池项目

功能强大,性能优秀,用得较多。

Druid使用步骤

(1)导入包:druid-1.1.12.jar

(2)定义配置文件

(3)加载配置文件

(4)获取数据库连接池对象

(5)获取连接

打印出连接对象;

具体实现

(1)导入包:druid-1.1.12.jar

(2)定义配置文件

driverClassName=com.mysql.cj.jdbc.Driver url=jdbc:mysql:///text?useServerPrepStmts=true username=root password=****** # 初始化连接数量 initialSize=5 # 最大连接数 maxActive=10 # 最大等待时间 maxWait=3000

使用druid的代码如下:

/** * Druid数据库连接池演示 */ 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")); //写src/druid.properties会出现路径问题:找不到 //4.获取连接池对象 DataSource dataSource = DruidDataSourceFactory.createDataSource(prop); //5.获取数据库连接Connection Connection connection = dataSource.getConnection(); System.out.println(connection); /* 复制路径:复制到输出的路径的没有显示的路径,如下面显示到:jdbc,所以从jdbc_demo开始写 user.dir;是项目列表第一个路径 */ // System.out.println(System.getProperty("user.dir")); //获取当前路径:D:\c语言\java\学习项目\jdbc } }

注:System.out.println(System.getProperty("user.dir")); 这个是获取当前路径,在写路径时要从输出的最后的文件夹下一个目录开始

结果:

4. 练习:

查询:查询所有数据

添加:添加品牌

修改:根据id修改

删除:根据id删除

4.1 准备环境

数据库表tb_brand

实体类:Brand

测试用例:

数据库:createTABLE tb_brand(

id intPRIMARY KEY auto_increment COMMENT 'id主键',

brand_nameVARCHAR(20) COMMENT '品牌名称',

compay_nameVARCHAR(20) COMMENT '企业名称',

orderedint COMMENT '排序字段',

descriptionVARCHAR(100) COMMENT '描述信息',

statusint COMMENT '状态:0:禁用,1:启用'

);

数据:

insertinto tb_brand (brand_name,compay_name,ordered,description,status)

values ('三只松鼠','三只松鼠股份有限公司',5,'好吃不上火',0),

('华为','华为技术有限公司',100,'华为致力于把数字世界带入每个人、每个家庭、每个组织,构建万物互联的智能世界',1),

('小米','小米技术有限公司',50,'are you ok',1);

SELECT * from tb_brand;

可以将相同的符号、英文等同时替换掉其他符号等,快捷键:选中要替换的按Ctrl+r,上面的是原来的,下面是要替换的,最后点Replace All

同时编辑每一行(整列的编辑)的代码快捷键:Alt+鼠标左键 然后选中要编辑的区域

格式化代码(对应上面的分号回到末尾):Ctrl+Alt+l

在pojo包下实体类 Brand

/** * 品牌 * 类型和名称 */ public class Brand { //id 主键 private Integer id; // 品牌名称 private String brandName; // 企业名称 private String compayName; // 排序字段 private Integer ordered; // 描述信息 private String description; //状态 private Integer status; // Integer包装类型,默认值为null。 int有默认值,status没有给值 默认0,status = 0 是有含义,对业务产生影响 public Integer getId() { return id; } public void setId(Integer id) { this.id = id; } public String getBrandName() { return brandName; } public void setBrandName(String brandName) { this.brandName = brandName; } public String getCompayName() { return compayName; } public void setCompayName(String compayName) { this.compayName = compayName; } 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; } @Override public String toString() { return "Brand{" + "id=" + id + ", brandName='" + brandName + '\'' + ", compayName='" + compayName + '\'' + ", ordered=" + ordered + ", description='" + description + '\'' + ", status=" + status + '}'; } } 4.2 查询所有

获取Connection

定义SQL:select * from tb_brand;

获取PreparedStatement对象

设置参数:不需要

执行SQL

处理结果:List (有很多数据,封装Brand对象,封装成list集合)

释放资源

/** * 查询所有 * 1. SQL:select * from tb_brand; * 2. 设置参数:不需要 * 3. 处理结果:List */ @Test public void testSelectAll() throws Exception { //1.获取Connection //3.加载配置文件 Properties prop = new Properties(); prop.load(new FileInputStream("src/druid.properties")); //4.获取连接池对象 DataSource dataSource = DruidDataSourceFactory.createDataSource(prop); //5.获取数据库连接Connection Connection conn = dataSource.getConnection(); //System.out.println(connection); //2.定义SQL String sql = "select * from tb_brand;"; //获取pstmt对象 PreparedStatement pstmt = conn.prepareStatement(sql); //4.设置参数 //5.执行SQL ResultSet rs = pstmt.executeQuery(); Brand brand = null; //节约占空间,复用该变量 List brands = new ArrayList(); //6.处理结果 while (rs.next()){ //获取数据 int id = rs.getInt("id"); String brandName = rs.getString("brand_name"); String companyName = rs.getString("compay_name"); int ordered = rs.getInt("ordered"); String description = rs.getString("description"); int status = rs.getInt("status"); //封装Brand对象 brand = new Brand(); brand.setId(id); brand.setBrandName(brandName); brand.setCompayName(companyName); brand.setOrdered(ordered); brand.setDescription(description); brand.setStatus(status); //装载集合 brands.add(brand); //调用brands,调用brands中的add,把创建的brand对象放进的brands } System.out.println(brands); //7.释放资源 rs.close(); pstmt.close(); conn.close(); // System.out.println(System.getProperty("user.dir")); } 4.3 添加数据

1.编写SQL:insert intotb_brand(brand_name,company_name, ordered,description, status)

values(?,?,?,?,?);

2. 参数:需要,除了id之外的所有参数信息

3. 结果:boolean (true/false)

/** * 添加 * 1. SQL:insert into tb_brand(brand_name,company_name, ordered,description, status) * values(?,?,?,?,?); * 2. 参数:需要,除了id之外的所有参数信息 * 3. 结果:boolean (true/false) */ @Test public void testAdd() throws Exception { //接收页面提交的参数,(定义一些成员变量来模拟) String brandName = "香飘飘"; String compayName = "香飘飘"; int ordered = 1; String description = "绕地球一圈"; int status = 1; //1.获取Connection //3.加载配置文件 Properties prop = new Properties(); prop.load(new FileInputStream("src/druid.properties")); //4.获取连接池对象 DataSource dataSource = DruidDataSourceFactory.createDataSource(prop); //5.获取数据库连接Connection Connection conn = dataSource.getConnection(); //System.out.println(connection); //2.定义SQL String sql = "insert into tb_brand(brand_name,compay_name,ordered ,description ,status) value (?,?,?,?,?);"; //不用id //获取pstmt对象 PreparedStatement pstmt = conn.prepareStatement(sql); //4.设置参数(对问号设置参数) pstmt.setString(1,brandName); pstmt.setString(2,compayName); pstmt.setInt(3, ordered); pstmt.setString(4,description); pstmt.setInt(5, status); //5.执行SQL int count = pstmt.executeUpdate(); //影响的行数 //6.处理结果,输出boolean类型的值 System.out.println(count > 0); //7.释放资源 pstmt.close(); conn.close(); } 4.4 修改数据

1. SQL:

updatetb_brand

setbrand_name = ?,

company_name=?,

ordered =?,

description= ?,

status =?

where id= ?

2. 参数:需要,Brand对象所有数据

3. 结果:boolean

/** * 修改 * 1. SQL: update tb_brand * set brand_name = ?, * company_name= ?, * ordered = ?, * description = ?, * status = ? * where id = ? * 2. 参数:需要,Brand对象所有数据 * 3. 结果:boolean */ @Test public void testUpdate() throws Exception { //接收页面提交的参数,(定义一些成员变量来模拟) String brandName = "香飘飘"; String compayName = "香飘飘"; int ordered = 1000; String description = "绕地球三圈"; int status = 1; int id = 4; //1.获取Connection //3.加载配置文件 Properties prop = new Properties(); prop.load(new FileInputStream("src/druid.properties")); //4.获取连接池对象 DataSource dataSource = DruidDataSourceFactory.createDataSource(prop); //5.获取数据库连接Connection Connection conn = dataSource.getConnection(); //System.out.println(connection); //2.定义SQL String sql = "update tb_brand\n" + "set brand_name = ?,\n" + "compay_name= ?,\n" + "ordered = ?,\n" + "description = ?,\n" + "status = ?\n" + "where id = ?\n"; //获取pstmt对象 PreparedStatement pstmt = conn.prepareStatement(sql); //4.设置参数(对问号设置参数) pstmt.setString(1,brandName); pstmt.setString(2,compayName); pstmt.setInt(3, ordered); pstmt.setString(4,description); pstmt.setInt(5, status); pstmt.setInt(6,id); //5.执行SQL int count = pstmt.executeUpdate(); //影响的行数 //6.处理结果,输出boolean类型的值 System.out.println(count > 0); //7.释放资源 pstmt.close(); conn.close(); } 4.5 删除数据

根据id删除

1. SQL:

deletefrom tb_brand where id = ?

2. 参数:需要,id

3. 结果:boolean

/** * 删除(根据id删除) * 1. SQL: delete from tb_brand where id = ? * 2. 参数:需要,id * 3. 结果:boolean */ @Test public void testDeleteById() throws Exception { //接收页面提交的参数,(定义一些成员变量来模拟) int id = 4; //1.获取Connection //3.加载配置文件 Properties prop = new Properties(); prop.load(new FileInputStream("src/druid.properties")); //4.获取连接池对象 DataSource dataSource = DruidDataSourceFactory.createDataSource(prop); //5.获取数据库连接Connection Connection conn = dataSource.getConnection(); //System.out.println(connection); //2.定义SQL String sql = "delete from tb_brand where id = ?;"; //获取pstmt对象 PreparedStatement pstmt = conn.prepareStatement(sql); //4.设置参数(对问号设置参数) pstmt.setInt(1,id); //5.执行SQL int count = pstmt.executeUpdate(); //影响的行数 //6.处理结果,输出boolean类型的值 System.out.println(count > 0); //7.释放资源 pstmt.close(); conn.close(); }

感谢您的阅读!

dc2d0282-7c39-450e-a6b3-1022ec0f2ec0



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3