欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 汽车 > 时评 > java JDBC

java JDBC

2024/11/30 12:27:46 来源:https://blog.csdn.net/2401_85217463/article/details/140867940  浏览:    关键词:java JDBC

一.jdbc的概述:

在开发过程中我们使用的shijava语言,那么肯定是要通过java语言操作数据库。

1.1jdbc的概念

JDBC是java来执行sql语句的AplJDBC是java访问数据库的标准规范,可以对多种关系类型的数据库进行统一的访问;它是有java语言编写的接口和类组成。

JDBC是接口,由数据库生产生产厂商提供的实现类被称为驱动。

1.2 JDBC的组成;

接口规范;一开始有很多的数据库他们是不统一的每个数据库都有自己的接口,这样子就显得很麻烦;最后sum公司出手了他制订了java程序连接各种数据库的统一接口规范。这样的话,不管是链接哪一种数据库,java代码都可以保持一致性。

实现规范:因为各个数据厂商的的软件各有不同,那么各自的内部如何通过sql实现增删改等操作管理数据库,只有这个数据库厂商自己更清楚,因此接口规范就交给数据库厂商自己实现。

厂商实现内容和过程封装成jar文件,我们程序员只需要将jar文件引入到项目中集成即可,就可以开发调用实现过程的操作数据库了。

二.JDBC快数入门;

准备一下自己的数据库

1.2官网下载数据库连接连接驱动jar包:MySQL :: Download MySQL Connector/J (Archived Versions)

穿件java项目,在项目下创建lib文件夹,将下载的驱动jar包复制到java项目下lib里面;

选中复制到lib文件夹里面的jar包,右键找到--->Add as Library,点击什么都不用管点OK就好,

与项目集成。

package JavaJdbc;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;
/*** /** * JDBC API中的核心类和接口* DriverManager(类): 用于注册驱动和获取连接* Connection(接口): 表示与数据库创建的连接* Statement(接口): 执行SQL语句的对象* ResultSet(接口): 结果集或一张虚拟表** *  以上接口由MySQL驱动程序jar包,提供实现类** * JDBC开发步骤 ,固定步骤 6个 (模版)* 1.注册驱动* 2.获得连接对象* 3.获得执行sql语句的对象* 4.执行SQL语句,获取结果集对象* 5.处理结果集 (打印控制台)* 6.释放资源**/public class JDBC3 {public static void main(String[] args)throws Exception {//注册驱动Class.forName("com.mysql.cj.jdbc.Driver");//2。获得连接对象String url = "jdbc:mysql://localhost:3306/day7-16";//连接数据库的地址:我的是连接day7-16String username="root";//填写数据库的用户名String password="G20030718";//数据库密码Connection conn = DriverManager.getConnection(url, username, password);//获取执行sql语句的对象Statement state = conn.createStatement();//修改数据String query ="update tab_User set nickname='蟹老板' where id='1';";//删除数据String ques = "delete from tab_User where id='4'";//添加数据String sql="insert into tab_User values (null,'zhaoliu','238761','张三')";//查看数据:String sql1 ="select * from tab_User where nickname='张三' and password = '123456'";//影响行数:注意:executeUpdate() 增删改 executeQuery() 查询int i = state.executeUpdate(ques);int i1 = state.executeUpdate(query);int i2 = state.executeUpdate(sql);ResultSet resul = state.executeQuery(sql1);// 处理结果集if(i>=1){System.out.println("修改成功");}else{System.out.println("修改失败");}if(i1>=1){System.out.println("删除成功");}else{System.out.println("删除失败");}if(i2>=1){System.out.println("添加成功");}else {System.out.println("添加失败");}if(resul.next()){System.out.println("查询成功");}else{System.out.println("查询失败");}
//释放资源:resul.close();state.close();conn.close();}
}

二.连接池

目的:就是为了建立数据库连接的消耗费的资源,和时间很多问题,提高性能,

Connection对象在JDBC使用的时候就会去创建一个对象,使用结束以后就会将这个对象给销毁了(close).每次创建和销毁对象都是耗时操作.需要使用连接池对其进行优化.连接池初始化的时候,初始化多个连接,将多个连接放入到池(集合)中.每次获取的时候,都可以直接从连接池中进行获取.使用结束以后,将连接归还到池中.

生活里面的连接池例子

老方式:下了地铁需要骑车, 跑去生产一个, 然后骑完之后,直接把车销毁了.连接池方式 摩拜单车:骑之前, 有一个公司生产了很多的自行车, 下了地铁需要骑车, 直接扫码使用就好了, 然后骑完之后, 还回去

连接池原理:

1.2 连接池原理 程序一开始就创建一定数量的连接,放在一个容器(集合)中,这个容器称为连接池。

使用的时候直接从连接池中取一个已经创建好的连接对象。

关闭的时候不是真正关闭连接,而是将连接对象再次放回到连接池中。

1.3 编写标准的数据源(规范)

Java为数据库连接池提供了公共的接口:javax.sql.DataSource,各个厂商需要让自己的连接池实现这个接口。这样应用程序可以方便的切换不同厂商的连接池!

常见的第三方连接池如下:C3P0,阿里巴巴-德鲁伊druid连接池

二.Druid 连接池

Druid是阿里巴巴开发的号称为监控而生的数据库连接池,Druid是国内目前最好的数据库连接池。在功能、性能、扩展性方面,都超过其他数据库连接池。Druid已经在阿里巴巴部署了超过600个应用,经过一年多生产环境大规模部署的严苛考验。如:一年一度的双十一活动,每年春运的抢火车票。

Druid的下载地址:https://github.com/alibaba/druid

1. 导入jar包 druid-1.1.12.jar

2. 定义配置文件

3. 加载配置文件

4. 获取数据库连接池对象

5. 获取连接

2.1 编写 druid.properties

 driverClassName=com.mysql.cj.jdbc.Driverurl=jdbc:mysql://localhost:3306/day_0801?useUnicode=true&characterEncoding=utf8

username=root

password=123456

# 初始化连接数量

initialSize=5

# 最大连接数

maxActive=10

# 最大等待时间

maxWait=3000

编写DbUtils工具类

public class DBUtils { private static DataSource ds=null;  static {   try {      //创建Properties对象   Properties prop=new Properties();    //创建输入流          InputStream in =    DBUtils.class.getClassLoader().getResourceAsStream("druid.properties");//加载输入流  prop.load(in);    //获取连接池对象   ds = DruidDataSourceFactory.createDataSource(prop);  } catch (Exception e) {  e.printStackTrace();  }  }   //获取连接池对象  public static DataSource getDataSource(){  return ds;   }   //获取连接对象 public static Connection getConnection(){  //改成从数据库连接池获取连接   try {        return ds.getConnection();  } catch (SQLException e) {  e.printStackTrace();   }        return null;  }   //释放资源的代码  public static void close(ResultSet rs, Statement stat, Connection conn) {   if (rs != null) {   try {      rs.close();   } catch (SQLException e) {   e.printStackTrace();    }   }       
if (stat != null) {  try {    stat.close();   } catch (SQLException e) {     e.printStackTrace();     }      }       if (conn != null) {   try {           conn.close();       } catch (SQLException e) {  e.printStackTrace();            } } }    
} 

测试类:

public class Demo02 { public static void main(String[] args) throws Exception { //获得连接  Connection conn = DBUtils.getConnection();  //获取执行SQL语句的预编译对象      String sql="select * from tab_user";     PreparedStatement pstat = conn.prepareStatement(sql);  //执行SQL语句,获取结果集对象    ResultSet rs = pstat.executeQuery();    //处理结果集     ArrayList<User> list=new ArrayList<>();  while(rs.next()){      int id = rs.getInt("id");        String username = rs.getString("username");    String password = rs.getString("password");String nickname = rs.getString("nickname");//System.out.println(id+"..."+username+"..."+password+"..."+nickname);  User user=new User(id,username,password,nickname);  list.add(user);  }     //System.out.println(list);   for (User user : list) {      System.out.println(user);   }     //释放资源    DBUtils.close(rs,pstat,conn);  }
}       

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com