java:JDBC的使用与封装
JDBC连接过程:
1.导入相关的JDBC驱动jar包;
①:新建一个文件夹,命名为lib;
②:将jar包粘贴至此文件夹;
③:右键jar包,Add to Build Path;
④:完成。
2.注册驱动,把mysql的Driver对象注册到java.sql.Drivermanager中;
Class.forName("com.mysql.jdbc.Driver");
3.建立连接;
Connection conn = DriverManager.getConnection(URL, USER, PASSWORD);
4.SQL业务操作;
首先简单介绍一下连接的数据库book:
只有两个表:user和bookmessage。
①:user
②:bookmessage
uid为外键,下面的业务操作只用到表bookmessage。
①:Statement;
(1)查询操作:
Statement stmt = null;ResultSet rs = null;List<book> list = new ArrayList<book>();String sql ="select * from bookmessage";rs = stmt.executeQuery(sql);//查询while(rs.next()) {int bid = rs.getInt(1);//bid数据类型为intString name = rs.getString(2);//bookname数据类型为Stringint uid = rs.getInt(3);//uid数据类型为int//System.out.println(rs.getInt(1)+"\t"+rs.getString(2)+"\t"+rs.getInt(3));直接打印表的信息;book b = new book(bid,name,uid);//构建book类打印表的信息list.add(b);//加入book类list}//打印for(int i=0;i<list.size();i++) {System.out.println(list.get(i).getBid()+"\t"+list.get(i).getBookname()+"\t\t"+list.get(i).getUid());}
book类:
package JDBC;public class book {private int bid;private String bookname;private int uid;public book() {}public book(int bid,String bookname,int uid) {this.bid = bid;this.bookname = bookname;this.uid = uid;}public int getBid() {return bid;}public void setBid(int bid) {this.bid = bid;}public String getBookname() {return bookname;}public void setBookname(String bookname) {this.bookname = bookname;}public int getUid() {return uid;}public void setUid(int uid) {this.uid = uid;}
}
(2)删除操作:
Statement stmt = null;String sql ="delete from bookmessage where bid =6";stmt = conn.createStatement();int v = stmt.executeUpdate(sql);//添加 修改 删除时 返回受影响的行数;if(v>0) {System.out.println("success");}else {System.out.println("fail");}
添加和修改就不一一进行演示了,接下来介绍PreparedStatement。
②:PreparedStatement。
PreparedStatement有预编译功能,可以防止sql注入,安全性更高。
举一个添加的例子:
String sql ="insert into bookmessage values(?,?,?)";int bid = 7;String bookname ="林清玄散文精选";int uid = 3;pstmt = conn.prepareStatement(sql);//给定参数位置从左到右依次为1,2,3,4 ~~pstmt.setInt(1,bid);//第一个?处设置参数bidpstmt.setString(2,bookname);//第二个?处设置参数booknamepstmt.setInt(3,uid);//第三个?处设置参数uidint v = pstmt.executeUpdate();if(v>0) {System.out.println("success");}else {System.out.println("fail");}
5.关闭资源。
执行完sql业务后,关闭使用的资源,要进行判空。
if(null != rs) {rs.close();}if(null != stmt) {stmt.close();}if(null != pstmt) {pstmt.close();}if(null != conn) {conn.close();}
JDBC封装:
既然我们了解了JDBC连接的过程,那么我们大致可以将其分为三个部分:sql业务操作前为第一部分,准备部分,需要进行注册和连接;sql业务操作为第二部分;最后一部分为关闭资源。那么除第二部分sql业务操作外,其余两部分可以封装在一个工具类中。
第一部分,准备:
注册驱动可以放在静态块中,进行类的初始化:
static {try {Class.forName(DRIVERPATH);}catch(ClassNotFoundException e) {e.printStackTrace();}}
获取Connection对象:
public static Connection getConn() {synchronized(DBconUtil.class) {try {if(null == conn || conn.isClosed()) {synchronized(DBconUtil.class) {conn = DriverManager.getConnection(URL,USER,PASSWORD);}}}catch(SQLException e) {e.printStackTrace();}}return conn;}
关闭资源:
用stmt可以把pstmt的位置填null,用pstmt可以把stmt的位置填null。
public static void close(Connection con,PreparedStatement pstmt,Statement stmt,ResultSet rs) {try {if(null != rs) {rs.close();}}catch(SQLException e) {e.printStackTrace();}finally {try {if(null != stmt) {stmt.close();}}catch(SQLException e) {e.printStackTrace();}finally {try {if(null != pstmt) {pstmt.close();}}catch(SQLException e) {e.printStackTrace();}finally {//关闭资源try {if(null != conn) {conn.close();}}catch(SQLException e) {e.printStackTrace();}}}}}
DBconUtil类:
最后附上封装类,整理不易。
package JDBC;import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;public class DBconUtil {private static final String URL = "jdbc:mysql://127.0.0.1:3306/book";private static final String USER = "root";private static final String PASSWORD = "123456";private static final String DRIVERPATH = "com.mysql.jdbc.Driver";private static Connection conn = null;Statement stmt = null;static {try {Class.forName(DRIVERPATH);}catch(ClassNotFoundException e) {e.printStackTrace();}}public static Connection getConn() {synchronized(DBconUtil.class) {try {if(null == conn || conn.isClosed()) {synchronized(DBconUtil.class) {conn = DriverManager.getConnection(URL,USER,PASSWORD);}}}catch(SQLException e) {e.printStackTrace();}}return conn;}public static void close(Connection con,PreparedStatement pstmt,Statement stmt,ResultSet rs) {try {if(null != rs) {rs.close();}}catch(SQLException e) {e.printStackTrace();}finally {try {if(null != stmt) {stmt.close();}}catch(SQLException e) {e.printStackTrace();}finally {try {if(null != pstmt) {pstmt.close();}}catch(SQLException e) {e.printStackTrace();}finally {//关闭资源try {if(null != conn) {conn.close();}}catch(SQLException e) {e.printStackTrace();}}}}}
}
java:JDBC的使用与封装相关推荐
- java jdbc 增删改封装_JAVA JDBC 常规增删改查简单封装
JAVA JDBC 常规增删改查简单封装,可满足大多基本要求 作用: 1, 查询列表是直接返回List对象,不必再遍历: 2, 单条查询直接返回对象: 3, 执行sql仅需一个方法搞定: packag ...
- java jdbc 教程_java JDBC系列教程之JDBC类的简析与JDBC的基础操作
什么是JDBC? 概念:JAVA Database Connectivity Javas数据库连接,Java语言操作数据库接口,然后由各个数据库厂商去实现这个接口,提供数据库驱动java包,我们可以使 ...
- jdbc oracle存储过程,java jdbc 执行oracle存储过程
java jdbc 执行oracle存储过程 发布时间:2020-07-12 08:25:32 来源:51CTO 阅读:188 作者:v512345 java代码 public Connection ...
- JDBC 的代码逻辑封装
JDBC 的代码逻辑封装 目录 JDBC 的代码逻辑封装 1.前言 2.定义统一接口 3. 封装针对用户相关各种操作的类 4.针对于各种操作的封装 5.代码测试 5.1 查询操作 5.2 增加操作 5 ...
- Java JDBC和数据库连接池 韩顺平老师自学笔记
JDBC和数据库连接池 JDBC 概述 基本介绍 原理示意图 代码示例 JdbcInterface 模拟Java公司提供给其它数据库厂商的接口,供给调用 TestJdbc 模拟一个类来实现数据库的调用 ...
- 【小白学java】java的面向对象设计:封装+继承+抽象类+接口(day06)
课程链接:共六天 第一天:开发环境:初识java,搭建环境 第二天:语言基础:关键字.变量.常量.运算符 第三天:数据结构:基本类型.包装类型.引用类型(数组和对象) 第四天:流程控制:分支判断.循环 ...
- 二、SQL注入使用占位符解决、JDBC工具类、封装
一.SQL注入使用占位符解决 //使用jdbc发送sql语句, 到数据库tb_user 查询是否有该用户名和密码的用户Connection conn = null;PreparedStatement ...
- jdbc中递归树封装查询数据
jdbc中递归树封装查询 一.递归树封装多次查询 数据库驱动包.jar文件: ①数据库数据准备(使用IDEA(64位)软件和phpstudy软件,即小皮系统(64位)) ②实体:为了使用通用 Dao ...
- java预编译啥意思_java预编译 java jdbc 预编译语句和普通语句的区别
java中什么是预编译precompile?总有一天你恍然大悟,父母是你花心思,花时间最少,却最爱你的人. 什么是预编译?起什么作用的? . 在java中如何实现预编译?祝你幸福!这句话真俗.小编会祝 ...
- Atitit. 数据库-----catalog与schema的设计区别以及在实际中使用 获取数据库所有库表 java jdbc php c#.Net...
Atitit. 数据库-----catalog与schema的设计区别以及在实际中使用 获取数据库所有库表 java jdbc php c#.Net 1. -catalog与schema的设计区别1 ...
最新文章
- Android实现双击事件的两种方式
- 后现代婚礼机器人显神通_机器人显神通
- MySQL多表查询和事务安全
- 为什么阿里巴巴Java开发手册中不允许用Executors去创建线程池?
- P2444-[POI2000]病毒【AC自动机】
- jenkins 远程启动tomcat报错:Neither the JAVA_HOME nor the JRE_HOME environment variable is defined
- c语言程序设计的日志,C语言程序设计教学日志.docx
- ftp网页版服务器地址,免费ftp服务器地址汇总
- Mybatis的动态sql(五)
- LINUX 导出文件夹到本地
- 免费数据集 公开数据集下载 网站
- 简洁商业计划书PPT模板
- 计算机模拟做报童模型,用基于计算机随机模拟的下降法求解报童问题
- Linux 快速搭建免费邮件服务器
- 【if,elseif,if else区别】看这一篇就够了
- 东方日升2019年全年营收实现高质量增长
- java开发抢红包算法,抢红包算法的实现-java
- Navigation Controller 的常用操作
- 生物电镜常见问题及解答
- 两个关于vlan间通信的实验
热门文章
- go html vue,[终极巨坑]golang+vue开发日记【三】,登陆界面制作(二)
- Android JSON解析并展现在listactivity实例
- Mac 通过openCV打开摄像头权限
- 计算机会计系统与手工会计系统有什么异同,会计电算化系统与手工会计系统的比较研究...
- 腾讯视频QLV格式转换mp4的方法
- ANSI 标准是为了确保 C++ 的便携性
- AndroidIOS APP启动速度专项测试方法
- c语言用户态锁使用,用户态自旋锁、读写自旋锁及互斥锁
- webotAI网页版上线啦!
- 自学编程应该从哪里开始?