【JDBC】练习
2022/1/11 23:10:56
本文主要是介绍【JDBC】练习,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
文章目录
- 1.什么是JDBC?
- 2.JDBC常用接口
- 3.JDBC访问数据库的过程
- 4.代码实现
- 查询sql语句
- 创建表
- 创建自增序列
- 进行封装
- 数据访问对象(data access object)
- 接口
- Emp
- 接口实现
- 批量提交
1.什么是JDBC?
- JDBC全称Java Database Connectivity 是基于Java语言访问数据库的一种技术,一种用于执行SQL语言的Java API,可以为多种关系型数据库提供统一访问,由Java语言编写的类和接口组成。
- 主要的两个包
- java.sql包:提供访问数据库基本的功能
- javax.sql包:提供扩展功能
- JDBC可以做什么
- 连接到数据库
- 在Java app中执行SQL语句
- 处理结果
2.JDBC常用接口
- java.sql.Driver:驱动
- java.sql.Connection:完成对某一指定数据库的连接
- java.sql.Statement:静态处理块,在一个给定的连接中作为SQL执行声明的容器
- java.sql.PreparedStatement:预处理块,用于执行预编译的sql声明
- java.sql.ResultSet:结果集,对于给定声明取得结果的途径
- java.sql.ResultSetMetaData:结果集元数据
3.JDBC访问数据库的过程
- 驱动管理器——加载jdbc程序
- 连接数据库——建立于数据库的连接
- sql语句——发送sql语句
- 结果集——得到查询结果
4.代码实现
查询sql语句
import java.sql.Connection; import java.sql.DriverManager; import java.sql.ResultSet; import java.sql.Statement; //如果需要建议连接,java中提供了一套标准,数据库厂商来进行实现,包含实现子类,实子类的jar文件在哪 //一般情况下存放在安装目录下 public class JDBCTest { public static void main (String[] args) throws Exception { //1、加载驱动: /* * 当执行了当前代码之后,会返回一个Class对象,再此对象的创建过程中,会调用具体类的静态代码块 * */ Class.forName ("oracle.jdbc.driver.OracleDriver"); //2、建立连接 //第一步中已经经driver对象初测到了drivermanager中,所以此时可以直接通过DriverManager来获取数据库的连接 /* * 需要输入连接数据库的参数 * url:数据库的地址 * username:用户名 * password:密码 * * */ Connection connection = DriverManager.getConnection ("jdbc:oracle:thin:@localhost:1521:orcl", "scott", "tiger"); //3、测试连接是否成功 System.out.println (connection); //4、定义sql语句 //只要填写正常执行的sql语句即可 String sql = "select * from emp"; //5、准备静态处理块对象,将sql语句放置到静态处理块中,理解为sql语句放置对象 /* * 在执行sql语句的过程中,需要一个对象来存放sql语句,将对象进行执行的时候调用的是数据库的服务,数据库会从当前对象中 * 拿到对应的sql语句进行执行 * * */ Statement statement = connection.createStatement (); //6、执行sql语句,返回值对象是结果集合 /* * 将结果放到resultset中,是返回结果的一个集合 * 需要经过循环迭代才能获取到其中的每一条记录 * * statement在执行的时候可以选择三种方式: * 1、execute:任何SQL语句都可以执行 * 2、executeQueryL只能执行查询语句 * 3、executeUpdate,只能执行DML语句 * */ ResultSet resultSet = statement.executeQuery (sql); //7、循环处理 //使用while循环,有两种获取具体值的方式,第一种通过下表索引编号来获取,从1开始,第二种是通过列名来获取,哪种好?推荐使用列名,列明一般不会发生修改 while(resultSet.next ()){ int anInt = resultSet.getInt (1); System.out.println (anInt); String ename = resultSet.getString ("ename"); System.out.println (ename); System.out.println ("-----------------"); } //8、关闭连接 statement.close (); connection.close (); } }
创建表
package com.mashibing; import java.sql.Connection; import java.sql.DriverManager; import java.sql.Statement; /* * 当执行DDL语句的时候,不会返回对应的结果 * */ public class CreateTable { public static void main (String[] args) throws Exception { Class.forName ("oracle.jdbc.driver.OracleDriver"); Connection connection = DriverManager.getConnection ("jdbc:oracle:thin:@localhost:1521:orcl", "scott", "tiger"); Statement statement = connection.createStatement (); String sql = "create table psn(id number(10) primary key,name varchar2(10))"; boolean execute = statement.execute (sql); System.out. println (execute); statement. close (); connection. close (); } }
创建自增序列
package com.mashibing; import java.sql.Connection; import java.sql.DriverManager; import java.sql.Statement; public class CreateSeq { public static void main (String[] args) throws Exception{ Class.forName ("oracle.jdbc.driver.OracleDriver"); Connection connection = DriverManager.getConnection ("jdbc:oracle:thin:@localhost:1521:orcl", "scott", "tiger"); String sql = "create sequence seq_1 increment by 1 start with 1"; Statement statement = connection.createStatement (); boolean execute = statement.execute (sql); System.out.println (execute); statement.close (); connection.close (); } }
进行封装
package com.mashibing.util; import java.sql.*; public class DBUtil { public static final String URL = "jdbc:oracle:thin:@localhost:1521:orcl"; public static final String USERNAME = "scott"; public static final String PASSWORD = "tiger"; static { try { Class.forName ("oracle.jdbc.driver.OracleDriver"); } catch (ClassNotFoundException e) { e.printStackTrace (); } } /** * 获取数据库连接 * @return 返回连接对象 */ public static Connection getConnection (){ try { return DriverManager.getConnection (URL,USERNAME,PASSWORD); } catch (SQLException e) { e.printStackTrace (); } return null; } /* * 关闭数据库连接,方法重载 * */ public static void closeConnection (Connection connection){ if(connection!=null){ try { connection.close (); } catch (SQLException e) { e.printStackTrace (); } } } public static void closeConnection (Connection connection, Statement statement){ if (statement!=null){ try { statement.close (); } catch (SQLException e) { e.printStackTrace (); } } if(connection!=null){ try { connection.close (); } catch (SQLException e) { e.printStackTrace (); } } } public static void closeConnection (Connection connection, Statement statement, ResultSet resultSet){ if (resultSet!=null){ try { resultSet.close (); } catch (SQLException e) { e.printStackTrace (); } } if (statement!=null){ try { statement.close (); } catch (SQLException e) { e.printStackTrace (); } } if(connection!=null){ try { connection.close (); } catch (SQLException e) { e.printStackTrace (); } } } }
数据访问对象(data access object)
接口
public interface EmpDao { //插入数据 public void insert(Emp emp); //删除数据 public void delete(Emp emp); //修改数据 public void update(Emp emp); //查找数据 public Emp getEmpByEmpno(Integer empno); public Emp getEmpByEname(String name); }
Emp
public class Emp { private Integer empno; private String ename; private String job; private Integer mgr; private String hiredate; private Double sal; private Double comm; private Integer deptno; public Emp() { } public Emp(Integer empno, String ename, String job, Integer mgr, String hiredate, Double sal, Double comm, Integer deptno) { this.empno = empno; this.ename = ename; this.job = job; this.mgr = mgr; this.hiredate = hiredate; this.sal = sal; this.comm = comm; this.deptno = deptno; } public Integer getEmpno() { return empno; } public void setEmpno(Integer empno) { this.empno = empno; } public String getEname() { return ename; } public void setEname(String ename) { this.ename = ename; } public String getJob() { return job; } public void setJob(String job) { this.job = job; } public Integer getMgr() { return mgr; } public void setMgr(Integer mgr) { this.mgr = mgr; } public String getHiredate() { return hiredate; } public void setHiredate(String hiredate) { this.hiredate = hiredate; } public Double getSal() { return sal; } public void setSal(Double sal) { this.sal = sal; } public Double getComm() { return comm; } public void setComm(Double comm) { this.comm = comm; } public Integer getDeptno() { return deptno; } public void setDeptno(Integer deptno) { this.deptno = deptno; } @Override public String toString() { return "Emp{" + "empno=" + empno + ", ename='" + ename + '\'' + ", job='" + job + '\'' + ", mrg=" + mgr + ", hiredate=" + hiredate + ", sal=" + sal + ", comm=" + comm + ", deptno=" + deptno + '}'; } }
接口实现
public class EmpDaoLmp2 implements EmpDao { @Override public void insert(Emp emp) { Connection connection = null; PreparedStatement pstmt = null; try { connection = DBUtil.getConnection(); // 设置事务是否自动提交,true自动 // connection.setAutoCommit(true); String sql = "insert into emp values(?,?,?,?,?,?,?,?)"; pstmt = connection.prepareStatement(sql); pstmt.setInt(1, emp.getEmpno()); pstmt.setString(2, emp.getEname()); pstmt.setString(3,emp.getJob()); pstmt.setInt(4, emp.getMgr()); pstmt.setDate(5, new java.sql.Date(new SimpleDateFormat("yyyy-MM-DD").parse(emp.getHiredate()).getTime())); pstmt.setDouble(6,emp.getSal()); pstmt.setDouble(7, emp.getComm()); pstmt.setInt(8, emp.getDeptno()); System.out.println(sql); int i = pstmt.executeUpdate(); System.out.println("受影响的行数是:" + i); } catch (SQLException | ParseException e) { e.printStackTrace(); } finally { DBUtil.closeConnection(connection, pstmt); } } @Override public void delete(Emp emp) { Connection connection = null; PreparedStatement statement = null; try { connection = DBUtil.getConnection(); String sql = "delete from emp where empno = ?"; statement = connection.prepareStatement(sql); statement.setInt(1,emp.getEmpno()); System.out.println(sql); int i = statement.executeUpdate(); System.out.println("受影响的行数是:" + i); } catch (SQLException e) { e.printStackTrace(); } finally { DBUtil.closeConnection(connection, statement); } } @Override public void update(Emp emp) { Connection connection = null; PreparedStatement statement = null; try { connection = DBUtil.getConnection(); String sql = "update emp set job = ? where empno = ?"; statement = connection.prepareStatement(sql); statement.setString(1, emp.getJob()); statement.setInt(2, emp.getEmpno()); System.out.println(sql); int i = statement.executeUpdate(); System.out.println("受影响的行数为:" + i); } catch (SQLException e) { e.printStackTrace(); } finally { DBUtil.closeConnection(connection, statement); } } @Override public Emp getEmpByEmpno(Integer empno) { Connection connection = null; Statement statement = null; ResultSet resultSet = null; Emp emp = null; try { connection = DBUtil.getConnection(); statement = connection.createStatement(); String sql = "select * from emp where empno = " + empno; System.out.println(sql); resultSet = statement.executeQuery(sql); SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); while (resultSet.next()) { emp = new Emp(resultSet.getInt("empno"), resultSet.getString("ename"),resultSet.getString("job"), resultSet.getInt("mgr"), sdf.format(resultSet.getDate("hiredate")), resultSet.getDouble("sal"), resultSet.getDouble("comm"), resultSet.getInt("deptno")); } } catch (SQLException e) { e.printStackTrace(); } finally { DBUtil.closeConnection(connection,statement,resultSet); } return emp; } @Override public Emp getEmpByEname(String name) { Connection connection = null; PreparedStatement pstmt = null; ResultSet resultSet = null; Emp emp = null; try { connection = DBUtil.getConnection(); String sql = "select * from emp where ename = ?"; pstmt = connection.prepareStatement(sql); pstmt.setString(1, name); System.out.println(sql); resultSet = pstmt.executeQuery(); SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); while (resultSet.next()) { emp = new Emp(resultSet.getInt("empno"), resultSet.getString("ename"), resultSet.getString("job"), resultSet.getInt("mgr"), sdf.format(resultSet.getDate("hiredate")), resultSet.getDouble("sal"), resultSet.getDouble("comm"), resultSet.getInt("deptno")); } } catch (SQLException e) { e.printStackTrace(); } finally { DBUtil.closeConnection(connection, pstmt, resultSet); } return emp; } public static void main(String[] args) { EmpDao empDao = new EmpDaoLmp2(); // Emp emp = new Emp(3333,"lala","HEHE",1111,"2019-11-09",1500.0,500.0,10); Emp emp = new Emp(3333,"lala","ooo",1111,"2019-11-09",1500.0,500.0,10); // empDao.insert(emp); // empDao.delete(emp); empDao.update(emp); // Emp emp1 = empDao.getEmpByEmpno(7369); // System.out.println(emp1); // sql注入,这个是PreparedStatement改后的防注入版本 // Emp emp2 = empDao.getEmpByEname("'SMTTH' or 1 = 1"); // Emp emp3 = empDao.getEmpByEname("SMITH"); // System.out.println(emp2); // System.out.println(emp3); } }
批量提交
public class BatchDaoImpl { public static void main(String[] args) { insertBatch(); } public static void insertBatch() { Connection connection = DBUtil.getConnection(); PreparedStatement pstmt = null; String sql = "insert into emp(empno, ename) values(?,?)"; try { pstmt = connection.prepareStatement(sql); for (int i = 0; i < 100; i++) { pstmt.setInt(1, i); pstmt.setString(2, "lx" + i); pstmt.addBatch(); } int[] ints = pstmt.executeBatch(); } catch (SQLException e) { e.printStackTrace(); } finally { DBUtil.closeConnection(connection, pstmt); } }
这篇关于【JDBC】练习的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2025-01-09CMS内容管理系统是什么?如何选择适合你的平台?
- 2025-01-08CCPM如何缩短项目周期并降低风险?
- 2025-01-08Omnivore 替代品 Readeck 安装与使用教程
- 2025-01-07Cursor 收费太贵?3分钟教你接入超低价 DeepSeek-V3,代码质量逼近 Claude 3.5
- 2025-01-06PingCAP 连续两年入选 Gartner 云数据库管理系统魔力象限“荣誉提及”
- 2025-01-05Easysearch 可搜索快照功能,看这篇就够了
- 2025-01-04BOT+EPC模式在基础设施项目中的应用与优势
- 2025-01-03用LangChain构建会检索和搜索的智能聊天机器人指南
- 2025-01-03图像文字理解,OCR、大模型还是多模态模型?PalliGema2在QLoRA技术上的微调与应用
- 2025-01-03混合搜索:用LanceDB实现语义和关键词结合的搜索技术(应用于实际项目)