JDBC整理

常用

一、Connection:Connection是一个接口类,其功能是与数据库进行连接。绑定数据库url,用户名,密码;

Connection connection = DriverManager.getConnection(url, userName, password);

二、Statement:Statement接口是JDBC中的一个重要接口,它用于执行SQL语句并与数据库进行交互

	Statement statement = connection.createStatement();

三、ResultSet:ResultSet是Java JDBC中的一个接口,用于表示查询数据库的结果集。它是一个数据表,包含了满足SQL查询条件的数据行,

ResultSet resultset = statement.executeQuery(sql);

注:游标初始位置在第一行之前,索引值为-1,没调用一次next方法则判断一次是否有下一行数据,如果有则返回true,且游标下移一行,否则返回faluse; 列的索引值从1开始。resultset.next():下移游标,之后才能查询到数据


四、DriverManager:注册驱动,获取数据库连接

Class.forName("com.mysql.jdbc.Driver");

Connection connection = DriverManager.getConnection(url, userName, password);

五、ResultSetMetaData它提供了关于结果集的元数据信息,例如列数、列名、列类型等,有结果集调用,输出数据库内信息

	ResultSet resultset = statement.executeQuery(sql);
	ResultSetMetaData metaData = resultset.getMetaData();
	int columnCount = metaData.getColumnCount();

上文为输出要查询的列数,有那几列

六、连接池:本质属于创建一个集合,存放多个链接

LinkedList<Connection> coonPool = new LinkedList<>();

可将连接池封住出去,也就是链接池工具的思路

七、Properties:该类主要用于读取Java的配置文件,JDBC中多用于读取常用数据,例如用户名,密码等。

Properties properties = new Properties();
		
//		properties.load(new FileInputStream("E:\\workspace\\05_javaSE_JDBC_01\\config\\jdbcConfig.properties"));
		properties.load(TestJDBCConfig.class.getClassLoader().getResourceAsStream("jdbcConfig.properties"));

其配置文件常为.properties文件

八、JDBC事务:当在一个事务中执行多个操作时,要么所有的事务都被提交(commit),那么这些修改就永久地保存下来;要么数据库管理系统将放弃所作的所有修改,整个事务**回滚(rollback)**到最初状态。

String sql = "update hero set h_name='女警'where h_id=7";
			String sql2 = "update hero set h_name='妖姬'where h_id=8";
			int num = statement.executeUpdate(sql);
			int num2 = statement.executeUpdate(sql2);
			if (num==1 && num2 == 1) {
				connection.commit();
			}else {
				throw new Exception("执行异常,不能执行");
			}

以上例子为同时修改两行数据库内容,要么同时成功,要么无法执行

九、事务的ACID属性:

原子性,一致性,隔离性,持久性

connection.setAutoCommit(true);

负责管理操作的自动提交

十、预处理对象:

PreparedStatement:因为有预先编译的功能,提高 SQL 的执行效率。 可以有效的防止 SQL 注入的问题,安全性更高

例如在sql语句中加入sql语句,使数据库崩溃,数据丢失:

String h_name = "abc ";
		String h_id = "' or '1=1";
		
		String sql = "select * from hero where h_name=?and h_id=?" ;
		ResultSet resultSet = statement.executeQuery(sql);

 引入后:

PreparedStatement ps = connection.prepareStatement(sql);
		ps.setString(1, h_name);
		ps.setObject(2, h_id);

		ResultSet resultSet = ps.executeQuery();

对应位置替换数据由PreparedStatement交换,判断,也可封装方法,为后面常用工具的思路

十一、C3P0:C3P0 是一个开源的 JDBC 数据库连接池库

配置文件:

<?xml version="1.0" encoding="UTF-8"?>
<c3p0-config>
    <!--使用默认的配置读取数据库连接池对象 -->
    <default-config>
        <!--  连接参数 -->
        <property name="driverClass">com.mysql.cj.jdbc.Driver</property>
        <property name="jdbcUrl">jdbc:mysql://localhost:3306/ji?useSSL=false&amp;serverTimezone=UTC</property>
        <property name="user">root</property>
        <property name="password">123456</property>
 
        <!-- 连接池参数 -->
        <!--初始化申请的连接数量-->
        <property name="initialPoolSize">10</property>
        <!--最大的连接数量-->
        <property name="maxPoolSize">15</property>
        <!--超时时间-->
        <property name="checkoutTimeout">3000</property>
    </default-config>
 
</c3p0-config>

搭建环境:

machange-commons-java包中有c3p0所需方法,高版本多用两个;

创建方法:

DataSource dataSource = new ComboPooledDataSource(true);

括号中true或false为是否自动提交及connection.setAutoCommit(true)

十二、DbUtils

搭建环境:外部jar包,需要导入

常用方法:

public static void main(String[] args) throws Exception {
		QueryRunner queryrunner = new QueryRunner();
		
		Class.forName("com.mysql.cj.jdbc.Driver");
		/*/用元的第二步
		 * 创建链接对象
		 * //&useUnicode=true&charac//
		*/

		String url = "jdbc:mysql://localhost:3306/ji?useSSL=false";
		String userName = "root";
		String password = "123456";
		Connection connection = DriverManager.getConnection(url, userName, password);
		String sql = "select * from hero where h_hp > ?";
		double h_hp = 300;
		List<HeroMode1> heroMode1s = queryrunner.query(connection,sql, new BeanListHandler<HeroMode1>(HeroMode1.class),h_hp);
		System.out.println(heroMode1s);
	}

QueryRunner :它显著的简化了SQL查询,并与ResultSetHandler协同工作将使编码量大为减少

注意:QueryRunner(true)中true不为能否自动提交,从源码中我们可知,true为是否获取sql语句置换的信息,若想使用手动提交

connection.setAutoCommit(true);

手动传入Connection对象,使用以上语句。

ResultSetHandler:执行处理一个结果集对象,将数据转变并处理为任何一种形式

ArrayHandler:把结果集中的第一行数据转成对象数组。
ArrayListHandler:把结果集中的每一行数据都转成一个对象数组,再存放到List中。
BeanHandler:将结果集中的第一行数据封装到一个对应的JavaBean实例中。
BeanListHandler:将结果集中的每一行数据都封装到一个对应的JavaBean实例中,存放到List里,可使用自己实例。
MapHandler:将结果集中的第一行数据封装到一个Map里,key是列名,value就是对应的值。
MapListHandler:将结果集中的每一行数据都封装到一个Map里,然后再存放到List
ColumnListHandler:将结果集中某一列的数据存放到List中。
KeyedHandler(name):将结果集中的每一行数据都封装到一个Map里(List<Map>),再把这些map再存到一个map里,其key为指定的列。
ScalarHandler:将结果集第一行的某一列放到某个对象中。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值