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的使用与封装相关推荐

  1. java jdbc 增删改封装_JAVA JDBC 常规增删改查简单封装

    JAVA JDBC 常规增删改查简单封装,可满足大多基本要求 作用: 1, 查询列表是直接返回List对象,不必再遍历: 2, 单条查询直接返回对象: 3, 执行sql仅需一个方法搞定: packag ...

  2. java jdbc 教程_java JDBC系列教程之JDBC类的简析与JDBC的基础操作

    什么是JDBC? 概念:JAVA Database Connectivity Javas数据库连接,Java语言操作数据库接口,然后由各个数据库厂商去实现这个接口,提供数据库驱动java包,我们可以使 ...

  3. jdbc oracle存储过程,java jdbc 执行oracle存储过程

    java jdbc 执行oracle存储过程 发布时间:2020-07-12 08:25:32 来源:51CTO 阅读:188 作者:v512345 java代码 public Connection ...

  4. JDBC 的代码逻辑封装

    JDBC 的代码逻辑封装 目录 JDBC 的代码逻辑封装 1.前言 2.定义统一接口 3. 封装针对用户相关各种操作的类 4.针对于各种操作的封装 5.代码测试 5.1 查询操作 5.2 增加操作 5 ...

  5. Java JDBC和数据库连接池 韩顺平老师自学笔记

    JDBC和数据库连接池 JDBC 概述 基本介绍 原理示意图 代码示例 JdbcInterface 模拟Java公司提供给其它数据库厂商的接口,供给调用 TestJdbc 模拟一个类来实现数据库的调用 ...

  6. 【小白学java】java的面向对象设计:封装+继承+抽象类+接口(day06)

    课程链接:共六天 第一天:开发环境:初识java,搭建环境 第二天:语言基础:关键字.变量.常量.运算符 第三天:数据结构:基本类型.包装类型.引用类型(数组和对象) 第四天:流程控制:分支判断.循环 ...

  7. 二、SQL注入使用占位符解决、JDBC工具类、封装

    一.SQL注入使用占位符解决 //使用jdbc发送sql语句, 到数据库tb_user 查询是否有该用户名和密码的用户Connection conn = null;PreparedStatement ...

  8. jdbc中递归树封装查询数据

    jdbc中递归树封装查询 一.递归树封装多次查询 数据库驱动包.jar文件: ①数据库数据准备(使用IDEA(64位)软件和phpstudy软件,即小皮系统(64位)) ②实体:为了使用通用 Dao ...

  9. java预编译啥意思_java预编译 java jdbc 预编译语句和普通语句的区别

    java中什么是预编译precompile?总有一天你恍然大悟,父母是你花心思,花时间最少,却最爱你的人. 什么是预编译?起什么作用的? . 在java中如何实现预编译?祝你幸福!这句话真俗.小编会祝 ...

  10. Atitit. 数据库-----catalog与schema的设计区别以及在实际中使用 获取数据库所有库表 java jdbc php  c#.Net...

    Atitit. 数据库-----catalog与schema的设计区别以及在实际中使用 获取数据库所有库表 java jdbc php  c#.Net 1. -catalog与schema的设计区别1 ...

最新文章

  1. Android实现双击事件的两种方式
  2. 后现代婚礼机器人显神通_机器人显神通
  3. MySQL多表查询和事务安全
  4. 为什么阿里巴巴Java开发手册中不允许用Executors去创建线程池?
  5. P2444-[POI2000]病毒【AC自动机】
  6. jenkins 远程启动tomcat报错:Neither the JAVA_HOME nor the JRE_HOME environment variable is defined
  7. c语言程序设计的日志,C语言程序设计教学日志.docx
  8. ftp网页版服务器地址,免费ftp服务器地址汇总
  9. Mybatis的动态sql(五)
  10. LINUX 导出文件夹到本地
  11. 免费数据集 公开数据集下载 网站
  12. 简洁商业计划书PPT模板
  13. 计算机模拟做报童模型,用基于计算机随机模拟的下降法求解报童问题
  14. Linux 快速搭建免费邮件服务器
  15. 【if,elseif,if else区别】看这一篇就够了
  16. 东方日升2019年全年营收实现高质量增长
  17. java开发抢红包算法,抢红包算法的实现-java
  18. Navigation Controller 的常用操作
  19. 生物电镜常见问题及解答
  20. 两个关于vlan间通信的实验

热门文章

  1. go html vue,[终极巨坑]golang+vue开发日记【三】,登陆界面制作(二)
  2. Android JSON解析并展现在listactivity实例
  3. Mac 通过openCV打开摄像头权限
  4. 计算机会计系统与手工会计系统有什么异同,会计电算化系统与手工会计系统的比较研究...
  5. 腾讯视频QLV格式转换mp4的方法
  6. ANSI 标准是为了确保 C++ 的便携性
  7. AndroidIOS APP启动速度专项测试方法
  8. c语言用户态锁使用,用户态自旋锁、读写自旋锁及互斥锁
  9. webotAI网页版上线啦!
  10. 自学编程应该从哪里开始?