03_java基础(六)之CRUD实现
1.简单实现
package com.day01.station.dao; /**
* Created by Administrator on 2018/2/1.
*/ import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement; /**
* jdbc 连接数据库 加 连 语 执 释
* 1.加载
* 2.连接
* 3.创建编译语句
* 4.执行语句
* 5.释放资源
*/
public class ProductDao {
//增加 一个产品 包括 名称 和 卖价
public void save(String productName, int salePrice) {
System.out.println("--------我是增加方法---------");
System.out.println(" productName = " + productName + " , salePrice =" + salePrice); try {
//1. 加载
Class.forName("com.mysql.jdbc.Driver");
// * 2. 连接
// int age =18
//static Connection getConnection(String url, String user, String password)
//试图建立到给定数据库 URL 的连接。
Connection connection = DriverManager.getConnection("jdbc:mysql://localhost:3306/station_demo", "root", "admin");
// * 3. 创建编译语句
// Statement createStatement()
// 创建一个 Statement 对象来将 SQL 语句发送到数据库。
Statement statement = connection.createStatement();
// * 4. 执行语句
// int executeUpdate(String sql)
// 执行给定 SQL 语句,该语句可能为 INSERT、UPDATE 或 DELETE 语句,或者不返回任何内容的 SQL 语句(如 SQL DDL 语句)。
String sql="INSERT INTO product (product_name,sale_price) VALUES ('小米手机',1010)";
statement.executeUpdate(sql);
// * 5. 释放资源
statement.close();
connection.close(); } catch (Exception e) {
e.printStackTrace();
} } //删除 根据id删除产品
public void delete(int id) {
System.out.println(" --------我是删除方法--------- ");
System.out.println("---id=" + id); try {
//1.加载
Class.forName("com.mysql.jdbc.Driver");
//2.连接
Connection connection = DriverManager.getConnection("jdbc:mysql://localhost:3306/station_demo", "root", "admin");
//3.创建编译语句
Statement statement = connection.createStatement();
//4.执行语句
String sql="DELETE FROM product WHERE id=31";
statement.executeUpdate(sql);
//5.释放资源
statement.close();
connection.close(); } catch (Exception e) {
e.printStackTrace();
} } //修改 根据id 修改产品的名称
public void update(int id, String productName) {
System.out.println("--------我是修改方法---------");
System.out.println(" productName = " + productName + " , id =" + id);
try {
//1.加载
Class.forName("com.mysql.jdbc.Driver");
//2.连接
Connection connection = DriverManager.getConnection("jdbc:mysql://localhost:3306/station_demo", "root", "admin");
//3.创建编译语句
Statement statement = connection.createStatement();
//4.执行语句
String sql="UPDATE product SET sale_price=500,cost_price=200 WHERE id= 26 ";
statement.executeUpdate(sql);
//5.释放资源
statement.close();
connection.close(); } catch (Exception e) {
e.printStackTrace();
} } //查询
public String query() {
System.out.println("------我是查询方法----------");
try {
//1.加载
Class.forName("com.mysql.jdbc.Driver");
//2.连接
Connection connection = DriverManager.getConnection("jdbc:mysql://localhost:3306/station_demo", "root", "admin");
//3.创建编译语句
Statement statement = connection.createStatement();
//4.执行语句
// ResultSet executeQuery(String sql)
// 执行给定的 SQL 语句,该语句返回单个 ResultSet 对象。
String sql = "SELECT id,product_name,sale_price FROM product WHERE id=9";
ResultSet resultSet = statement.executeQuery(sql);
//解析结果
while (resultSet.next()){//如果有在执行里面
// int getInt(int columnIndex)
// 以 Java 编程语言中 int 的形式获取此 ResultSet 对象的当前行中指定列的值。
int id = resultSet.getInt("id");
System.out.println(" id = "+id);
// String getString(String columnLabel)
//以 Java 编程语言中 String 的形式获取此 ResultSet 对象的当前行中指定列的值。
String productName = resultSet.getString("product_name");
System.out.println(" productName ="+productName);
//获取卖价
int salePrice = resultSet.getInt("sale_price");
System.out.println(" salePrice = "+salePrice);
}
//5.释放资源
resultSet.close();
statement.close();
connection.close(); } catch (Exception e) {
e.printStackTrace();
}
return "苹果手机";
} }
2.动态传递参数之拼接字符串

3.sql注入问题

dao语句

最终拼接完成后相当于执行的sql语句是: SELECT * FROM product WHERE id=24 OR 1=1 ,必然是条件无效
4.使用预编译语句防止sql注入
package com.day01.station.dao; /**
* Created by Administrator on 2018/2/1.
*/ import java.sql.*; /**
* jdbc 连接数据库 加 连 语 执 释
* 1.加载
* 2.连接
* 3.创建编译语句
* 4.执行语句
* 5.释放资源
*/
public class Product2Dao {
//增加 一个产品 包括 名称 和 卖价
public void save(String productName, int salePrice) {
System.out.println("--------我是增加方法---------");
System.out.println(" productName = " + productName + " , salePrice =" + salePrice);
try {
//1. 加载
Class.forName("com.mysql.jdbc.Driver");
// * 2. 连接
Connection connection = DriverManager.getConnection("jdbc:mysql://localhost:3306/station_demo", "root", "admin");
// PreparedStatement prepareStatement(String sql)
// 创建一个 PreparedStatement 对象来将参数化的 SQL 语句发送到数据库。
String sql="INSERT INTO product (product_name,sale_price) VALUES (?,?)";
//3.创建 预编译语句
PreparedStatement preparedStatement = connection.prepareStatement(sql);
// void setString(int parameterIndex, String x)将指定参数设置为给定 Java String 值。
preparedStatement.setString(1,productName);
preparedStatement.setInt(2,salePrice);
//添加参数
//preparedStatement.set
//4.执行
preparedStatement.executeUpdate();//重要提醒 不需要传入sql语句
//5.释放资源
preparedStatement.close();
connection.close(); } catch (Exception e) {
e.printStackTrace();
}
} //删除 根据id删除产品
public void delete(int id) {
System.out.println(" --------我是删除方法--------- ");
System.out.println("---id=" + id); try {
//1.加载
Class.forName("com.mysql.jdbc.Driver");
//2.连接
Connection connection = DriverManager.getConnection("jdbc:mysql://localhost:3306/station_demo", "root", "admin");
//3.创建 预 编译语句
String sql="DELETE FROM product WHERE id=?";
PreparedStatement preparedStatement = connection.prepareStatement(sql);
//设定参数
preparedStatement.setInt(1,id);
//4.执行语句
preparedStatement.executeUpdate();
//5.释放资源
preparedStatement.close();
connection.close(); } catch (Exception e) {
e.printStackTrace();
} } //修改 根据id 修改产品的名称
public void update(int id,int salePrice,int costPrice) {
System.out.println("--------我是修改方法---------");
try {
//1.加载
Class.forName("com.mysql.jdbc.Driver");
//2.连接
Connection connection = DriverManager.getConnection("jdbc:mysql://localhost:3306/station_demo", "root", "admin");
//3.创建编译语句
String sql="UPDATE product SET sale_price=?,cost_price=? WHERE id= ? ";
PreparedStatement preparedStatement = connection.prepareStatement(sql);
preparedStatement.setInt(1,salePrice);
preparedStatement.setInt(2,costPrice);
preparedStatement.setInt(3,id);
//4.执行语句
preparedStatement.executeUpdate();
//5.释放资源
preparedStatement.close();
connection.close(); } catch (Exception e) {
e.printStackTrace();
} } //查询
public String query(int id) {
System.out.println("------我是查询方法----------");
try {
//1.加载
Class.forName("com.mysql.jdbc.Driver");
//2.连接
Connection connection = DriverManager.getConnection("jdbc:mysql://localhost:3306/station_demo", "root", "admin");
//3.创建编译语句
String sql = "SELECT id,product_name,sale_price FROM product WHERE id=?";
PreparedStatement preparedStatement = connection.prepareStatement(sql);
preparedStatement.setInt(1,id);
//4.执行语句
ResultSet resultSet = preparedStatement.executeQuery();
//解析结果
while (resultSet.next()){//如果有在执行里面
// int getInt(int columnIndex)
// 以 Java 编程语言中 int 的形式获取此 ResultSet 对象的当前行中指定列的值。
int id1 = resultSet.getInt("id");
System.out.println(" id = "+id1);
// String getString(String columnLabel)
//以 Java 编程语言中 String 的形式获取此 ResultSet 对象的当前行中指定列的值。
String productName = resultSet.getString("product_name");
System.out.println(" productName ="+productName);
//获取卖价
int salePrice = resultSet.getInt("sale_price");
System.out.println(" salePrice = "+salePrice);
}
//5.释放资源
resultSet.close();
preparedStatement.close();
connection.close(); } catch (Exception e) {
e.printStackTrace();
}
return "苹果手机";
} }
到此jdbc简单实现CRUD完成!
5.测试与评估
需求:以购买车票为案例完成
1.设计车票数据库表
2.完成对车票的列表查询(打印所有车票到控制台)
3.可以实现新增车票
4.实现根据车票班次调整车票价格
5.实现根据班次删除该班次列车
6.实现根据班次购买一张车票(选做)
03_java基础(六)之CRUD实现的更多相关文章
- Bootstrap<基础六> 表单
Bootstrap 通过一些简单的 HTML 标签和扩展的类即可创建出不同样式的表单. 表单布局 Bootstrap 提供了下列类型的表单布局: 垂直表单(默认) 内联表单 水平表单 垂直或基本表单 ...
- C#_02.15_基础六_.NET类
C#_02.15_基础六_.NET类 一.类继承是一个类在另一个类的基础上进行的扩展. 继承的子类拥有父类的全部成员.索引子类拥有本身的全部成员以及父类的全部成员. 可以对基类成员进行隐藏,如果必须的 ...
- {Django基础六之ORM中的锁和事务}一 锁 二 事务
Django基础六之ORM中的锁和事务 本节目录 一 锁 二 事务 一 锁 行级锁 select_for_update(nowait=False, skip_locked=False) #注意必须用在 ...
- day 71 Django基础六之ORM中的锁和事务
Django基础六之ORM中的锁和事务 本节目录 一 锁 二 事务 三 xxx 四 xxx 五 xxx 六 xxx 七 xxx 八 xxx 一 锁 行级锁 select_for_update(no ...
- day 58 Django基础六之ORM中的锁和事务
Django基础六之ORM中的锁和事务 本节目录 一 锁 二 事务 三 xxx 四 xxx 五 xxx 六 xxx 七 xxx 八 xxx 一 锁 行级锁 select_for_update( ...
- Django基础六之cookie和session
Django基础六之cookie和session 目录 Django基础六之cookie和session 1. cookie和session介绍 1.1 cookie 简介 1.2 cookie的缺陷 ...
- <Android基础> (六) 数据存储 Part 1 文件存储方式
第六章 数据存储 6.1 持久化技术 持久化技术指将内存中的瞬时数据保存到存储设备中,保证即使在手机或电脑关机的情况下,这些数据仍然不会丢失. 主要有三种方式用于简单地实现数据持久化功能:文件存储.S ...
- mybatis入门基础(六)----高级映射(一对一,一对多,多对多)
一:订单商品数据模型 1.数据库执行脚本 创建数据库表代码: CREATE TABLE items ( id INT NOT NULL AUTO_INCREMENT, itemsname ) NOT ...
- java基础(六) switch语句的深入解析
引言 switch 语句是非常的基础的知识,掌握起来也不难掌握,语法比较简单.但大部分人基本是知其然,不知其所以然.譬如 早期JDK只允许switch的表达式的值 int及int类型以下的基本类型 ...
随机推荐
- 最小化安装CentOS 7后,图形界面的安装(GNOME、KDE等)
安装图形化界面: 1.首先安装X(X Window System),命令为 yum groupinstall "X Window System" 2.检查一下我们已经安装的软件以及 ...
- 【Jmeter自学】常见错误类型(九)
==================================================================================================== ...
- 压缩(zip)
默认情况这些压缩工具在压缩后会删除源文件(zip除外):而且默认只压缩文件,而不压缩目录(链接到打包程序). gzip bzip2 zip GNU tar 1.gzip 1.1.压缩 gzip 压缩工 ...
- ROS-by-example的安装
在这里我之前用的VM12安装成功之后,仿真器机器人会有问题,故把电脑做成双系统的形式来重新安装: 环境:Ubuntu14.04 LTS 32bits ROS版本:ROS Indigo 在学习本部分之后 ...
- 关于ioncube扩展的安装和使用
ioncube 是一个专业级的PHP加密解密工具 这里是按照此扩展的教程,安装以后就可以运行用ioncube加密的文件 引导安装说明:一.下载loader-wizard.php ioncube提供了一 ...
- 56.纯 CSS 描述程序员的生活
原文地址:https://segmentfault.com/a/1190000015316996 感想:动画加延时,white-space: pre; 保留HTML p 中刻意留下的空白. HTML ...
- hive 动态分区实现 (hive-1.1.0)
笔者使用的hive版本是hive-1.1.0 hive-1.1.0动态分区的默认实现是只有map没有reduce,通过执行计划就可以看出来.(执行计划如下) insert overwrite tabl ...
- winform 之公共控件
Button 按钮 属性: (一).布局: 1.AutoSize:控件是否根据内容调整大小 2.Location:当前按钮位于界面位置 3.Dock:控件锁定到界面位置 -None:不锁定 4.Mar ...
- KMPlayer 一打开总是出现右面的窗口 导航区 怎样设置不会自动打开
两步骤第一,右键-外观-标致-管理 删除默认标致 第二,打开hosts文件,位置在 C:\Windows\System32\drivers\etc 在最下面一行加入 127.0.0.1 player. ...
- 浅谈 foreach 的原理
package com.shenzhou; import java.util.ArrayList; import java.util.Iterator; import java.util.List; ...