一、JDBC是什么?
JDBC:Java Database Connectivity(Java数据库连接池)。指定了统一的访问各种关系型数据库的标准接口-----桥梁作用。
功能:【与数据库建立连接】【向数据库发送SQL请求】【处理从数据库返回的结果】
步骤如下:A. 加载并注册数据库驱动----【数据库不同驱动链接不同】
Class.forName("com.mysql.cj.jdbc.Driver");
Connection conn=DriverManager.getConnection(String url,String username,String password);
stat=conn.createStatement();
int num1=sta.executeUpdate(sql); 或者 res = stat.executeQuery(sql);
stat.close();//这里并非最好的关闭方式 res.close(); conn.close();
关闭流的顺序---推荐反着来----先关ResultSet---Statement----Connection---推荐显式关闭---并关闭前判断是否为空
原因是:关闭Conneciton,且Statement若不手动关闭,将由GC机制自动关闭,且再关闭前Statement对象和ResultSet对象将被占用。
若在自动关闭前-----数据库连接池的连接数量达到最大允许值--此时将会抛异常。
二、如何更好的优化JDBC?
dpcpconfig.properties #连接设置 driverClassName=com.mysql.cj.jdbc.Driver url=jdbc:mysql://localhost:3306/demo?useUnicode=true&characterEncoding=utf-8&useSSL=false&serverTimezone=GMT%2B8 username=root password=123456 #初始化连接 initialSize=5 #最大连接数量 maxAcitve=10 #最大空闲连接 maxIdle=10通过配置文件读取数据源得到连接public static DataSource ds=null;
static {
Properties prop=new Properties();//新建配置文件对象
InputStream in = new Dbcp2().getClass(). //通过类加载器找到文件路劲,读配置文件
getClassLoader().getResourceAsStream("dbcpconfig.properties");
prop.load(in);//以输入流的形式加载到配置对象中
ds=BasicDataSourceFactory.createDataSource(prop);}//创建数据源
<c3p0-config> <default-config> <property name="driverClass">com.mysql.cj.jdbc.Driver</property> <property name="jdbcUrl"> jdbc:mysql://localhost:3306/demo?useUnicode=true& characterEncoding=UTF-8& useSSL=false& serverTimezone=GMT%2B8 </property> <property name="user">root</property> <property name="password">123456</property> <property name="checkoutTimeout">3000</property> <property name="initialPoolSize">10</property> <property name="maxIdleTime">30</property> <property name="maxPoolSize">100</property> <property name="minPoolSize">10</property> <property name="maxStatements">200</property> </default-config> <named-config name="itcast"> <property name="driverClass">com.mysql.cj.jdbc.Driver</property> <property name="jdbcUrl"> jdbc:mysql://localhost:3306/demo?useUnicode=true& characterEncoding=UTF-8& useSSL=false& serverTimezone=GMT%2B8 </property> <property name="user">root</property> <property name="password">123456</property> <property name="initialPoolSize">10</property> <property name="maxPoolSize">200</property> </named-config> </c3p0-config>通过配置数据源得到数据库连接连接池连接public static DataSource ds = null;static { ComboPooledDataSource cpds=new ComboPooledDataSource("itcast");
ds=cpds;
}
QueryRunner qr=new QueryRunner(DButils.getDataSource());//得到数据源(得到连接)并创建执行器对象List list=(List)qr.query(sql, new BeanListHandler<User>(User.class));