jdbc(工具类和配置文件)
原始的jdbc要操作7步
- 导入jar包
- 加载驱动
- 获取连接
- 获取执行者对象
- 编写sql语句
- 处理结果
- 释放对象资源
当我们每次都要注册驱动,获取连接的时候,都感觉很烦,这时候怎么才能懒呢?
把driver,url,username,password到配置文件里,就可以一次编写,下次处处使用了!配置文件jdbc.property放在src下的
还要使用工具类,,JDBCUtils工具类是对应普通执行者对象的,JDBCPlusUtils工具类是对应预编译执行者对象的。其中工具类和配置文件的键名和配置文件名都要一致
我们知道SQL注入漏洞是钻了sql语句漏洞所以我们用预编译对象来解决这个问题。
操作步骤
导入jar包和工具类
通过工具类获取连接对象
sql语句的编写
预编译执行者的创建
处理结果
释放资源(这一步我老是忘记!!)
如果是事务操作的话只要通过连接对象开启事务即可,要去判断是否执行成功,成功了就提交,失败要全部回滚
ResultSet注意事项
数据库查询好数据后会一般会返回两种类型,其中一种是结果集
就算没有查询到数据他也会返回对象,只是这个对象里面没有值而已,所以判断时不可以用resultset!=null去判断
要用resultset.next()去判断true or false
jdbc.properties
driver=com.mysql.cj.jdbc.Driver
url=jdbc:mysql://localhost:3306/stuexpm?serverTimezone=GMT
username=root
password=root
相关代码
package com.tbb.test;
import com.sun.security.jgss.GSSUtil;
import com.tbb.lib.utils.JDBCPlusUtils;
import com.tbb.lib.utils.JDBCUtils;
import java.sql.*;
public class Test2 {
public static void main(String[] args) throws SQLException {
String username="gjj";
String password="123 or 1=1";
preLogin(username,password);
}
public static void preLogin(String name,String pwd) throws SQLException {
Connection connection=null;
PreparedStatement preparedStatement=null;
ResultSet resultSet=null;
connection = JDBCPlusUtils.getConnection();
String sql="select * from user where username = ? and password = ?";
preparedStatement = connection.prepareStatement(sql);
preparedStatement.setString(1,name);
preparedStatement.setString(2,pwd);
resultSet = preparedStatement.executeQuery();
if(resultSet.next()){
System.out.println("登陆成功");
}else{
System.out.println("登陆失败");
}
}
public static void statementLogin(String username,String password) throws SQLException {
Connection connection=null;
Statement statement=null;
ResultSet resultSet=null;
try {
connection = JDBCUtils.getConnection();
statement = connection.createStatement();
String sql="select * from user where username = '"+username+"' and password = '"+password+"';";
resultSet = statement.executeQuery(sql);
System.out.println(resultSet);
if(resultSet!=null){
System.out.println("登陆成功");
}else{
System.out.println("用户名或密码错误");
}
} catch (SQLException throwables) {
throwables.printStackTrace();
}
connection.close();
statement.close();
resultSet.close();
}
}
我们知道Connection对象可以创建执行者对象,可以释放资源,可以操作事物
package com.tbb.test;
import com.tbb.lib.utils.JDBCPlusUtils;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.SQLException;
public class Test3 {
public static void main(String[] args) {
transaction();
}
public static void transaction(){
Connection connection = JDBCPlusUtils.getConnection();
try {
connection.setAutoCommit(false);
String sql1="update goods set unitprice=unitprice+1000 where goodsid=3001";
String sql2="update goods set unitprice=unitprice-1000 where goodsid=4001";
PreparedStatement preparedStatement = connection.prepareStatement(sql1);
PreparedStatement preparedStatement1 = connection.prepareStatement(sql2);
int i = preparedStatement.executeUpdate();
int i1 = preparedStatement.executeUpdate();
System.out.println(i);
System.out.println(i1);
if(i!=0 && i1!=0){
System.out.println("执行成功");
}else{
System.out.println("执行失败");
}
preparedStatement.close();
connection.close();
} catch (SQLException throwables) {
try {
connection.rollback();
} catch (SQLException e) {
e.printStackTrace();
}
throwables.printStackTrace();
}
}
}
jdbc(工具类和配置文件)的更多相关文章
- 自定义JDBC工具类(配置文件)
import java.io.IOException; import java.io.InputStream; import java.sql.Connection; import java.sql. ...
- jdbc工具类1.0
package cn.zhouzhou; import java.sql.Connection; import java.sql.Driver; import java.sql.DriverManag ...
- 自己实现的JDBC工具类
最近做了个后台应用程序,刚开始用Spring+iBatis来做的,后来因为种种原因,不让用Spring.iBatis以及一些开源的工具包. 于是用JDBC重写了原来的Service实现,项目做完了 ...
- JDBC工具类连接数据库,模仿登录
## 使用JDBC工具类的原因在使用JDBC连接数据库的时候,加载驱动.获取连接.释放资源等代码是重复的,所有为了提高代码的复用性,我们可以写一个工具类,将数据库驱动加载.获取连接.资源释放的代码封装 ...
- JDBC-select练习&jdbc工具类&数据库登录案例
一.select练习 1.说明 练习: * 定义一个方法,查询emp表的数据将其封装为对象,然后装载集合,返回. 1. 定义Emp类 2. 定义方法 public List<Emp> fi ...
- JDBC基础:JDBC快速入门,JDBC工具类,SQL注入攻击,JDBC管理事务
JDBC基础 重难点梳理 一.JDBC快速入门 1.jdbc的概念 JDBC(Java DataBase Connectivity:java数据库连接)是一种用于执行SQL语句的Java API,可以 ...
- MySQL数据库学习笔记(十一)----DAO设计模式实现数据库的增删改查(进一步封装JDBC工具类)
[声明] 欢迎转载,但请保留文章原始出处→_→ 生命壹号:http://www.cnblogs.com/smyhvae/ 文章来源:http://www.cnblogs.com/smyhvae/p/4 ...
- MySQL数据库学习笔记(十)----JDBC事务处理、封装JDBC工具类
[声明] 欢迎转载,但请保留文章原始出处→_→ 生命壹号:http://www.cnblogs.com/smyhvae/ 文章来源:http://www.cnblogs.com/smyhvae/p/4 ...
- java使用注解和反射打造一个简单的jdbc工具类
a simple jdbc tools 如有转载和引用,请注明出处,谢谢 1. 定义我们需要的注解 要想实现对数据库的操作,我们必须知道数据表名以及表中的字段名称以及类型,正如hibernate 使用 ...
- 开源JDBC工具类DbUtils
本篇将会详细地介绍Apache公司的JDBC帮助工具类DbUtils以及如何使用.在上一篇中我们已经通过将以前对dao层使用JDBC操作数据库的冗余代码进行了简易封装形成自己的简单工具类JdbcUti ...
随机推荐
- 借教室NOIP2012
题目: 这道题目就是差分加二分答案. 先看为什么能差分,因为题目中的从s[j]借到t[j]就相当于对一个区间进行操作:再看为什么能二分,废话有单调性啊因为可以借n个教室那也可以借n个以下的教室,相反如 ...
- CentOS安装mysql、MariaDB以及更改数据库存储路径
注意:此方法只适用于新的机器或没有重要数据库表(可随意删除)的机器安装,如需升级版本参考下方链接!!! https://www.jianshu.com/p/955ff6065935 一.安装操作 1. ...
- 【KAWAKO】TVM-在ubuntu服务器上的安装
目录 下载源码 安装依赖库 修改config.cmake文件 编译 安装python库 添加tophub 简单验证 官方的安装教程在这里 下载源码 从Download Page中下载下来的源码是0.8 ...
- 英国学者在真实世界早期RA队列研究中发现较高比例的临床缓解患者仍存在能量多普勒超声活性
标签: 类风湿关节炎; 目标治疗策略; 能量多普勒活性; 预测因子 英国学者在真实世界早期RA队列研究中发现较高比例的临床缓解患者仍存在能量多普勒超声活性 电邮发布日期:2016年4月6日 本研究的重 ...
- PostGIS之Geometry
1. 概述 PostGIS 是PostgreSQL数据库一个空间数据库扩展,它添加了对地理对象的支持,允许在 SQL 中运行空间查询 PostGIS官网:About PostGIS | PostGIS ...
- 基于C++的OpenGL 14 之模型加载
1. 引言 本文基于C++语言,描述OpenGL的模型加载 前置知识可参考: 基于C++的OpenGL 13 之Mesh - 当时明月在曾照彩云归 - 博客园 (cnblogs.com) 笔者这里不过 ...
- ChatGpt聊天API使用
昨天ChatGpt发布了聊天API,新增了两个模型,目前还是测试阶段 gpt-3.5-turbo 功能强大的GPT-3.5模型,专门针对聊天做了优化 gpt-3.5-turbo-0301 此模型只支持 ...
- Django中多数据库的配置,实现分库分表,主从复制,读写分离
在django项目中, 一个工程中存在多个APP应用很常见. 有时候希望不同的APP连接不同的数据库,这个时候需要建立多个数据库连接. 1. 修改项目的 settings 配置 在 settings. ...
- C++ cannot bind non-const lvalue reference of type ‘Dog&’ to an rvalue of type ‘Dog’
void function(Dog & d){ /************** } 调用这个函数,如果传参一个右值对象,临时对象,则会出现这个问题 一个临时对象的引用,这怎么想都不合理 从该函 ...
- Golang make和new的区别及实现原理详解
在Go语言中,有两个比较雷同的内置函数,分别是new和make方法,二者都可以用来分配内存,那他们有什么区别呢?下面我们就从底层来分析一下二者的不同.感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助 ...