JDBC连接数据库

操作步骤:
准备jar包mysql-connector-java-5.1.0-bin.jar

  • 加载驱动Class.forName(“com.mysql.jdbc.Driver”);
  • 使用DriverManager获取数据库connection连接
  • 创建Statement对象 用于执行SQL语句
  • 执行SQL语句
  • 释放资源
1.jdbc连接数据库步骤

实现jdbc连接mysql,查询输出learn库下department的数据

Connection conn=null;
Statement stat=null;
ResultSet rs = null;
try {//             加载 驱动(方言)Class.forName("com.mysql.jdbc.Driver");//              数据库端口号默认为3306可以在数据库名后加~保证编码格式和时区//              ?useUnicode=true&characterEncoding=utf-8&zeroDateTimeBehavior=convertToNullString url="jdbc:mysql://127.0.0.1:3306/learn?useUnicode=true&characterEncoding=utf-8&zeroDateTimeBehavior=convertToNull";String uname="root";String upwd="bai123456";//              根据路径,用户名,密码获取connection连接conn=DriverManager.getConnection(url,uname,upwd);//             创建statement对象执行sql语句String sql="select * from department";stat = conn.createStatement();//              executQuery返回一个set结果集,execute返回一个bool,执行成功返回false,失败返回true,executUpdate返回一个int,受影响行数rs = stat.executeQuery(sql);while(rs.next()) {System.out.println("部门id:\t"+rs.getLong(1));System.out.println("部门名称:\t"+rs.getString("dName"));}
} catch (Exception e) {e.printStackTrace();
}finally {try {conn.close();} catch (SQLException e) {e.printStackTrace();}
}
2.PreparedStatement避免sql注入

使用PreparedStatement可以避免sql注入。(使用占位符?代替字符串拼接)字符串拼接可以利用sql注释来避免输入密码,安全系数很低。

public static void main(String[] args) {Connection conn=null;PreparedStatement ps=null;try {Class.forName("com.mysql.jdbc.Driver");String url="jdbc:mysql://127.0.0.1:3306/learn?useUnicode=true&characterEncoding=utf-8&zeroDateTimeBehavior=convertToNull";String uname="root";String upwd="bai123456";conn=DriverManager.getConnection(url,uname,upwd);
//          ?为占位符,先对sql进行预编译,再对占位符注入值String sql="select * from department where did=? AND dName=?";      ps=conn.prepareStatement(sql);
//          第一个参数为位置,从1开始,第二个为注入值ps.setLong(1,2);ps.setString(2, "研发部");ResultSet rs = ps.executeQuery();while(rs.next()) {System.out.println("部门id:\t"+rs.getLong("did"));System.out.println("部门名称:\t"+rs.getString("dName"));}} catch (Exception e) {e.printStackTrace();}finally {try {conn.close();} catch (SQLException e) {// TODO Auto-generated catch blocke.printStackTrace();}}

封装JDBC

为什么封装jdbc?

普通的jdbc连接可读性差,不利于代码后期修改,复用性差,所以我们尝试_将数据库连接打开关闭封装成一个工具类,定义实体类传输数据,数据的增删改查定义为接口_来优化数据库连接。

什么是Dao层?

DAO(Date Access Object)起着转换器的作用,将数据在实体类和数据库记录之间进行转换,实现对持久化数据的访问。DAO层包含entiy包(实体类user),Dao接口(userDao),Dao实现类(userDaoImpl),工具类(负责数据库连接打开关闭)。
![image.png](https://img-blog.csdnimg.cn/img_convert/736512185d9a91c476aa4a0fc160065a.png#clientId=u4d911c19-0c68-4&crop=0&crop=0&crop=1&crop=1&from=paste&height=163&id=u3c3f97cc&margin=[object Object]&name=image.png&originHeight=254&originWidth=1139&originalType=binary&ratio=1&rotation=0&showTitle=false&size=49414&status=done&style=none&taskId=u42f2d231-de79-4c21-996b-233446c3474&title=&width=728.96)

封装Jdbc

将开启数据库连接封装为方法getConn(),查询数据库为方法executQuery(String sql,Object objs[]),查询数据库信息方法exectueSql(String sql,Object objs[]),关闭数据库连接closeResourse()

package dao.pojo;import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;public class BaseDao {Connection conn=null;PreparedStatement ps=null;/*** 开启jdbc连接* @return 成功返回true,失败返回false*/public boolean getConn() {boolean bool=false;       try {Class.forName("com.mysql.jdbc.Driver");String url="jdbc:mysql://127.0.0.1:3306/learn?useUnicode=true&characterEncoding=utf-8&zeroDateTimeBehavior=convertToNull";String username="root";String userpwd="bai123456";conn=DriverManager.getConnection(url,username,userpwd);bool=true;} catch (Exception e) {bool=false;   //未正常启动连接e.printStackTrace();}   return bool;}/*** 将对象的值注入到数据库(增删改)* @param sql语句string* @param obj存储改变数据库的对象* @return 返回受影响行数*/public int exectuQuery(String sql,Object objs[]) {int res=0;   //0行为操作失败if(getConn()) {try {ps=conn.prepareStatement(sql);if(objs!=null) {for(int i=0;i<objs.length;i++) {ps.setObject(i+1,objs[i]);}}res=ps.executeUpdate();    } catch (SQLException e) {e.printStackTrace();}}return res;}/*** 查询数据库内容* @param sql* @param objs* @return 查询结果(以集合set返回)*/public ResultSet exectueSql(String sql,Object objs[]) {ResultSet rs=null;if(getConn()) {try {if(objs!=null) {for(int i=0;i<objs.length;i++) {               ps.setObject(i+1, objs[i]);} }rs=ps.executeQuery();}catch (SQLException e) {// TODO Auto-generated catch blocke.printStackTrace();}}return rs;}/*** 关闭资源*/public void closeResourse() {try {if(ps!=null) {ps.close();}if(conn!=null) {conn.close();}} catch (Exception e) { e.printStackTrace();}   }}

原始JDBC连接与封装后的JDBC相关推荐

  1. jdbc连接teradata仓库_teradata的jdbc连接,

    teradata的jdbc连接, DB_DRIVER=com.teradata.jdbc.TeraDriver DB_URL=jdbc:teradata://127.0.0.1/CLIENT_CHAR ...

  2. java jdbc连接 代码块_java 中JDBC连接数据库代码和步骤详解及实例代码

    •创建一个以JDBC连接数据库的程序,包含7个步骤: 1.加载JDBC驱动程序: 在连接数据库之前,首先要加载想要连接的数据库的驱动到JVM(Java虚拟机),这通过java.lang.Class类的 ...

  3. java jdbc 连接mysql数据库,Java 通过JDBC连接Mysql数据库

    JDBC(Java Data Base Connectivity,java数据库连接)是一种用于执行SQL语句的Java API,可以为多种关系数据库提供统一访问,它由一组用Java语言编写的类和接口 ...

  4. java jdbc连接oracle数据库连接 不抛出异常,JDBC连接Oracle发生异常的原因

    当你通过JDBC连接Oracle数据库时发生了异常首先应该确认你的JRE是否配置正确,一般oracle10g,JRE1.4以上应当使用ojdbc14.jar. 其次你要确定你的Java语法是否错误,这 ...

  5. jdbc连接mysql8.0.21_MySQL的JDBC驱动(8.0版本)

    第十六回 IoC组件Unity续~批量动态为Unity添加类型和行为 回到目录 之前的一篇Unity的文章主要是基本的实现,并没有什么特别的地方,使用Unity可以方便的实现应用程序的IoC控制反转, ...

  6. jdbc封装mysql_用Java手动封装JDBC连接池(一)

    JDBC存在的问题 代码的冗余:在对数据库进行增删改查时,每个操作的JDBC流程和SQL执行代码的流程都一样,造成代码的冗余,所以我们可以把冗余的部分封装起来,封装之后,我们就不用再去写JDBC流程, ...

  7. JDBC连接池和DBUtils

    本节内容: JDBC连接池 DBUtils 一.JDBC连接池 实际开发中"获得连接"或"释放资源"是非常消耗系统资源的两个过程,为了解决此类性能问题,通常情况 ...

  8. JAVA WEB DAY 11_ JDBC 连接池

    文章目录 JDBC & 连接池 目标 01_ JDBC 概述-[★★] 02_ JDBC 核心 API 概述-[★★] 03_ JDBC 之注册驱动-[★★★] 04_ JDBC 之获取连接对 ...

  9. jdbc-connect-oracle12c-pdb/cdb(jdbc连接oracle12c的pdb和cdb)

      1       本文简介: 通过特意引发问题,聚焦问题,解决问题,并循序渐进 最后总结jdbc连接oracle12c中cdb和pdb的条件. 软件环境:Redhat7.1+orcacle12c 2 ...

最新文章

  1. pyinstaller python3.7_解决python3.7安装好pyinstaller却不能使用的问题
  2. iOS开发面试题整理
  3. SpringBoot+Junit在IDEA中实现查询数据库的单元测试
  4. Java 异常 总结 try catch finally Exception
  5. Perl学习笔记(六)--文件(一)
  6. 计算机里什么文件无法删除,电脑上的文件删不掉怎么办
  7. C\C++语言,从编程语言到库、API、框架、引擎
  8. 河流逻辑结构图生成方法
  9. python查询注册表子项是否存在并操作
  10. 二分法04:猜数字大小
  11. SaaS公司保持经久不衰的三大竞争优势
  12. VMware虚拟机安装Windows 7
  13. nas文件服务器权限安全,大势至局域网共享文件监控NAS文件权限设置的方法
  14. 可以写进简历的软件测试项目实战经验(包含电商、银行、app等)
  15. 企业云盘的作用不仅只是存储
  16. PLC通讯实现-C#实现欧姆龙以太网通讯FINS(二)
  17. Network App Recommend
  18. 11.Excel vba开发-根据已有名称,创建新建表格
  19. datagridview更新到数据库视频教程地址
  20. Springboot使用@EnableCache缓存

热门文章

  1. 题目:求1+2!+3!+...+20!的和
  2. 四轮转向系统横摆角速度控制simulink仿真模型,利用滑模控制算法,基于八自由度车辆模型
  3. 计算机副教授工作,评副教授的基本条件
  4. 双非研二师弟的春招总结和实习感悟
  5. 16路彩灯控制器 FPGA-Verilog
  6. 求符合给定条件的整数集(做题)
  7. 【第66篇】行人属性识别研究综述(一)
  8. Junit 实例精讲基础教程(一) 使用@Ignore注解跳过单元测试方法的执行
  9. Nexus因异常重启导致OrientDB数据库变为只读的问题修复
  10. 进程同步与互斥:Windows环境