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类型以下的基本类型 ...
随机推荐
- c++ 接口类
什么是接口类?2017-06-07 接口类就是只提供接口不提供实现的类,就是接口类,接口类和抽象类对C++而言,没有什么区别. 接口类有如下特点: 子类来实现接口类中没有实现的所有接口. 接口方法前面 ...
- embsysregview 0.26 无法安装的解决方法。
最近看到一个比较好的 eclipse 插件:embsysregview,于是想装起来用用看.结果安装过程出错,4个 jar 的包下载不下来,并且通过本地安装的方法也不行. 后来终于找到作者的回复,作者 ...
- javafx自动补全
public boolean showUpload2HomeDialog(final OperationInfo initDataInfo) { boolean result = false; try ...
- centos7.5下安装teamview
centos7.5下安装teamview, 1 安装 wget https://download.teamviewer.com/download/linux/teamviewer-host.x86_6 ...
- 18.纯 CSS 创作 404 文字变形为 NON 文字的交互特效
原文地址:https://segmentfault.com/a/1190000014818274 感想: positon:absolute 和 :hover HTML代码: <!-- < ...
- 《算法》第五章部分程序 part 3
▶ 书中第五章部分程序,包括在加上自己补充的代码,字符串高位优先排序(美国国旗排序) ● 美国国旗排序 package package01; import edu.princeton.cs.algs4 ...
- redis导数到mysql
filename=$(date "+%Y%m%d%H%M%S") //将type为list,键为bi0205导出文本,并保存到mysql导入导出目录redis-cli -h 服务器 ...
- Mybatis的回顾学习
<!--id:statementId resultType:查询结果集的数据类型 parameterType:查询的入参 --> <selectid="getUserByI ...
- ScheduledThreadPoolExecutor 使用线程池执行定时任务
转自:https://segmentfault.com/a/1190000008038848 在现实世界里,我们总是免不了要定期去做一件事情(比如上课)—— 在计算机的世界里,更是如此.比如我们手机每 ...
- node 支持es6
安装 babel-cli, 全局安装 npm install babel-cli -g 然后 在工程目录下 安装 npm install babel-cli --save npm install b ...