在上次的基础上,做了点优化,代码如下
import cn.edu.mju.project1.persiste.impl.MySqlDbUtil;
import org.junit.Test;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
public class TestDbUtil {
@Test
public void testConnection(){
try {
MySqlDbUtil.getConnection();//调用连接
} catch (Exception e) {
e.printStackTrace();
}
}
// @Test
public void testInsert(){//对一组数据的插入
try {
Connection conn = MySqlDbUtil.getConnection();//保存连接
String sql = "INSERT INTO band(name,remark) VALUES(?,?)";//添加参数值,“?“为占位符(设置String类型的sql)
PreparedStatement pstmt = conn.prepareStatement(sql);//对sql语句进行预处理,还以参数方式提交,安全系数较高(把sql变量导入数据库)
pstmt.setString(1,"软工1班"); //填写值(第一个占位符引号内跟上具体值)
pstmt.setString(2,"备注信息");//填写第二个占位符的内容
//boolean result = pstmt.execute();//声明布尔值存储具体结果正确与否
int result = pstmt.executeUpdate();//定义一个整型存储结果的值
if (result > 0){
System.out.println("添加成功");//如果结果为正确,输出“添加成功”
}else {
System.out.println("添加失败");//结果为错误时,输出“添加失败”
}
pstmt.close();//关掉pstmt释放资源
conn.close();//关闭连接释放资源(仅是关闭连接池)
} catch (Exception e) {
e.printStackTrace();
}
}
// @Test
public void testUpdate(){//对一组数据的修改
try {
Connection conn = MySqlDbUtil.getConnection();//保存连接
String sql = "UPDATE band SET name=?,remark=? WHERE id=? ";//修改参数值,“?“为占位符(设置String类型的sql)
PreparedStatement pstmt = conn.prepareStatement(sql);//对sql语句进行预处理,还以参数方式提交,安全系数较高(把sql变量导入数据库)
pstmt.setString(1,"软工2班"); //填写值(第一个占位符引号内跟上具体值)
pstmt.setString(2,"备注信息2");//填写第二个占位符的内容
pstmt.setInt(3,4);//修改id为4的那行数据
//boolean result = pstmt.execute();//声明布尔值存储具体结果正确与否
int result = pstmt.executeUpdate();//定义一个整型存储结果的值
if (result > 0){
System.out.println("修改成功");//如果结果为正确,输出“修改成功”
}else {
System.out.println("修改失败");//结果为错误时,输出“修改失败”
}
pstmt.close();//关掉pstmt释放资源
conn.close();//关闭连接释放资源(仅是关闭连接池)
} catch (Exception e) {
e.printStackTrace();
}
}
// @Test
public void testDelete(){//对一组数据的删除
try {
Connection conn = MySqlDbUtil.getConnection();//保存连接
String sql = "DELETE FROM band WHERE id=?";//添加参数值,“?“为占位符(设置String类型的sql)
PreparedStatement pstmt = conn.prepareStatement(sql);//对sql语句进行预处理,还以参数方式提交,安全系数较高(把sql变量导入数据库)
pstmt.setInt(1,5);//删除id为5的那行数据
//boolean result = pstmt.execute();//声明布尔值存储具体结果正确与否
int result = pstmt.executeUpdate();//定义一个整型存储结果的值
if (result > 0){
System.out.println("删除成功");//如果结果为正确,输出“删除成功”
}else {
System.out.println("删除失败");//结果为错误时,输出“删除失败”
}
pstmt.close();//关掉pstmt释放资源
conn.close();//关闭连接释放资源(仅是关闭连接池)
} catch (Exception e) {
e.printStackTrace();
}
}
// @Test
public void testFindAll(){//对所有数据的查询
try {
Connection conn = MySqlDbUtil.getConnection();//保存连接
String sql = "SELECT * FROM band";//查询所有数据
PreparedStatement pstmt = conn.prepareStatement(sql);//对sql语句进行预处理,还以参数方式提交,安全系数较高(把sql变量导入数据库)
//boolean result = pstmt.execute();//声明布尔值存储具体结果正确与否
ResultSet rs = pstmt.executeQuery();//定义一个ResultSet的结果集
while (rs.next()){//判断有下一条数据时
int id = rs.getInt("id");//获取id
String name = rs.getString("name");//获取name
String remark = rs.getString("remark");//获取remark
System.out.println(id + "," + name + "," + remark);//输出id,name,remark
}
rs.close();//关闭rs
pstmt.close();//关掉pstmt释放资源
conn.close();//关闭名称为conn的连接释放资源(仅是关闭连接池)
} catch (Exception e) {
e.printStackTrace();
}
}
// @Test
public void testFindById(){//对一组指定id的查询
try {
Connection conn = MySqlDbUtil.getConnection();//保存连接
String sql = "SELECT * FROM band WHERE id=?";//查询指定id的一组数据
PreparedStatement pstmt = conn.prepareStatement(sql);//对sql语句进行预处理,还以参数方式提交,安全系数较高(把sql变量导入数据库)
pstmt.setInt(1,4);//查询id为4的那组数据
ResultSet rs = pstmt.executeQuery();//定义一个ResultSet的结果集
if (rs.next()){//判断有下一条数据时
int id = rs.getInt("id");//获取id
String name = rs.getString("name");//获取name
String remark = rs.getString("remark");//获取remark
System.out.println(id + "," + name + "," + remark);//输出id,name,remark
}
rs.close();//关闭rs
pstmt.close();//关掉pstmt释放资源
conn.close();//关闭名称为conn的连接释放资源(仅是关闭连接池)
} catch (Exception e) {
e.printStackTrace();
}
}
@Test
public void testFindByName(){//对一组指定name的查询
try {
Connection conn = MySqlDbUtil.getConnection();//保存连接
String sql = "SELECT * FROM band WHERE name LIKE ?";//查询name型为?的所有组的数据
PreparedStatement pstmt = conn.prepareStatement(sql);//对sql语句进行预处理,还以参数方式提交,安全系数较高(把sql变量导入数据库)
pstmt.setString(1,"%1%");//查询name含有“1”的所有组的数据
ResultSet rs = pstmt.executeQuery();//定义一个ResultSet的结果集
while (rs.next()){//判断有下一条数据时
int id = rs.getInt("id");//获取id
String name = rs.getString("name");//获取name
String remark = rs.getString("remark");//获取remark
System.out.println(id + "," + name + "," + remark);//输出id,name,remark
}
rs.close();//关闭rs
pstmt.close();//关掉pstmt释放资源
conn.close();//关闭名称为conn的连接释放资源(仅是关闭连接池)
} catch (Exception e) {
e.printStackTrace();
}
}
}
package cn.edu.mju.project1.persiste.impl;
import com.alibaba.druid.pool.DruidDataSource;
import java.sql.Connection;
public class MySqlDbUtil {
private static DruidDataSource dataSource = null;//创建数据源参数并在第一次启动后永久保存
private static void initDataSource() throws Exception{//调用德鲁伊的数据源参数,若为空值则创建一个
if(dataSource == null){
dataSource = new DruidDataSource();
dataSource.setUrl("jdbc:mysql://localhost:3306/band1?serverTimezone=UTC&useUnicode=true&characterEncoding=UTF-8");//连接数据库的路径和时区
dataSource.setUsername("root");//输入自己的数据库用户名
dataSource.setPassword("123456");//输入数据库用户名的密码
dataSource.setDriverClassName("com.mysql.cj.jdbc.Driver");//输入Driver的路径,注意:路径大小写敏感!
//上面代码即可完成连接,但要提高配置的性能,还可加入以下代码
dataSource.setInitialSize(2);//设置初始化参数为2个连接数
dataSource.setMinIdle(2);//设置最小连接数为2
dataSource.setMaxActive(10);//设置最大连接数为10
dataSource.setMaxWait(20000);//设置最大等待相应时间(单位毫秒)此时为20秒(连接不上需要等待的时间)
dataSource.setTimeBetweenEvictionRunsMillis(20000);//设置检查无响应的时间长度,若无响应则断开,此时为20秒
dataSource.setValidationQuery("SELECT 'x'");//时不时返回引号内的内容以提醒用户连接未断开,仍有效
dataSource.setTestWhileIdle(true);//判断用户空闲时,再发送上条判断连接是否正常的提示
dataSource.setTestOnBorrow(true);//空余时再去处理
}
}
public static Connection getConnection() throws Exception{
initDataSource();//执行此方法以便在不是为空的条件下返回连接参数
return dataSource.getConnection();
}
}