Java se:JDBC

JDBC

  • Java DataBase Connectivity Java 数据库连接, Java语言操作数据库
  • 本质是官方定义的一套操作关系型数据库的规则(接口),各个数据库厂商提供驱动jar包(真正执行的代码)来实现接口
  • 步骤:
    • 1.导入驱动jar包,xxx.jar放入项目libs目录下,右键Add as Library
    • 2.注册驱动
    • 3.获取数据库链接对象Connection
    • 4.定义sql语句
    • 5.获取执行sql语句的对象Statement
    • 6.执行sql,并处理结果
    • 7.释放资源
  • 代码实现:
	//2.注册驱动
	Class.forName("com.mysql.jdbc.Driver");
	//3.获取数据库链接对象Connection
	Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/db1", "root", "root");
	//4.定义sql语句
	String sql = "update student set score = 100 where id = 1";
	//5.获取执行sql语句的对象Statement
	Statement stmt = conn.createStatement();
	//6.执行sql,并处理结果
	int count = stmt.executeUpdate(sql);
	System.out.println(count);
	//7.释放资源
	stmt.close();
	conn.close();
  • 对象:
    • DriverManager:驱动管理对象
      • 注册驱动:告诉程序使用的数据库驱动jar
        • static void registerDriver(Driver driver) :注册与给定的驱动程序 DriverManager(在com.mysql.jdbc.Driver中存在静态代码块调用了该方法)
        • 写代码使用: Class.forName(“com.mysql.jdbc.Driver”);
        • 注意:mysql5之后驱动jar包可以省略注册驱动的步骤
      • 获取数据库链接:
        • static Connection getConnection(String url, String user, String password)
        • url:指定链接路径,语法:jdbc:mysql://ip地址(域名):端口号/数据库名称(如果链接本机服务器,并且mysql服务器默认端口为3306,则可以简写为:jdbc:mysql:///数据库名称
        • user:用户名
        • password:密码
    • Connection:数据库链接对象
      • 获取执行sql的对象:
        • Statement createStatement()
        • PreparedStatement prepareStatement(String sql)
      • 管理事务:
        • 开启事务:setAutoCommit(boolean autoCommit):false为开启事务
          • 在执行sql之前开启事务
        • 提交事务:commit()
          • 当所有的sql执行完提交事务
        • 回滚事务:rollback()
          • 在catch中回滚事务
    • Statement:执行sql的对象
      • 执行sql
        • boolean execute(String sql):可以执行任意的sql
        • int executeUpdate(String sql):执行DML(insert,update,delete)语句,DDL(create,alter,drop)语句
          • 返回值:影响的行数,可以判断DML是否执行成功,返回值>0则执行成功,反之,则失败。
        • ResultSet executeQuery(String sql):执行DQL(select)语句
    • ResultSet:结果集对象,封装查询结果
      • boolean next():游标向下移动一行,判断当前行是否为最后一行末尾,是返回false,否则返回true
      • getXxx(参数):获取数据
        • 参数:
          • 可以是int(列标号),如:getString(1);
          • 可以是String(列名称),如:getDouble(“score”);
    • PreparedStatement:执行sql的对象
      • 解决SQL注入问题(拼接SQL时特殊关键字参与字符串拼接造成的安全性问题),效率更高
      • 更改后的步骤:
        • 预编译的sql:参数使用?来作为占位符
          • 如:String sql = “update student set score = 100 where id = ?”
        • 获取执行sql语句的对象 PreparedStatement Connection.prepareStatement(String sql)
        • 给?赋值:方法: setXxx(参数1,参数2)
          • 参数1:?的位置,从1开始
          • 参数2:?的值
        • 执行sql,接受返回结果,不需要传递sql语句

数据库连接池

  • 一个存放数据库链接的容器,类似于线程池
    • 当系统被初始化之后,容器被创建,容器中会申请一些链接对象,当用户来访问数据库时,从容器中获取链接对象,用户访问完之后,返回连接对象给容器
    • 节约资源,用户访问高效
  • 实现:
    • 接口:DataSource javax.sql包下的
    • 方法:
      • 获取链接:getConnection()
      • 归还链接:Connection.close()
    • 实现:一般由数据库厂商来实现
      • C3P0:数据库连接池技术
        • 导入C3P0jar包和数据库驱动jar包
        • 定义配置文件(放在src目录下):c3p0.properties或者c3p0-config.xml
        • 创建核心对象:数据库连接池对象 ComboPooledDataSource
        • 获取连接:getConnection
//使用步骤
//创建数据库链接池对象
DataSource ds = new ComboPooledDataSource();
//获取连接
Connection conn = ds.getConnection
  • Druid:数据库连接池技术,阿里巴巴提供
    • 导入Druid jar包和数据库驱动jar包
    • 定义配置文件:.properties文件,可以取任意名称,放在任意目录下
    • 加载配置文件
    • 获取数据库连接池对象:通过工厂 DuridDataSourceFactory
    • 获取链接:getConnection
//使用步骤
//加载配置文件
Properties pro = new Properties();
InputStream is = DruidDemo.class.getClassLoader().getResourceAsStream("druid.properties");
pro.load(is);
//获取连接池对象
DataSource ds = DruidDataSourceFactory.createDataSource(pro);
//获取连接
Connection conn = ds.getConnection();

Spring JDBC

  • Spring框架对JDBC的简单封装,提供一个JDBCTemplate对象简化JDBC的开发
  • 步骤:
    • 导入jar包:
    • 创建JdbcTemplate对象。依赖于数据源DataSource
      • JdbcTemplate template = new JdbcTemplate(ds);
    • 调用JdbcTemplate的方法来完成CRUD操作
      • update():执行DML语句,增删改语句
      • queryForMap():将查询结果封装为map集合,列名为key,值为value
        • 该方法查询的结果集长度只能为1
      • queryForList():将查询结果封装为List集合
        • 每一条查询记录封装为Map集合,再将Map集合封装为List集合
      • query():查询结果,将结果封装为JavaBean对象
        • 一般我们使用BeanPropertyRowMapper实现类。可以完成数据到JavaBean的自动封装
        • new BeanPropertyRowMapper<类型>(类型.class)
      • queryForObject():查询结果,将结果封装为对象
        • 一般用于聚合函数的查询
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值