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类型以下的基本类型 ...
随机推荐
- 安全测试6_Web安全工具第二节(代理抓包分析工具)
上节课讲了浏览器及扩展,这节课继续来学习下抓包分析. 首先看下下图,了解下代理工具的原理:代理就相当于收费站一样,任何要通过的车辆必须经过它. 浏览器的代理我们可以通过设置进行手动设置代理,或者通过P ...
- thinkphp 5 wherein
$details = Db::name('food') -> alias('a') -> field('a.food_code,a.food_name,a.food_u1,a.food_p ...
- 使用idea创建maven多模块项目
前言 参看:http://blog.csdn.net/zht666/article/details/19040733 使用Maven管理项目时,往往需要创建多个模块,模块之间存在相互引用的关系.对于M ...
- Vue.js基础(一)
Vue.js的雏形: 数据绑定: 1,单向 {{输出}} 数据=>视图 2,双向 v-model 数据<=>视图 3,{{*msg}} 数据只绑 ...
- fabric Node SDK进行连接
yum install gcc-c++ npm install --unsafe-perm --registry=https://registry.npm.taobao.org chmod -R
- MySql 索引 查询 优化
官方文档: https://dev.mysql.com/doc/refman/5.7/en/explain-output.html#explain_rows type: 连接类型 system 表只有 ...
- EF大数据批量处理----BulkInsert
之前做项目的时候,做出来的系统的性能不太好,在框架中使用了EntityFramework,于是就在网上查资料,研究如何提高EF的性能. 在这分享一篇博客 批量操作提升EntityFramework的性 ...
- [Android] android.util.Log
android.util.Log常用的方法有以下5个:Log.v() Log.d() Log.i() Log.w() 以及 Log.e() .根据首字母对应VERBOSE,DEBUG,INFO, W ...
- hdfs standby namenode checkpoint 的一些参数
dfs.namenode.checkpoint.period --两次检查点创建之间的固定时间间隔,默认3600,即1小时.所以去ann snn 看到的fsimage 相隔1个小时. dfs.name ...
- 使用windows性能计数器监控cpu使用率
https://blog.csdn.net/yabingshi_tech/article/details/26672355 2. http://blog.51cto.com/qixue/1702557 ...