一、数据库普通连接与连接池连接数据库的数据比较
需要的MySQL8驱动以及c3p0连接池,已经上传百度网盘需要的同学可以下载哦!
链接:pan.baidu.com/s/1OEGuZdhn… 提取码:kdd9
1.1 连接池
目的为了数据库的连接效率
这里使用的是:c3p0连接池
因为是javaweb项目,所以在导入jar的时候有些要求,具体看一下图片就清楚了
普通数据库连接:
package com.zking.study;
import java.sql.*;
public class DBUtil {
public static final String DRIVER="com.mysql.cj.jdbc.Driver";
public static final String URL="jdbc://mysql:///db0926";
public static final String USERNAME="root";
public static final String PASSWORD="lzq123";
Connection conn;
PreparedStatement ps;
ResultSet rs;
public Connection getConn() {
try {
Class.forName(DRIVER);
conn = DriverManager.getConnection(URL,USERNAME,PASSWORD);
} catch (Exception e) {
e.printStackTrace();
}
return conn;
}
public void close() {
try {
if(conn!=null) conn.close();
if(ps!=null) ps.close();
if(rs!=null) rs.close();
} catch (SQLException throwables) {
throwables.printStackTrace();
}
}
public boolean executeUpdate(String sql, Object... obj) {
getConn();
int count = 0;
try {
ps = conn.prepareStatement(sql);
for (int i = 0; i < obj.length; i++) {
ps.setObject((i + 1), obj[i]);
}
count = ps.executeUpdate();
} catch (SQLException throwables) {
throwables.printStackTrace();
} finally {
close();
}
return count > 0;
}
public ResultSet executQuery(String sql, Object... obj) {
getConn();
try {
ps = conn.prepareStatement(sql);
for (int i = 0; i < obj.length; i++) {
ps.setObject((i + 1), obj[i]);
}
rs = ps.executeQuery();
} catch (SQLException throwables) {
throwables.printStackTrace();
}
return rs;
}
}
连接池C3p0 连接:
package com.zking.study;
import com.mchange.v2.c3p0.ComboPooledDataSource;
import java.sql.*;
public class DBUtilC3p0 {
public static final ComboPooledDataSource cpds;
static {
cpds = new ComboPooledDataSource();
}
Connection conn;
PreparedStatement ps;
ResultSet rs;
public Connection getConn() {
try {
cpds.getConnection();
} catch (Exception e) {
e.printStackTrace();
}
return conn;
}
public void close() {
try {
if(conn!=null) conn.close();
if(ps!=null) ps.close();
if(rs!=null) rs.close();
} catch (SQLException throwables) {
throwables.printStackTrace();
}
}
public boolean executeUpdate(String sql, Object... obj) {
getConn();
int count = 0;
try {
ps = conn.prepareStatement(sql);
for (int i = 0; i < obj.length; i++) {
ps.setObject((i + 1), obj[i]);
}
count = ps.executeUpdate();
} catch (SQLException throwables) {
throwables.printStackTrace();
} finally {
close();
}
return count > 0;
}
public ResultSet executQuery(String sql, Object... obj) {
getConn();
try {
ps = conn.prepareStatement(sql);
for (int i = 0; i < obj.length; i++) {
ps.setObject((i + 1), obj[i]);
}
rs = ps.executeQuery();
} catch (SQLException throwables) {
throwables.printStackTrace();
}
return rs;
}
}
测试类:
package com.zking.study;
import com.zking.dao.DBUtil;
import java.sql.Connection;
public class Test {
public static void main(String[] args) {
DBUtil dbUtil = new DBUtil();
DBUtilC3p0 dbUtilC3p0 = new DBUtilC3p0();
// 获取系统当前时间
long begin = System.currentTimeMillis();
for (int i = 0; i < 1000; i++) {
Connection conn = dbUtilC3p0.getConn();
System.out.println("这是第" + i + "连接" + conn);
dbUtilC3p0.close();
}
long end = System.currentTimeMillis();
System.out.println("耗时" + (end - begin));
}
}
运行结果:
使用 c3p0连接池:
** 普通连接结果 **
二、MySQL5和8的一些区别
- mysql5 和MySQL8 在配置数据库连接地址的时候
5版本: jdbc:mysql://localhost:3306/数据库?cahracterEncoding=utf8;
8版本: jdbc:mysql://localhost:3306/数据库?serverTimezone=UTC;
- varchar 的区别
- 5版本: varchar(10) 存储10个英文或者5个中文
- 8版本:varchar(10) 存储10个英文或者10个中文
三、通过反射获取类中的 方法和属性
知识点: 反射获取class 的三种方法
- 类名.Class
- Class.forName("类的限定名")
- 对象.getClass()
案例: 通过反射获取String中的方法和属性
代码:
package com.zking.study;
import java.lang.reflect.Field;
import java.lang.reflect.Method;
public class FanShe {
public static void main(String[] args) {
// 反射获取属性
System.out.println("String属性如下: ");
Class<String> stringAttribute = String.class;
Field[] fields = stringAttribute.getDeclaredFields();
for (Field field: fields) {
System.out.println(field.getName());
}
System.out.println("=============================================\nString属性如下: ");
// 通过反射获取String中的方法
Method[] methods = stringAttribute.getDeclaredMethods();
for (Method method: methods) {
System.out.println(method.getName());
}
}
}
结果: