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实现的更多相关文章

  1. Bootstrap<基础六> 表单

    Bootstrap 通过一些简单的 HTML 标签和扩展的类即可创建出不同样式的表单. 表单布局 Bootstrap 提供了下列类型的表单布局: 垂直表单(默认) 内联表单 水平表单 垂直或基本表单 ...

  2. C#_02.15_基础六_.NET类

    C#_02.15_基础六_.NET类 一.类继承是一个类在另一个类的基础上进行的扩展. 继承的子类拥有父类的全部成员.索引子类拥有本身的全部成员以及父类的全部成员. 可以对基类成员进行隐藏,如果必须的 ...

  3. {Django基础六之ORM中的锁和事务}一 锁 二 事务

    Django基础六之ORM中的锁和事务 本节目录 一 锁 二 事务 一 锁 行级锁 select_for_update(nowait=False, skip_locked=False) #注意必须用在 ...

  4. day 71 Django基础六之ORM中的锁和事务

    Django基础六之ORM中的锁和事务   本节目录 一 锁 二 事务 三 xxx 四 xxx 五 xxx 六 xxx 七 xxx 八 xxx 一 锁 行级锁 select_for_update(no ...

  5. day 58 Django基础六之ORM中的锁和事务

      Django基础六之ORM中的锁和事务   本节目录 一 锁 二 事务 三 xxx 四 xxx 五 xxx 六 xxx 七 xxx 八 xxx 一 锁 行级锁 select_for_update( ...

  6. Django基础六之cookie和session

    Django基础六之cookie和session 目录 Django基础六之cookie和session 1. cookie和session介绍 1.1 cookie 简介 1.2 cookie的缺陷 ...

  7. <Android基础> (六) 数据存储 Part 1 文件存储方式

    第六章 数据存储 6.1 持久化技术 持久化技术指将内存中的瞬时数据保存到存储设备中,保证即使在手机或电脑关机的情况下,这些数据仍然不会丢失. 主要有三种方式用于简单地实现数据持久化功能:文件存储.S ...

  8. mybatis入门基础(六)----高级映射(一对一,一对多,多对多)

    一:订单商品数据模型 1.数据库执行脚本 创建数据库表代码: CREATE TABLE items ( id INT NOT NULL AUTO_INCREMENT, itemsname ) NOT ...

  9. java基础(六) switch语句的深入解析

    引言   switch 语句是非常的基础的知识,掌握起来也不难掌握,语法比较简单.但大部分人基本是知其然,不知其所以然.譬如 早期JDK只允许switch的表达式的值 int及int类型以下的基本类型 ...

随机推荐

  1. android 开发 实现多个动态权限的方法(并且兼容6.0以下的版本权限授权)

    android开发权限授权因为版本的不同有不同的授权方式,6.0以下的版本使用的是在注册表中添加权限的静态授权(这种授权权限提示只会出现在app安装的时候),而6.0以上(包含6.0)就需要动态授权的 ...

  2. JavaScript Object 对象

    Object 对象自身用处不大,不过在了解其他类之前,还是应该了解它.因为 ECMAScript 中的 Object 对象与 Java 中的 java.lang.Object 相似,ECMAScrip ...

  3. StringBuffer 清除内容

    在开发的时候,经常使用StringBuffer来进行字符串的拼接.如果反复的做字符串拼接时,有时需要清空Stringbuffer中的内容,然后再拼接新的字符串信息. StringBuffer提供了以下 ...

  4. python入门-python处理csv文件格式相关

    python入门-python处理csv文件格式相关 处理 下载的csv格式文件 直接上代码和效果图 import csv from datetime import datetime from mat ...

  5. 学习笔记:python3,代码。小例子习作(2017)

    http://www.cnblogs.com/qq21270/p/7634025.html 学习笔记:python3,一些基本语句(一些基础语法的代码,被挪到这里了) 日期和时间操作 http://b ...

  6. fb 4.7英文版 修改字体大小

    windows-preferences-general-appearance-colors and fonts-basic-text font

  7. APP-3-百度地图应用

    1.百度地图开发平台 http://lbsyun.baidu.com/ 1.1申请账号 1.2Android创建应用 进入百度地图开发平台->控制台->创建应用 发布版SHA1:BA:AD ...

  8. confusing c++ 重写 与 重定义 记录1

    class parent { public: void f() { cout << "parent f()" << endl; } void f(int i ...

  9. spark使用scala读取Avro数据(转)

    这是一篇翻译,原文来自:How to load some Avro data into Spark. 首先,为什么使用 Avro ? 最基本的格式是 CSV ,其廉价并且不需要顶一个一个 schema ...

  10. python语言中的数据类型之集合

    数据类型 集合类型    set 用途:1.关系运算        2.去重 定义方式:在{}内用逗号分隔开多个元素,但元素的特点是 1.集合内元素必须是不可变类型 2.集合内元素无序 集合内元素不能 ...