JDBC - 2 - 学习记录

JBDC day02 note

回顾:
JDBC - 连接数据库的规范
		使用到的类
			Connection
			Statement
			ResultSet

连接数据库的步骤
	1.导入数据驱动的jar包
	2.加载驱动类
		Class.forName("oracle.jdbc.dirver.OracleDriver")
								"com.mysql.jdbc.Dirver"
	3.创建Connection 连接
		DriverManager.getConnection(url,user, password )
		url:jdbc.mysql://ip:port/datebase
			jdbc:oracle:thin:@ip:port:sid
	4.获得Statement 对象
		conn.createStatement();
		stmt.excute();  				-- DML DDL DQL
		stmt.executeUpdate();		-- DML
		stmt.executeQuery();		-- DQL
								- ResultSet
	5.处理结果集
		rs.next() - 询问并获得下一个
		rs.getInt/Double/String/Date(columName/index)
	6.关闭资源

解决数据库中硬编码 - driver url user password
	使用Properties配置文件 -> Hashtable / Hashmap 
		new Properties(); -> 读取 xx.properties 配置文件
		XML - 解析 - 读内容 - 使用Dom4j
		
批量执行SQL语句
	批量导入数据 - excel - 读取excel表
	stmt.addBatch(); 		 // 批量添加
	stmt.clearBatch();		 // 清空Batch 
	stmt.executeBatch();	 // 提交Batch
	
分页查询 - select * from user 分页;
	oracle: rownum 5~10
		select * from
			(select rownum n, * from user) u
		where u.n between 5 and 10;
	mysql: 
		select * from user limit startRow, pageSize;
		select * from user limit 30, 50;
			将前80条全部查询,取最后50条
			弊端:数据量越大,页数越大,效率越低

SQL注入:通过字符串拼接,拼接成一个恒成立的条件,改变了原来的语义
	解决SQL注入:使用预编译PrepareedStatement
			半成品SQL,先执行预编译,确定了语义,传参作为一个整体

JDBC 连接池
DBCP
C#P0

DataSource:连接池、数据源
连接池:减少频繁与数据库建立连接和关闭
	  连接的集合 -> 创建连接池时初始化若干个连接对象
		getConnection() -> 返回给一个连接
		close()	-> 返回给连接池
 DBCP:apache -> 开源 
	  dbcp/pool
	  BasicDataSource
 C3P0
 	  ComboPooledDataSource

DBCP 连接池 Demo 代码

import java.io.FileInputStream;
import java.sql.Connection;
import java.util.Properties;

import javax.sql.DataSource;

import org.apache.commons.dbcp.BasicDataSourceFactory;

public class DateSourceDemo01 {
	public static void main(String[] args) throws Exception {
		
		
		// 2.配置文件中的属性名,按规定填写
		Properties pros = new Properties();
		pros.load(new FileInputStream(
				DateSourceDemo01.class.getResource("dbcpconfig.properties").getFile()));
		
		// 1.使用工厂方法创建数据源,必须提供配置文件
		DataSource dateSource = BasicDataSourceFactory.createDataSource(pros);
		Connection conn = dateSource.getConnection();
		
		System.out.println(conn);
		conn.close(); // null -> 连接对象回到了连接池中
		System.out.println(conn);
		
	}
}

C3P0 连接池 Demo 代码

package day02;

import java.sql.Connection;

import com.mchange.v2.c3p0.ComboPooledDataSource;

public class DateSourceDemo02 {
	public static void main(String[] args) throws Exception {
		// c3p0 连接池 -> 默认使用无参构造器
		// 				 使用有参构造器时,传入xml配置文件的其他内容
		ComboPooledDataSource db = new ComboPooledDataSource();
//		ComboPooledDataSource db1 = new ComboPooledDataSource("oracle");
		// 建立连接
		Connection conn = db.getConnection();
//		Connection conn1 = db1.getConnection();
		System.out.println(conn);	
//		System.out.println(conn1);
		
		/*
		 *  八月 01, 2019 4:24:42 下午 com.mchange.v2.log.MLog 
			信息: MLog clients using java 1.4+ standard logging.
			八月 01, 2019 4:24:43 下午 com.mchange.v2.c3p0.C3P0Registry 
			信息: Initializing c3p0-0.9.5.2 [built 08-December-2015 22:06:04 -0800; debug? true; trace: 10]
			八月 01, 2019 4:24:43 下午 com.mchange.v2.c3p0.impl.AbstractPoolBackedDataSource 
			信息: Initializing c3p0 pool... com.mchange.v2.c3p0.ComboPooledDataSource [ acquireIncrement -> 3, acquireRetryAttempts -> 30, acquireRetryDelay -> 1000, autoCommitOnClose -> false, automaticTestTable -> null, breakAfterAcquireFailure -> false, checkoutTimeout -> 0, connectionCustomizerClassName -> null, connectionTesterClassName -> com.mchange.v2.c3p0.impl.DefaultConnectionTester, contextClassLoaderSource -> caller, dataSourceName -> 1hgeby9a4l5y9tp1q8z20d|1698c449, debugUnreturnedConnectionStackTraces -> false, description -> null, driverClass -> com.mysql.jdbc.Driver, extensions -> {}, factoryClassLocation -> null, forceIgnoreUnresolvedTransactions -> false, forceSynchronousCheckins -> false, forceUseNamedDriverClass -> false, identityToken -> 1hgeby9a4l5y9tp1q8z20d|1698c449, idleConnectionTestPeriod -> 0, initialPoolSize -> 5, jdbcUrl -> jdbc:mysql:///test, maxAdministrativeTaskTime -> 0, maxConnectionAge -> 0, maxIdleTime -> 0, maxIdleTimeExcessConnections -> 0, maxPoolSize -> 20, maxStatements -> 0, maxStatementsPerConnection -> 0, minPoolSize -> 3, numHelperThreads -> 3, preferredTestQuery -> null, privilegeSpawnedThreads -> false, properties -> {user=******, password=******}, propertyCycle -> 0, statementCacheNumDeferredCloseThreads -> 0, testConnectionOnCheckin -> false, testConnectionOnCheckout -> false, unreturnedConnectionTimeout -> 0, userOverrides -> {}, usesTraditionalReflectiveProxies -> false ]
			com.mchange.v2.c3p0.impl.NewProxyConnection@6956de9 [wrapping: com.mysql.jdbc.JDBC4Connection@769c9116]
			
			控制台输出红字代表信息,日后常见,不是异常,不必惊慌
		 */
	}
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值