JDBC_part2_DML以及预编译_编写DBUtil工具类
本文为博主辛苦总结,希望自己以后返回来看的时候理解更深刻,也希望可以起到帮助初学者的作用.
**转载请注明 出自 : luogg的博客园 ** 谢谢配合!
jdbc day02
DML语法
- 比起插叙语句,没有ResultSet结果集,stmt.executeUpdate(sql)返回的是改变几行的int类型.
前几步和day01一致
//3.写sql语句
String sql = "insert into copy_emp(last_name) values("+"'洛哥哥')";
//4.创建发送对象
Statement stmt = conn.createStatement();
stmt.executeUpdate(sql);
//7.关闭资源
SQL注入
sql注入就是用户输入的值,当做了sql语言的一部分,然后攻破密码等重要信息.
为了防止sql注入,就要将含有单引号的采用预编译处理.
比如 :
String USERNAME = "admin";
String PASSWORD = "123 OR '1' = '1"; (sql注入,使破解后的密码恒成立)
打印输入密码之后的sql语言
select count(*) from login where USERNAME= 'admin' and PASSWORD= '123' OR '1'='1';
预编译
- 采用?占位符, 将需要输入单引号的sal语法用?表示.
- 书写简单,而且防止sql注入问题.
- PreparedStatement继承Statement.
- 预编译中的问号,pre.setString(1,"哈哈");
1代表第一个问号,不代表第一个参数.
预编译中和普通编译区别在于:
普通编译:
//4.创建发送对象
Statement stmt = conn.createStatement();
//5.发送sql语句
ResultSet rs = stmt.executeQuery(sql);
预编译
//4.创建预编译对象
PreparedStatement pstmt = conn.prepareStatement(sql);
//5.填入数据
pstmt.setString(1, myUsername);
pstmt.setString(2, myPassword);
//6.创建结果集
ResultSet rs = pstmt.executeQuery();
前两步与day01一致,查看用户输入的用户名和密码是否是已经存在数据库的
String myUsername = "admin";
String myPassword = "admin";
//3.写sql语句(判断输入的用户名密码在数据库中有几条记录)
String sql = "select count(*) count from login1 where username = ? and password = ?";
//4.创建预编译对象
PreparedStatement pstmt = conn.prepareStatement(sql);
//5.填入数据
pstmt.setString(1, myUsername);
pstmt.setString(2, myPassword);
//6.创建结果集
ResultSet rs = pstmt.executeQuery();
//7.查询select结果
if(rs.next()) {
String flag = rs.getString("count");
if("1".equals(flag)) {
System.out.println("登录成功");
} else {
System.out.println("登录失败");
}
}
//8.关闭资源
DBUtil
- 将属性和方法设置为static静态,方便以后直接用类名调用.
public class DBUtil {
private final static String DriverName = "oracle.jdbc.OracleDriver";
private final static String URL = "jdbc:oracle:thin:@localhost:1521:orcl";
private final static String USERNAME = "scott";
private final static String PASSWORD = "luogg";
private static Connection conn ;
private static Statement stmt ;
//private static PreparedStatement pstmt;
/**
* 连接数据库方法
* @return Connection
* @param conn 数据库连接对象
*/
public static Connection getConnection() {
try {
Class.forName(DriverName);
conn = DriverManager.getConnection(URL,USERNAME,PASSWORD);
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return conn;
}
/**
* 查询语句关闭
* @param rs 结果集
* @param stmt 发送对象
* @param conn 连接对象
*/
public static void close(ResultSet rs,Statement stmt,Connection conn) {
if(rs != null){
try {
rs.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
if(stmt != null) {
try {
rs.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
if(conn != null) {
try {
conn.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
/**
* 非查询语句关闭资源
* @param stmt 发送对象
* @param conn 连接对象
*/
public static void close(Statement stmt,Connection conn) {
close(null,stmt,conn);
}
/**
* 查询语句
* @param sql
* @return ResultSet
*/
public static ResultSet selectSql(String sql) {
ResultSet rs = null;
try {
stmt = conn.createStatement();
rs = stmt.executeQuery(sql);
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return rs;
}
/**
* 增删改的SQL语句
* @param sql
* @return
*/
public static int runSql(String sql) {
int result = 0;
try {
Statement stmt = conn.createStatement();
result = stmt.executeUpdate(sql);
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return result;
}
JDBC_part2_DML以及预编译_编写DBUtil工具类的更多相关文章
- 一个使用命令行编译Android项目的工具类
一个使用命令行编译Android项目的工具类 简单介绍 编译apk项目须要使用的几个工具,基本都在sdk中,它们各自是(Windows系统): 1.aapt.exe 资源打包工具 2.android. ...
- 【SSH三大框架】Hibernate基础第二篇:编写HibernateUtil工具类优化性能
相对于上一篇中的代码编写HibernateUtil类以提高程序的执行速度 首先,仍然要写一个javabean(User.java): package cn.itcast.hibernate.domai ...
- 使用JDK的zip编写打包工具类
JDK自带的zip AIP在java.util.zip包下面,主要有以下几个类: java.util.zip.ZipEntryjava.util.zip.ZipInputStreamjava.util ...
- JSR303完成validate校验并编写BeanValidator工具类
一.引入pom依赖 <!-- validator --> <dependency> <groupId>javax.validation</groupId> ...
- 2014金山笔试_编写一个数组类 MyVector
//编写一个数组类 MyVector,数组内容可以动态扩充,实现构造,析构,赋值操作符重载,插入,删除,获取元素个数,获取数组容量(不可以使用STL等的容器类,不能使用 //不连续的存储空间) #in ...
- 动态代理模式_应用(Redis工具类)
本次使用动态代理的初衷是学习Redis,使用Java操作Redis时用到Jedis的JedisPool,而后对Jedis的方法进一步封装完善成为一个工具类.因为直接使用Jedis对象时,为了保证性能, ...
- 基于Druid数据库连接池的DBUtil工具类
工具类 DruidUtil.java package com.zzuli.util; import com.alibaba.druid.pool.DruidDataSourceFactory; imp ...
- 【JDBC】Java 连接 MySQL 基本过程以及封装数据库工具类
一. 常用的JDBC API 1. DriverManager类 : 数据库管理类,用于管理一组JDBC驱动程序的基本服务.应用程序和数据库之间可以通过此类建立连接.常用的静态方法如下 static ...
- CSS预编译与PostCSS以及Webpack构建CSS综合方案
CSS全称Cascading Style Sheets(层叠样式表),用来为HTML添加样式,本质上是一种标记类语言.CSS前期发展非常迅速,1994年哈肯·维姆·莱首次提出CSS,1996年12月W ...
随机推荐
- 阿里云学生优惠Windows Server 2012 R2安装IIS,ftp等组件,绑定服务器域名,域名解析到服务器,域名备案,以及安装期间错误的解决方案
前言: 这几天终于还是按耐不住买了一个月阿里云的学生优惠.只要是学生,在学信网上注册过,并且支付宝实名认证,就可以用9块9的价格买阿里云的云服务ECS.确实是相当的优惠. 我买的是Windows S ...
- 微信网页开发之获取用户unionID的两种方法--基于微信的多点登录用户识别
假设网站A有以下功能需求:1,pc端微信扫码登录:2,微信浏览器中的静默登录功能需求,这两种需求就需要用到用户的unionID,这样才能在多个登录点(终端)识别用户.那么这两种需求下用户的unionI ...
- Entity Framework 教程——Entity Framework中的实体类型
Entity Framework中的实体类型 : 在之前的章节中我们介绍过从已有的数据库中创建EDM,它包含数据库中每个表所对应的实体.在EF 5.0/6.0中,存在POCO 实体和动态代理实体两种. ...
- hexo+github搭建个人博客
最近用hexo+github搭建了自己的个人博客-https://liuyfl.github.io,其中碰到了一些问题,记录下来,以便查阅. hexo+github在win7环境下搭建个人博客:hex ...
- maven常见异常以及解决方法
本文写的是我在整合ssm框架时遇到的一些问题,我估计很多人也会遇到,所以,这里作为一个总结,希望能够帮助大家解决问题 一,加入shiro组件时抛出的异常 加入步骤(略) 问题 1,保存后,无法导入sh ...
- Jexus 服务器部署导航
说明:本索引只是方便本人查找,不涉及版权问题,所有博客,还是到元博客地址访问. <script async src="//pagead2.googlesyndication.com/p ...
- 【腾讯Bugly干货分享】基于RxJava的一种MVP实现
本文来自于腾讯bugly开发者社区,非经作者同意,请勿转载,原文地址:http://dev.qq.com/topic/57bfef673c1174283d60bac0 Dev Club 是一个交流移动 ...
- Lesson 24 It could be worse
Text I entered the hotel manager's office and sat down. I had just lost £50 and I felt very upset. ' ...
- Hadoop学习笔记系列文章导航
一.为何要学习Hadoop? 这是一个信息爆炸的时代.经过数十年的积累,很多企业都聚集了大量的数据.这些数据也是企业的核心财富之一,怎样从累积的数据里寻找价值,变废为宝炼数成金成为当务之急.但数据增长 ...
- iOS 开发不可缺少的工具
1.截屏利器:Snip 强大的滚动截屏功能,你值得拥有! Snip.png 传送门:http://www.snip.qq.com/ 2.Mac上最好的终端模拟器:iTerm2 iTeam.png 传送 ...