JDBC数据库连接

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;//返回
    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值