评论

收藏

[Java] jdbc实现连接和增删改查功能

编程语言 编程语言 发布于:2021-09-18 17:53 | 阅读数:190 | 评论:0

这篇文章主要为大家详细介绍了jdbc实现连接和基本的增删改查功能,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
jdbc的定义
jdbc(java data base connectivity,java数据库连接)是一种用于执行sql语句的java api,可以为多种关系数据库提供统一访问,它由一组用java语言编写的类和接口组成。jdbc提供了一种基准,据此可以构建更高级的工具和接口,使数据库开发人员能够编写数据库应用程序。
jdbc的基本连接
简单的说就是加载驱动,建立连接,然后进行查询和删除等语句的操作,在java中提供了java.sql的jar包,不过我现在用的是mysql的连接和实例,在这里基本在本地的服务器都是用到下面这个语句。
class.forname("com.mysql.jdbc.driver");
 
  string url="jdbc:mysql://localhost:3306/test2?useunicode=true&characterencoding=utf-8";
  string user="root";
  string password="root";
加载和建立连接,这就是基本的一个语法结构,在连接数据库当然还有其他的属性可以设置,比如说最大的连接数了,和如何建立连接池,都可以在配置中用到,这里我就简单的介绍如何连接,后面跟的是这个连接的字符集,防止出现乱码。
简单的增删改查
简单的增删改查是每个开发者都会遇到的,毕竟我们整个系统真正的业务所在也是这几个简单的逻辑,但是在关系的连接和耦合性下就会变成复杂百倍的系统,所以要懂得基本的就可以窥见更大系统的构建了,所以我现在要分析的只是基本的功能实现。
首先连接好数据库之后,那就是创建查询语句,这里用到的是statment这个关键词,下面是代码的基本实现。
package dbtest;
 
import java.sql.connection;
import java.sql.drivermanager;
import java.sql.resultset;
import java.sql.sqlexception;
import java.sql.statement;
import java.text.simpledateformat;
import java.util.arraylist;
import java.util.date;
import java.util.list;
 
 
public class dbtest {
 
 public static void main(string[] args) {
  employee employee1 =new employee();
  employee1.setempno(555);
  employee1.setename("hakly");
  employee1.setsal(5400);
  employee1.sethiredate(new date());
 
  addemployee(employee1);
  list<employee>employees=getemployees();
  for(employee employee:employees){
   system.out.println(employee);
 
  }
 
  employee employee =new employee();
  employee.setempno(999);
  employee.setename("jack");
  employee.setsal(5000);
  employee.sethiredate(new date());
 
  addemployee(employee);
 
 }
 
  public static list<employee> getemployees() {
  resultset rs=null;
  connection conn=null;
  statement stat=null;
  list<employee> employees=new arraylist<employee>();
  try{
   class.forname("com.mysql.jdbc.driver");
 
 
  string url="jdbc:mysql://localhost:3306/test2?useunicode=true&characterencoding=utf-8";
  string user="root";
  string password="root";
  conn= drivermanager.getconnection(url,user,password);
  stat=conn.createstatement();
  string sql="select * from emp";
   rs=stat.executequery(sql);
   employee employee=null;
  while(rs.next()){
   employee=new employee();
   employee.setempno(rs.getint("empno"));
   employee.setename(rs.getstring("ename"));
   employee.setsal(rs.getdouble("sal"));
  employee.sethiredate(rs.getdate("hiredate"));
  employees.add(employee);
  }
 
 
  }catch(exception e ){
   e.printstacktrace();
  }finally{
   try {
  if(conn!=null){
  conn.close();
   } 
  }catch (sqlexception e) {
  // todo auto-generated catch block
  e.printstacktrace();
   }
  }
  return employees;
 }
  public static void addemployee(employee employee) {
   connection conn = null;
   statement stat = null;
   // 1.注册驱动程序
   try {
  class.forname("com.mysql.jdbc.driver");
 
  // 2.建立连接
  string url = "jdbc:mysql://localhost:3306/test2?useunicode=true&characterencoding=utf-8";
  string user = "root";
  string password = "root";
  conn = drivermanager.getconnection(url, user, password);
 
  // 3.创建执行语句,发送sql命令
  stat = conn.createstatement();
  simpledateformat sdf = new simpledateformat("yyyy-mm-dd");
  string sql = "insert into emp(empno,ename,sal,hiredate) values(" + employee.getempno() + ",'"
    + employee.getename() + "'," + employee.getsal() + ",'" + sdf.format(employee.gethiredate()) + "')";
 
  // 4.处理执行结果
  int i = stat.executeupdate(sql);
   } catch (exception e) {
  // todo auto-generated catch block
  e.printstacktrace();
   } finally {
  // 5.关闭资源
  try {
   if (conn != null) {
    conn.close();
   }
  } catch (sqlexception e) {
   // todo auto-generated catch block
   e.printstacktrace();
  }
   }
  }
  public static void updateemployee(employee employee) {
   connection conn = null;
   statement stat = null;
   // 1.注册驱动程序
   try {
  class.forname("com.mysql.jdbc.driver");
 
  // 2.建立连接
  string url = "jdbc:mysql://localhost:3306/test2?useunicode=true&characterencoding=utf-8";
  string user = "root";
  string password = "root";
  conn = drivermanager.getconnection(url, user, password);
 
  // 3.创建执行语句,发送sql命令
  stat = conn.createstatement();
  simpledateformat sdf = new simpledateformat("yyyy-mm-dd");
  string sql = "update emp set ename='"+employee.getename()+"empno"+employee.getempno()+"sal"+employee.getsal();
  // 4.处理执行结果
  int i = stat.executeupdate(sql);
   } catch (exception e) {
  // todo auto-generated catch block
  e.printstacktrace();
   } finally {
  // 5.关闭资源
  try {
   if (conn != null) {
    conn.close();
   }
  } catch (sqlexception e) {
   // todo auto-generated catch block
   e.printstacktrace();
  }
   }
  }
 
}
这里的代码很繁琐,但是没办法,为了更清新一点的去了解,这个过程是必须的,然后接下来就是进行简单的优化,虽然代码还是差不多,但是感觉上会更加简洁了 ,这里就要建立一个工具类了代码如下
package dbtest;
 
import java.sql.connection;
import java.sql.drivermanager;
import java.sql.sqlexception;
 
public class jdbcutil {
 static string url = "jdbc:mysql://localhost:3306/xxx?useunicode=true&characterencoding=utf-8";
 static string user = "root";
 static string password = "root";
 
 static{
  try {
   class.forname("com.mysql.jdbc.driver");
  } catch (classnotfoundexception e) {
   // todo auto-generated catch block
   e.printstacktrace();
  }
 }
 public static connection getconnection() throws sqlexception{
  string url = "jdbc:mysql://localhost:3306/test2?useunicode=true&characterencoding=utf-8";
  string user = "root";
  string password = "root";
  return drivermanager.getconnection(url, user, password);
 
 }
 public static void free(connection conn){
 
  try {
   if (conn != null) {
  conn.close();
   }
  } catch (sqlexception e) {
   // todo auto-generated catch block
   e.printstacktrace();
  }
 }
 }
在这里,把数据库连接和异常处理,等工作都及合成一个工具类,然后再主函数调用就可以了,这就是面向对象的一个体现,当然还是会分析下关于主类的代码,要不然就太过于空洞了,下面要分析的主类代码如下
package com.niit.jdbc;
 
import java.sql.connection;
import java.sql.drivermanager;
import java.sql.resultset;
import java.sql.sqlexception;
import java.sql.statement;
import java.text.parseexception;
import java.text.simpledateformat;
import java.util.arraylist;
import java.util.date;
import java.util.list;
 
public class employeedao1 {
 
 public static void main(string[] args) throws parseexception {
 
  list<employee> employees=getemployees();
  for(employee employee:employees){
   system.out.println(employee);
  }
 
  /*employee employee = new employee();
  employee.setempno(9999);
  employee.setename("tom");
  employee.setsal(6000);
 
  simpledateformat sdf=new simpledateformat("yyyy-mm-dd");
  employee.sethiredate(sdf.parse("2015-07-23"));
 
  //addemployee(employee);
  //updateemployee(employee);
  deleteemployee(9999);*/
 
 
 
 }
 
 public static list<employee> getemployees() {
  connection conn = null;
  statement stat = null;
  resultset rs = null;
  list<employee> employees = new arraylist<employee>();
  // 1.注册驱动程序
  try {
   //2.获取连接
   conn=jdbcutil.getconnection();
 
   // 3.创建执行语句,发送sql命令
   stat = conn.createstatement();
   string sql = "select * from emp";
 
   // 4.处理执行结果
   rs = stat.executequery(sql);
   employee employee = null;
   while (rs.next()) {
  employee = new employee();
  employee.setempno(rs.getint("empno"));
  employee.setename(rs.getstring("ename"));
  employee.setsal(rs.getdouble("sal"));
  employee.sethiredate(rs.getdate("hiredate"));
 
  employees.add(employee);
   }
 
  } catch (exception e) {
   // todo auto-generated catch block
   e.printstacktrace();
  } finally {
   // 5.关闭资源
   jdbcutil.free(conn);
  }
  return employees;
 }
 
 public static void addemployee(employee employee) {
  connection conn = null;
  statement stat = null;
  // 1.注册驱动程序
  try {
   //2.获取连接
   conn=jdbcutil.getconnection();
 
   // 3.创建执行语句,发送sql命令
   stat = conn.createstatement();
   simpledateformat sdf = new simpledateformat("yyyy-mm-dd");
   string sql = "insert into emp(empno,ename,sal,hiredate) values(" + employee.getempno() + ",'"
   + employee.getename() + "'," + employee.getsal() + ",'" + sdf.format(employee.gethiredate()) + "')";
 
   // 4.处理执行结果
   int i = stat.executeupdate(sql);
  } catch (exception e) {
   // todo auto-generated catch block
   e.printstacktrace();
  } finally {
   // 5.关闭资源
   jdbcutil.free(conn);
  }
 }
 
 public static void updateemployee(employee employee) {
  connection conn = null;
  statement stat = null;
  // 1.注册驱动程序
  try {
   //2.获取连接
   conn=jdbcutil.getconnection();
 
   // 3.创建执行语句,发送sql命令
   stat = conn.createstatement();
 
   simpledateformat sdf = new simpledateformat("yyyy-mm-dd");
   string sql = "update emp set ename='" + employee.getename() + "',sal=" + employee.getsal() + ",hiredate='"
   + sdf.format(employee.gethiredate()) + "' where empno=" + employee.getempno();
 
   // 4.处理执行结果
   int i = stat.executeupdate(sql);
  } catch (exception e) {
   // todo auto-generated catch block
   e.printstacktrace();
  } finally {
   // 5.关闭资源
   jdbcutil.free(conn);
  }
 }
 
 public static void deleteemployee(int empno) {
  connection conn = null;
  statement stat = null;
  // 1.注册驱动程序
  try {
   //2.获取连接
   conn=jdbcutil.getconnection();
 
   // 3.创建执行语句,发送sql命令
   stat = conn.createstatement();
   simpledateformat sdf = new simpledateformat("yyyy-mm-dd");
   string sql = "delete from emp where empno="+empno;
 
   // 4.处理执行结果
   int i = stat.executeupdate(sql);
  } catch (exception e) {
   // todo auto-generated catch block
   e.printstacktrace();
  } finally {
   // 5.关闭资源
   jdbcutil.free(conn);
  }
 }
 
}
这样看上去就比较清晰和明了,不用分割开来去看代码,只要调用到那个累才去照这个类的方法,这样就能够更加有利于检查和排错,维护的间接性的一个软件的奋斗的目标,虽然只是简单的优化,却能够减轻了我们写代码和维护的成本。
总结
通过本次编码,对面向对象的编程的开发有更加清晰的了解,当然对重构和优化的重要性有更深的了解,在这个软件里我学会的不仅是代码的书写,还学会了代码的重构不仅需要不断的提炼,还需要对代码的细微的观察。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持CodeAE代码之家
原文链接:https://blog.csdn.net/lxh5431/article/details/52443417

关注下面的标签,发现更多相似文章