您好,欢迎访问代理记账网站
移动应用 微信公众号 联系我们

咨询热线 -

电话 15988168939

联系客服
  • 价格透明
  • 信息保密
  • 进度掌控
  • 售后无忧

Java 进阶学习笔记 —— JDBC

JDBC

Java Database Connectivity Java语言操作数据库

快速入门步骤

  1. 导入驱动jar包 mysql-connector-java-5.1.37-bin.jar
    1.1复制mysql-connector-java-5.1.37-bin.jar到项目的libs目录下
    1.2Add as Library
  2. 注册驱动
  3. 获取数据库研究对象 Connection
  4. 定义sql
  5. 获取执行sql语句的对象 Statement
  6. 执行sql,接受返回结果
  7. 处理结果
  8. 释放资源
public static void main(String[] args) throws Exception {
	//1. 导入驱动jar包
	//2. 注册驱动
	Class.forName("com.mysql.jdbc.Driver");
	//3. 获取数据库连接对象
	Connection conn = DriverManager.
	getConnection("jdbc:mysql://localhost:3306/db3", "root", "root");
	//4. 定义sql语句
	String sql = "UPDATE account SET balance = 500 WHERE id = 1";
	//5. 获取执行sql语句的对象 Statement
	Statement stmt = conn.createStament();
	//6. 执行sql
	int count = stmt.executeUpdate(sql);
	//7. 处理结果
	System.out.println(count);
	//8. 释放资源
	stmt.close();
	conn.close();
}

详解各个对象

  1. DriverManager: 驱动管理对象
    功能:
    1.1 注册驱动:告诉程序该使用哪一个数据库驱动jar
    static void registerDriver(Driver driver): 注册与给定的驱动程序DriverManager;
    写代码使用:Class.forName(“com.mysql.jdbc.Driver”);
    其实就是静态代码块的简写:
    static {
    	try {
    		java.sql.DriverManager.registerDriver(new Driver());
    	} catch(SQLException E) {
    		throw new RuntimeException("Can't register driver!");
    	}
    }
    
    注意:mySQL5之后的驱动jar包可以省略注册驱动的步骤;
    1.2 获取数据库连接
    方法:
    static Connection getConnection(String url, String user, String password)
    参数:
    url(指定连接的路径); ->jdbc:mysql//ip地址(域名):端口号/数据库名称
    user(用户名); password(密码);
  2. Connection:数据库连接对象
    2.1获取执行sql的对象
    Statement createStatement();
    PreparedStatement preparedStatement(String sql);
    2.2事务管理
    开始事务:setAutoCommit(boolean autoCommit) 参数为false开始事务
    提交事务:commit()
    回滚事务:rollback()
  3. Statement:执行sql的对象
    3.1执行sql
    boolean execute(String sql); 可以执行任意sql语句
    int executeUpdate(String sql); 执行DML(insert, update, delete)语句和DDL(create, alter, drop)语句,返回值即影响的行数
    ResultSet executeQuery(String sql); 执行DQL(select)语句
  4. ResultSet: 执行结果集的对象
    next(); 游标向下移动一行,判断是否是末尾行,是则返回false,无数据;
    getXxx(参数); 获取数据;Xxx代表数据类型, int getInt(), String getString();
    参数:int代表列的编号,String代表列的名称;
    注意:正确步骤: 游标向下移动一行->判断是否有数据->获取数据;
  5. PreparedStatement: 执行sql的对象
    5.1 sql的注入问题:拼接sql时,一些sql的特殊关键字会造成安全问题;
    如select * from table where username = ‘a’ or ‘a’ = ‘a’,or导致判断错误;
    解决:使用PreparedStatement对象来解决
    预编译的sql: 参数使用?作为占位符
    步骤:
    5.1.1 导入驱动jar包
    5.1.2. 注册驱动
    5.1.3. 获取数据库研究对象 Connection
    5.1.4. 定义sql,sql的参数使用?作为占位符,如select * from users where username = ?
    5.1.5. 获取执行sql语句的对象 Statement, PreparedStament Connection.preparedStatement(String sql)
    5.1.6. 给?赋值,方法setXxx(参数1, 参数2)
    参数1:?在sql语句中几个?的位置编号,从1开始;参数2:?的值

    5.1.7. 执行sql,接受返回结果,不需要传递sql语句
    5.1.8. 处理结果
    5.1.9. 释放资源
    注意:后期都会使用PreparedStatement来完成增删改查的操作,因为既可以防止sql注入,效率也更高;

JDBC控制事务

事务:一个包含多个步骤的业务操作,如果这个业务操作被事务管理,那么这多个步骤要么同时成功,要么同时失败;
使用Connection对象来管理事务:
开始事务:setAutoCommit(boolean autoCommit) 参数为false开始事务,在执行sql之前开启事务;
提交事务:commit(),当所有sql都执行完提交事务;
回滚事务:rollback(),在catch中回滚事务;

数据库连接池

数据库连接池:存放数据库连接的容器;
当系统初始化好后,容器被创建,容器中会申请一些连接对象,当用户访问数据库时,从容器中获取连接对象,用户访问完后,会将连接对象归还给容器,好处是节约资源,访问高效;
javax.sql.DataSource接口,获取连接的方法:getConnection();
归还连接:Connection.close();不会关闭连接而是归还连接;
一般不去实现它,有数据库厂商来实现:

  1. C3P0:数据库连接池技术;
  2. Druid:数据库连接池实现技术,由阿里巴巴提供的;

C3P0数据库连接池技术

步骤:

  1. 导入jar包(两个): c3p0-0.9.5.2.jar mchange-common-java-0.2.12.jar,同时,不要忘记导入数据库驱动jar包;
  2. 定义配置文件:名称为c3p0.properties或c3p0-config.xml
    路径:直接将文件放在src目录下即可;
  3. 获取核心对象:数据库连接池对象ComboPooledDataSource;
  4. 获取连接getConnection;
public static void main(String[] args) throws SQLException {
	//1.创建数据库连接池对象
	DataSource ds = new ComboPooledDataSource();
	//2.获取连接对象
	Connection conn = ds.getConnection();
	//3.打印
	System.out.println(conn);
}

Druid数据库连接池技术

步骤:

  1. 导入jar包: druid-1.0.9.jar;
  2. 定义配置文件:是properties形式的,可以是任意形式放在任意目录下;
  3. 加载配置文件Properties;
  4. 获取数据库连接池对象:DruidDataSourceFactory;
  5. 获取连接getConnection;
public static void main(String[] args) throws Exception {
	//1. 导入jar包
	//2. 定义配置文件
    //3. 加载配置文件
    Properties pro = new Properties();
    //此处的DruidDemo是该java文件的名字,druid.properties是配置文件名
    InputStream is = DruidDemo.class.
    getClassLoader().getResourceAsStream(druid.properties);
    pro.load(is);
    //4. 获取连接池对象
    DataSource ds = DruidDataSourceFactory.creatDataSource(pro);
    //5. 获取连接
    Connection conn = ds.getConnection();
    System.out.println(conn);
}

JDBC Template

Spring JDBC: Spring框架对JDBC的简单封装,提供了一个JDBCTemplate对象简化JDBC的开发;
步骤:

  1. 导入jar包;
  2. 创建JdbcTemplate对象,依赖于数据源DataSource;
    JdbcTemplate template = new JdbcTemplate(ds);
  3. 调用JdbcTemplate的方法来完成CRUD的操作;
    update():执行DML语句,增删改语句;
    queryForMap();查询结果将结果集封装为map集合,这个方法的结果集长度只能是1,将列名作为key,值作为value;
    queryForList();查询结果将结果集封装为list集合,将每一条记录封装为一个map集合,再将map集合装载到list集合;
    query(); 查询结果将结果集封装为JavaBean对象;
    query的参数RowMapper,一般用BeanPropertyRowMapper,可以完成数据到JavaBean的自动封装:new BeanPropertyRowMapper<类型>(类型.class);
    queryForObject();查询结果将结果集封装为对象,一般用于聚合函数的查询;
public static void main(String[] args) throws Exception {
	//1. 导入jar包
	//2. 创建JDBCTemplate对象
	JdbcTemplate template = new JdbcTemplate(JDBCUtils.getDataSource());
	//3. 调用方法
	String sql = "update account set balance = 5000 where id = ?";
	int count = template.update(sql, 3); //3是?的值
}

分享:

低价透明

统一报价,无隐形消费

金牌服务

一对一专属顾问7*24小时金牌服务

信息保密

个人信息安全有保障

售后无忧

服务出问题客服经理全程跟进