前言
java连接数据库的优化
一、创建db.properties
首先在src文件夹右击(注意:一定要在src文件夹内,不要建在其他文件夹内),选择新建,然后选择资源包,
然后资源包基名称命名为db即可,由于我已经创建过,所谓会出现红字,显示db.properties的文件已存在
如果分别单独创建增删改查时,每次都会用到的重复的代码。
这里面是连接数据库,用户名和密码
这是我的用户名和密码,有的人的密码可能会是123456,看每个人的不同
jdbc.driver=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/movie-manager?useUnicode=true&characterEncoding=utf8
jdbc.username=root
jdbc.password=root
二、创建BaseDao.java
1.引入库及初始化相关数据
首先声明配置文件读取器,在声明db.properties里面的四个数据信息
/*声明配置文件读取器*/
private ResourceBundle rb;
/*声明数据库驱动*/
private String driver;
/*声明连接地址*/
private String url;
/*声明用户名*/
private String username;
/*声明密码*/
private String password;
``
/*声明数据库链接类*/
private Connection conn;
/*声明数据库执行类*/
private PreparedStatement statement;
/*声明数据结果集合*/
private ResultSet rs;
/********************************/
public BaseDao(){
/*加载配置文件*/
rb=ResourceBundle.getBundle("db");
/*获取配置文件中的值*/
driver=rb.getString("jdbc.driver");
url=rb.getString("jdbc.url");
username=rb.getString("jdbc.username");
password=rb.getString("jdbc.password");
}
/*打开并获取链接*/
private void openConn(){
try {
Class.forName(driver);
conn=DriverManager.getConnection(url,username,password);
} catch (ClassNotFoundException | SQLException e) {
e.printStackTrace();
}
}
2.通用增删改查
private void formatterStatement(String sql,Object ...objs){
try {
/*打开连接*/
openConn();
/*获取执行器*/
statement=conn.prepareStatement(sql);
/*遍历占位符数组*/
for(int i=0;i< objs.length;i++){
/*进行占位符赋值*/
statement.setObject(i+1,objs[i]);
}
} catch (SQLException e) {
e.printStackTrace();
}
}
```
## 通用增删改查
```java
/**
* 通用增删改查
* @param sql 执行的sql语句
* @param objs 占位符数组
* @return 受影响行数
*/
protected int baseUpdate(String sql,Object ...objs){
try {
formatterStatement(sql,objs);
/*返回执行结果*/
return statement.executeUpdate();
} catch (SQLException e) {
e.printStackTrace();
}finally {
closeAll();
}
/*try中如果没有返回,则表示执行失败,必定返回0*/
return 0;
}
通用单条
/**
* 通用查询单条
* @param tClass 泛型的类对象
* @param sql 执行的sql
* @param objs 占位符数组
* @return 结果实体类
*
*/
public T baseQueryEntity(Class<T> tClass,String sql,Object ...objs){
/*查询结果获取集合*/
List<T> list=baseQuery(tClass,sql,objs);
/*判断结果集是否合法*/
if(list.size()>1){
/*主动抛出异常,用来终止代码的执行*/
throw new RuntimeException("查询结果为"+list.size()+"条,不符合规定!");
}
/*无结果则直接返回null*/
if(list.size()==0){
return null;
}
/*有结果则返回数据*/
return list.get(0);
}
关闭所有流
/*关闭所有流*/
private void closeAll(){
if(rs!=null){
try {
rs.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
if(statement!=null){
try {
statement.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
if(conn!=null){
try {
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}