0


JavaJDBC编程

JAVA的JDBC编程

**

  1. JDBC

**,即

  1. Java Database Connectivity

,java数据库连接。是一种用于执行SQL语句的Java API,它是Java中的数据库连接规范。这个API由java.sql.,javax.sql. 包中的一些类和接口组成,为Java开发人员操作数据库提供了一个标准的API,可以为多种关系数据库提供统一访问。

数据库编程的必备条件

  • 编程语言,如Java,C、C++、Python等;
  • 数据库驱动包:不同的数据库,对应不同的编程语言;
  • 数据库驱动包:不同的数据库,对应不同的编程语言提供了不同的数据库驱动包,如:MySQL提供了Java的驱动包mysql-connector-java,需要基于Java操作MySQL就需要该驱动包。同样的,要基于Java操作Oracle数据库则需要Oracle的数据库驱动包ojdbc。

数据库驱动包

下载驱动包地址:点进去之后,输入MySQL;
在这里插入图片描述
本文下载的是 5.1.49

在这里插入图片描述
下载如下:在这里插入图片描述
接下来就是**

  1. 配置IDEA

:
在这里插入图片描述
在这里插入图片描述
ok**就配置成功了~

JDBC使用步骤

  1. 创建数据库连接对象:Connection
  1. //建立数据库连接:Connection
  2. Connection conn= DriverManager.getConnection("jdbc:mysql://localhost:3306/java43?user=root&password=wx710500&useUnicode"+"=true&characterEncoding=UTF-8&useSSL=false");

注意URL格式:

  1. MySQL

数据连接的

  1. URL

参数格式如下:
jdbc:mysql://服务器地址:端口号/要连接的数据库名?参数名=参数值

  1. 创建操作命令对象:Statement
  1. //通过连接对象conn创建操作命令对象Statement,该对象用来操作sql的一个抽象对象
  2. Statement s=conn.createStatement();
  1. 使用操作命令对象来执行SQL
  1. //查询操作:// (1) 调用Statement操作命令对象的executeQuery(sql)// (2) 返回一个ResultSet结果集对象(查询SQL执行的结果集)
  2. ResultSet r=s.executeQuery("select id,name,role,salary from emp where id=3");

注意:

**

  1. 更新操作

**(插入,修改,删除):调用

  1. executeUpdate

方法;返回结果集采用

  1. int

接收,表示成功执行了几条数据。

  1. 处理结果集对象:ResultSet
  1. //处理结果集:结果集可能是多行数据,遍历来实现//调用next()while(r.next()){int id=r.getInt("id");
  2. String name=r.getString("name");
  3. String role=r.getString("role");
  4. Double salary=r.getDouble("salary");//此处是打印处理
  5. System.out.printf("id=%s,name=%s,role=%s,salary=%s\n",id,name,role,salary);}
  1. 释放资源

(1)无论什么情况都要释放资源;
(2)释放顺序:与创建顺序相反,此处释放顺序为(a.结果集对象;b.命令对象;c.连接对象)

完整代码:

  1. package com.xntu.jdbc;import java.sql.*;publicclassTest{publicstaticvoidmain(String[] args)throws SQLException, ClassNotFoundException {
  2. Connection conn =null;
  3. Statement s =null;
  4. ResultSet r =null;try{
  5. Class.forName("com.mysql.jdbc.Driver");//建立数据库连接:Connection
  6. conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/java43?user=root&password=wx710500&useUnicode"+"=true&characterEncoding=UTF-8&useSSL=false");//通过连接对象conn创建操作命令对象Statement,该对象用来操作sql的一个抽象对象
  7. s = conn.createStatement();//查询操作:// (1) 调用Statement操作命令对象的executeQuery(sql)// (2) 返回一个ResultSet结果集对象(查询SQL执行的结果集)
  8. r = s.executeQuery("select id,name,role,salary from emp where id=3");//处理结果集:结果集可能是多行数据,遍历来实现//调用next()while(r.next()){int id = r.getInt("id");
  9. String name = r.getString("name");
  10. String role = r.getString("role");
  11. Double salary = r.getDouble("salary");
  12. System.out.printf("id=%s,name=%s,role=%s,salary=%s\n", id, name, role, salary);}}finally{//释放资源//出现异常时,对象可能没有被赋值,调用close就会出现空指针异常if(r != null)
  13. r.close();if(s != null)
  14. s.close();if(conn != null)
  15. conn.close();}}}

运行结果:
在这里插入图片描述
与数据库查询结果相一致
在这里插入图片描述

JDBC优化部分代码

优化1: 获取

  1. Connection

对象通常有两种方式:

  • DriverManager 静态方法获取;

缺点

无法重复利用,每次使用完以后释放资源时,通过

  1. connection.close()

都是关闭物理连接。

  • DataSource 数据源获取,也称作数据库连接池获取;

代码如下

  1. //先创建数据库连接池,再通过连接池获取数据库连接对象
  2. DataSource ds =newMysqlDataSource();//创建数据库连接池:初始化时,就会创建一定数量的数据库连接,这些连接对象是可以重复使用,效率更高//整个url带参数可以只使用setURL方法,也可以将参数调用方法的方式来设置((MysqlDataSource) ds).setURL("jdbc:mysql://localhost:3306/java43");((MysqlDataSource) ds).setUser("root");((MysqlDataSource) ds).setPassword("wx710500");((MysqlDataSource) ds).setUseUnicode(true);((MysqlDataSource) ds).setCharacterEncoding("UTF-8");((MysqlDataSource) ds).setUseSSL(false);
  3. conn = ds.getConnection();

该种方式性能高,可以重复使用,**

  1. 往往实际应用中多使用

**;

优化2:Statement对象

  1. Statement

对象主要是将

  1. SQL

语句发送到数据库中。

  1. JDBC API

中主要提供了三种

  1. Statement

对象:

  • Statement 对象:用于执行不带参数的简单SQL语句;
  • PreparedStatement 对象:用于执行带或不带参数的SQL语句;SQL语句会预编译在数据库里面;执行速度快于Statement对象。
  • CallableStatement 对象:用于执行数据库存储过程的调用;

优化部分整体代码:

  1. import com.mysql.jdbc.jdbc2.optional.MysqlDataSource;import javax.sql.DataSource;import java.sql.*;publicclasstest{publicstaticvoidmain(String[] args)throws ClassNotFoundException, SQLException {
  2. Connection conn = null;
  3. PreparedStatement ps = null;
  4. ResultSet r = null;try{//创建数据库连接池,通过连接池获取数据库连接对象
  5. DataSource ds =newMysqlDataSource();//设置URL((MysqlDataSource) ds).setURL("jdbc:mysql://localhost:3306/java43");((MysqlDataSource) ds).setUser("root");((MysqlDataSource) ds).setPassword("wx710500");((MysqlDataSource) ds).setUseUnicode(true);((MysqlDataSource) ds).setCharacterEncoding("UTF-8");((MysqlDataSource) ds).setUseSSL(false);//通过连接池对象获取连接对象
  6. conn = ds.getConnection();//使用操作命令对象PreparedStatement
  7. String queryName ="skdjsj' or '1'='1";int queryId =3;//准备一个带?占位符的sql
  8. String sql ="select id,name,role,salary from emp where name=? or id=?";//创建预编译的操作命令对象
  9. ps = conn.prepareStatement(sql);//替换占位符:调用setXXX方法,第一个参数,表示第几个占位符(从1开始),第二个参数,表示要替换的值//替换的值是什么类型,就调用setXXX方法
  10. ps.setString(1, queryName);
  11. ps.setInt(2, queryId);//执行sql,需要使用无参的方法
  12. r = ps.executeQuery();//查询操作//处理结果集:结果集可能是多行数据,需要遍历来获取// 调用next就移动到下一行,返回true代表该行有数据,返回false代表该行没有数据while(r.next()){int id = r.getInt("id");
  13. String name = r.getString("name");
  14. String role = r.getString("role");
  15. Double salary = r.getDouble("salary");
  16. System.out.printf("id=%s, name=%s, role=%s, salary=%s\n",
  17. id, name, role, salary);}}finally{//无论如何,都要释放资源//释放资源://出现异常的时候,对象可能还没有赋值(初始化),调用close就会出现空指针异常if(r != null)
  18. r.close();if(ps != null)
  19. ps.close();if(conn != null)
  20. conn.close();}}}

结果如下:在这里插入图片描述

标签:

本文转载自: https://blog.csdn.net/m0_52083255/article/details/122348131
版权归原作者 Java小菜鸟~ 所有, 如有侵权,请联系我们删除。

“JavaJDBC编程”的评论:

还没有评论