# jdbc:
导包:mysql-connector-java-5.1.37-bin.jar
jdbc链接数据库分为六步:
1、用反射注册驱动:Class.forName("com.mysql.jdbc.Driver");
2、获得连接:Connection con = DriverManager.getConnection(url,username,password);
其中:String url = "jdbc:mysql://localhost:3306/数据库名";
String username = "root";String password = "密码";
3、获得SQL语句的执行平台:PreparedStatement pst = con.PrepareStatement(sql);
其中:String sql = "要执行的SQL语句";
4、获得执行结果:ResultSet rs = pst.executeQuery();
其中:executeQuery()方法用于执行DML操作,executeUpdate()方法用于执行DQL操作
5、处理结果
6、释放资源
#DBCP
阿帕奇公司提供的连接池 导包 commons-dbcp-1.4.jar 但是该包里面的类依赖 commons-pool-1.5.6.jar 所以导两个包
同时需要导jdbc的驱动包
数据库连接池一般只需配置好,不用创建连接,然后将一个没有连接的数据源传给一个处理结果的类
例如:dbutils里面的QueryRunner qr = new QueryRunner(dataSource);
JdbcTemplate jt = new JdbcTemplate(dataSource);
配置连接池对象:
private static BasicDataSource dataSource = new BasicDataSource();
static
{
dataSource.setDriverClassName("com.mysql.jdbc.Driver");
dataSource.setUrl("jdbc:mysql://localhost:3306/zero");
dataSource.setUsername("root");
dataSource.setPassword("123456");
dataSource.setInitialSize(10); //初始化连接数
dataSource.setMaxActive(8); //最大连接数
dataSource.setMaxIdle(5); //最大空闲数
dataSource.setMinIdle(1); //最小空闲数
}
public static DataSource getDataSource()
{
return dataSource;
}
#C3P0
数据库连接池:导包:c3p0-0.9.5.2.jar,该包依赖 mchange-commons-java-0.2.12.jar ,也需要驱动包,配置文件用xml
xml文件:
获取数据库源:private static DataSource dataSource = new ComboPooledDataSource();
#druid
阿里巴巴开发的数据库连接池,效率很高 导包:druid-1.0.9.jar 同时需要驱动包。使用properties配置文件,配置文件中的健名固定
driverClassName=com.mysql.jdbc.Driver
url=jdbc:mysql://127.0.0.1:3306/zero
username=root
password=123456
initialSize=5
maxActive=10
maxWait=3000
获得数据源:
InputStream is = DruidDemo01.class.getClassLoader().getResourceAsStream("druid.properties");
Properties pro = new Properties();
pro.load(is);
DataSource dataSource = DruidDataSourceFactory.createDataSource(pro);
#DBUtils
阿帕奇公司提供工具类,主要学习两个类(接口) 导包 commons-dbutils-1.6.jar
1、Class QueryRunner
构造方法:QueryRunner()
update(con, sql, parms);DML操作,传入一个连接,sql语句和一个可变参数。可变参数是给?占位符赋值,最后需要关闭连接
query(con, sql, new ArrayListHandler()); DQL操作,需要传递一个结果集处理对象,一共有8中结果集的处理方式
QueryRunner(DataSource ds)
有参构造,传入一个连接池的数据源 ,调用与无参构造的方法重载的DML,DQL方法,不需要传连接的参数,也不需要关闭
2、Interface ResultSetHandler
八种结果集处理方式:
public class DBUtilsSelectTest
{
private static Connection con = JDBCUtilsConfig.getConnection();
public static void main(String[] args)throws Exception
{
// arrayHandler();
// arrayListHandler();
// beanHandler();
// beanListHandler();
// columnListHandler();
// scalarHandler();
// mapHandler();
mapListHandler();
}
//只将结果集的第一条记录存储到Object[]中
public static void arrayHandler()throws Exception
{
QueryRunner qr = new QueryRunner();
String sql = "SELECT * FROM sort";
Object[] query = qr.query(con, sql, new ArrayHandler());
System.out.println(Arrays.toString(query));
DbUtils.closeQuietly(con);
}
//只将结果集的记录存储到Object[]中,然后存放在list集合中
public static void arrayListHandler()throws Exception
{
QueryRunner qr = new QueryRunner();
String sql = "SELECT * FROM sort";
List
//将结果集的第一条记录封装到JavaBean对象中
public static void beanHandler()throws Exception
{
QueryRunner qr = new QueryRunner();
String sql = "SELECT * FROM sort";
Sort sort = qr.query(con, sql, new BeanHandler
System.out.println(sort);
DbUtils.closeQuietly(con);
}
//将结果集的记录封装到JavaBean对象中,然后存放在List中
public static void beanListHandler()throws Exception
{
QueryRunner qr = new QueryRunner();
String sql = "SELECT * FROM sort";
List
for (Sort sort : list)
{
System.out.println(sort);
}
DbUtils.closeQuietly(con);
}
//将结果集中指定列的字段值封装到List集合中
public static void columnListHandler()throws Exception
{
QueryRunner qr = new QueryRunner();
String sql = "SELECT * FROM sort";
List
//用于单数据的操作
public static void scalarHandler()throws Exception
{
QueryRunner qr = new QueryRunner();
String sql = "SELECT COUNT(*) FROM sort";
Long count = qr.query(con, sql, new ScalarHandler
System.out.println(count);
DbUtils.closeQuietly(con);
}
//将结果集的第一行存放在map集合中,其中key为列名,value为对应的值
public static void mapHandler()throws Exception
{
QueryRunner qr = new QueryRunner();
String sql = "SELECT * FROM sort";
Map
for (String s : map.keySet())
{
Object value = map.get(s);
System.out.println(s+" --> "+value);
}
DbUtils.closeQuietly(con);
}
//将结果集封装到map中,其中key为列名,value为对应的值,然后将所有的键值对封装到一个List中
public static void mapListHandler()throws Exception
{
QueryRunner qr = new QueryRunner();
String sql = "SELECT * FROM sort";
List
}
}
#JdbcTemplate
与dbutils类似,用于处理结果集
Class JdbcTemplate
构造方法:JdbcTemplate()
JdbcTemplate(DataSource dataSource)
常用方法:
update():执行DML语句。增、删、改语句
queryForMap():查询结果将结果集封装为map集合,将列名作为key,将值作为value 将这条记录封装为一个map集合
注意:这个方法查询的结果集长度只能是1
queryForList():查询结果将结果集封装为list集合
注意:将每一条记录封装为一个Map集合,再将Map集合装载到List集合中
query():查询结果,将结果封装为JavaBean对象
query的参数:RowMapper
一般我们使用BeanPropertyRowMapper实现类。可以完成数据到JavaBean的自动封装
new BeanPropertyRowMapper<类型>(类型.class)
queryForObject:查询结果,将结果封装为对象
一般用于聚合函数的查询