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. web api 本地测试

    [最简单的,本人小白,大神勿喷] 一:创建web API 服务端 ①创建web api 的项目 ②在这个api项目的Web.config中加上如下几段话: <httpProtocol>&l ...

  2. 【Selenium-WebDriver自学】Selenium测试设计技术(十三)

    Selenium页面对象模型 1.Selenium页面对象模型 优点 页面的对象模型是其中测试对象和功能被彼此分开,从而保持代码干净的实现. 对象保持独立的测试脚本.一个目的可以通过一个或多个测试脚本 ...

  3. nginx, supervisor, celery

      资料: supervisor和nginx使用 1 .supervisor 管理进程工具 2 .nginx 反向代理, 负载均衡 安装nginx $ sudo apt-get update $ su ...

  4. gentoo samba 密码错误

    参考 Samba Share Password Refused https://social.technet.microsoft.com/Forums/windows/en-US/8249ad4c-6 ...

  5. tkinter events format

    tkinter label 标签主要显示,通常不与用户进行交互事件 frame容器上获取点击的事件坐标 event.x,event.y event.key获取键盘数据

  6. Javascript 中 null和undefined的区别

    null表示"没有对象",即该处不应该有值.典型用法是: (1) 作为函数的参数,表示该函数的参数不是对象. (2) 作为对象原型链的终点. Object.getPrototype ...

  7. Android中糟糕的AsyncTask

    上周做一个Android中的帧动画,因为每帧图片都比较大,所以采用每次读取一帧,延时再读取下一帧的方式实现.在读取的时候,采用AsyncTask,去设置ImageView的背景.但是发现需要切换帧动画 ...

  8. asp.net Log4Net错误日志个人总结

    1)创建Global.asax protected void Application_Start(object sender, EventArgs e) { log4net.Config.XmlCon ...

  9. 如何玩转小程序+公众号?手把手教你JeeWx小程序CMS与公众号关联

    随着微信小程序新功能.新入口的不断更新,小程序的商业价值逐步增强,特别是小程序与公众号的深度融合,已经让小程序成为各行业新的营销渠道.Jeewx平台专注小程序的开发,逐步完善小程序生态圈,通过简单操作 ...

  10. as2 shareObject本地缓存存储位置:

    shareObject本地缓存存储位置: win7系统用户到C:\Users\[你的用户名]\AppData\Roaming\Macromedia\Flash Player\#SharedObject ...