一、连接数据库
1.安装驱动包
这部分参考文章:初识JDBC——JDBC介绍、安装以及简单运用
2.设置配置文件
在前一篇文章中,我们将数据库地址、账户、密码等信息是直接写入程序中,是固定死的。当我们需要修改这些参数是,需要重新编译;因此,我们可以将这些参数写入配置文件中去。
首先,我们在项目中创建一个资源文件夹,并将其资源根,接着在其中创建配置文件database.properties。
然后,我们在database.properties输入我们需要的参数。参数如下(注意,参数中不能出现空格):
mysqldriver=com.mysql.cj.jdbc.Driver
mysqlurl=jdbc:mysql://主机IP:3306/数据库名
mysqluser=账户
mysqlpwd=密码
二、创建操作类
在文章《初识JDBC——JDBC介绍、安装以及简单运用》中,我们是将操作数据的代码一股脑写在主函数中,这样导致代码重复度很高。因此,我们要用操作类来封装这些代码,或者说将增删查改的功能封装进类文件中。
1.创建基础操作类
(1)创建一个BaseDao类
在软件包下,创建软件包dao,用于存放操作类文件。接着创建BaseDao类,来实现最基本的操作数据库的功能。
然后设置BaseDao类属性,用于对应配置文件中的配置参数,接着写一个静态方法来读取配置文件中保存的参数信息。
public class BaseDao {
private static String driver;//驱动参数
private static String url;//数据库服务器地址参数
private static String user;//账户
private static String pwd;//密码
static {
//读取配置文件信息
Properties properties = new Properties();
InputStream inputStream =
BaseDao.class.getClassLoader().getResourceAsStream("database.properties");
try{
properties.load(inputStream);
} catch (IOException e) {
e.printStackTrace();
}
//将读取到的参数设置赋值给BaseDao类的属性
driver=properties.getProperty("mysqldriver");
url=properties.getProperty("mysqlurl");
user=properties.getProperty("mysqluser");
pwd=properties.getProperty("mysqlpwd");
}
}
(2)编写BaseDao中的方法
到这里,我们完成连接数据库的准备工作,接下来我们要实现第一步和第二步——获取驱动和用DriverManager获取Connection连接。
public Connection getConnect(){
Connection connection=null;
try{
Class.forName(driver);
connection = DriverManager.getConnection(url,user,pwd);
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (SQLException e) {
e.printStackTrace();
}
return connection;
}
过多的连接容易导致数据库崩溃,所以我们提前实现第五步——释放资源。
public void close(Connection connection, PreparedStatement prst){
try {
if (null!=connection){
connection.close();
}
if (null!=prst){
prst.close();
}
} catch (SQLException e) {
e.printStackTrace();
}
}
接下来,我们就来实现操作数据库。
//操作数据库
// 将新增,修改,删除统一抽象到一个方法中去
//sqltr为输入的sql语句
// @param params ...用法:表示n个参数n∈[0,∞]
public int executeUpdate(String sqlStr,Object... params){
Connection connection = this.getConnection();
PreparedStatement preparedStatement = null;
int num = -1;
try{
//执行sql语句
preparedStatement = connection.prepareStatement(sqlStr);
//判断属性是否为空
if (null!=params){
for (int i=0;i<params.length;i++){
//设置属性
preparedStatement.setObject(i+1,params[i]);
}
}
num = preparedStatement.executeUpdate();
} catch (SQLException e) {
e.printStackTrace();
}
return num;
}
2.创建表操作类
(1)创建表接口
我们先创建一个接口来实现操作数据库的方法,这里的接口单独针对一个类。本文继续以dog表为例。
/*
对数据库中Dog表的操作定义,比如新增宠物,根据ID删除宠物,根据健康值删除宠物
*/
public interface DogDao {
Integer saveDog(Dog dog);//增
Integer updateDog(Dog dog);//改
Integer delById(Integer id);//根据id删
Integer delByHealth(Integer health);//根据健康值删
}
(2)创建表操作类
接下来,我们创建对表进行操作的类,注意,这里要继承基础操作类。
public class DogBaoImpl extends BaseDao implements DogDao{
//增加宠物
@Override
public Integer saveDog(Dog dog) {
String sql =
"insert into dog(name,health,love,strain,lytm) value(?,?,?,?,now())";
int num =
super.executeUpdate(sql,dog.getName(),dog.getHealth(),dog.getLove(),dog.getStrain());
return num;
if (num>0){
System.out.println("增加成功");
}
return num;
}
//修改宠物信息
@Override
public Integer updateDog(Dog dog) {
String sql = "update dog set name=? where id=?";
int num = super.executeUpdate(sql, dog.getName(), dog.getId());
if (num>0){
System.out.println("修改成功");
}
return num;
}
//根据id删除宠物
@Override
public Integer delById(Integer id) {
String sql = "delete from dog where id=?";
int num = super.executeUpdate(sql,id);
if (num>0){
System.out.println("删除成功");
}
return num;
}
//根据健康值删除
@Override
public Integer delByHealth(Integer health) {
String sql = "delete from dog where health=?";
int num = super.executeUpdate(sql,health);
if (num>0){
System.out.println("宠物已删除");
}else {
System.out.println("宠物都活着");
}
return num;
}
}
三、在测试类中调用方法
这里用测试类进行举例:
@Test
public void testDogDaoInserter(){
//创建操作类的对象
DogDao dogDao = new DogBaoImpl();
//创建dog对象
Dog dog = new Dog("芬达", 100, 88, "中华田园犬");
//调用操作类的方法添加信息
dogDao.saveDog(dog);
}