properies配置文件
java的配置文件通常的扩展名为.properties的文件,文件以“键=值”的形式储存,为数据库添加的配置文件会被命名为datebase.properties。
创建步骤:
1.在src下新建一个File文件命名为datebase.properties
2.编辑文件(一般情况下除了数据库名外,其他东西都是固定的)。可以有多个url连不同的库,但url名要不同
driver=com.mysql.cj.jdbc.Driver
url=jdbc:mysql://localhost:3306/hospital?serverTimezone=GMT-8&useUnicode=true&characterEncoding=utf-8
username=root
password=123456
DAO 模式编程
采取面向接口编程,降低代码间的耦合性,提高代码的可扩展性,比如上面配置的properies,所有的实现类都要用它连接数据库,那我们不妨把他写到一个BaseDao类中,然后让实现类继承BaseDao。(一般会把数据库的驱动加载、连接、释放资源、增、删、改,提取出来放到BaseDao中)
代码如下
/**
* @Description TODO
* @Author 刘豪杰
* @Date 2021/11/29 15:18
**/
public class BaseDao {
private static String driver; //驱动路径(根据jar包,一般是固定的)
private static String url; //连接数据库
private static String user; //数据库用户名
private static String password; //数据库密码
Connection conn=null; //连接对象
static { //静态代码块 跟类一起加载
init();
}
/**
* 配置文件,读取文件流数据,为变量赋值
*/
public static void init(){
Properties params=new Properties();
String configFile="database.properties";//配置文件路径
//加载配置文件到文件流
InputStream is=BaseDao.class.getClassLoader().getResourceAsStream(configFile);
try {
//从输入流中读取属性列表
params.load(is);
} catch (IOException e) {
e.printStackTrace();
}
//根据指定的键获取对应的值
driver=params.getProperty("driver");
url=params.getProperty("urlz");
user=params.getProperty("user");
password=params.getProperty("password");
}
/**
* 建立数据库连接
* @return
*/
public Connection getConnection(){
try {
if (conn==null||conn.isClosed()){
try {
Class.forName(driver);//加载驱动操作
conn=DriverManager.getConnection(url,user,password);
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
}
} catch (SQLException e) {
e.printStackTrace();
}
return conn;
}
/**
* 释放资源
* @param conn
* @param stmt
* @param rs
*/
public void closeAll(Connection conn,Statement stmt, ResultSet rs){
//若结果不为空,则关闭
try {//连接对象
if (conn!=null){
conn.close();
}
} catch (SQLException e) {
e.printStackTrace();
}
try {//执行sql对象
if (stmt!=null){
stmt.close();
}
} catch (SQLException e) {
e.printStackTrace();
}
try {//读取器对象
if (rs!=null){
rs.close();
}
} catch (SQLException e) {
e.printStackTrace();
}
}
}
这里没有加增、删、改的方法,可以根据需要添加。
JDBC 操作数据库(DAO模式下)
1、增、删、改 除了SQL语句不通,其他所有地方都一样,所以这里就给大家展现一个增加商品的示例
public int addGoods(Goods goods) {
PreparedStatement pstm=null; //执行对象
int ret=0; //用于接收受影响的行
//2.连接数据库
getConnection(); //通过继承BaseDao,加载驱动
try {
//3.编写SQL语句 添加商品
pstm=conn.prepareStatement("INSERT INTO goods VALUES (null,?,?,?,NOW(),1,?,?);");//占位符从1开始,匹配相应的?号
pstm.setString(1,goods.getName());//通过传进来的goods对象,获取它从测试类所赋的值
pstm.setDouble(2,goods.getPrice());
pstm.setString(3,goods.getDescription());
pstm.setInt(4,goods.getTypeID());
pstm.setInt(5,goods.getOwnerID());
//4.执行
ret=pstm.executeUpdate();
} catch (SQLException e) {
e.printStackTrace();
} finally {
closeAll(conn,pstm,null);//通过继承BaseDao,释放资源
}
return ret;//返回受影响行数,给测试类判断是否成功
}
2、查(根据ID查询它的所有信息)
public Lsit<Goods> getAll(int id) {
PreparedStatement pstm=null;//执行对象
ResultSet rs=null; //读取器对象
List<Goods> list=new ArrayList<>();//返回多行多列,一般会用List集合进行传输数据,泛型他的对象。
//.2连接数据库
getConnection(); //通过继承BaseDao,加载驱动
try {
//3.编写SQL语句
pstm=conn.prepareStatement("SELECT * FROM goods WHERE ID=?");
pstm.setInt(1,id);//占位符从1开始,匹配相应的?号
//4.执行SQL
rs=pstm.executeQuery();
//5.判断
while (rs.next()){
int id=rs.getInt("id");
String name=rs.getString("name");
double price=rs.getDouble("price");
String addTime=rs.getString("addTime");
Goods goods =new Goods(id,name,price,null,addTime,0,0,0);//创建实体类对象
list.put(goods);//将赋值后对象添加进list
}
} catch (SQLException e) {
e.printStackTrace();
} finally {
closeAll(conn,pstm,rs);//通过继承BaseDao,释放资源
}
return list;//返回
}