使用jdbc连接数据库(单例模式)

配置连接数据库文件

在根目录下新建resources文件,并点亮如图在这里插入图片描述
导入jar包,其中mysql-connector-java-5.1.0-bin.jar为jdbc连接数据库的必要包
!
在导入jar包时,problem会显示有问题,进去如图点击即可,最后记得点击ok应用生效
在这里插入图片描述
在resources文件夹内新建db.properties配置数据库属性文件,文件内容

driver=com.mysql.jdbc.Driver //启动驱动
url=jdbc:mysql://192.168.56.29:3306/qMall //连接的数据库地址
user=kb07  //数据库登陆用户名
pwd=ok   //数据库登陆用户密码

在src目录下新建class文件使用单例模式读取数据库属性文件

public class Prop {
    //使用单例模式保证该对象 由始至终只有一个
    private static Properties p;

    private Prop() {//工具类不需要构建对象
    }
    static {
        p=new Properties();
        try {
        InputStream is=Prop.class.getClassLoader().getResourceAsStream("db.properties");
            p.load(is);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    public static final String DRIVER=p.getProperty("driver");
    public static final String URL=p.getProperty("url");
    public static final String USER=p.getProperty("user");
    public static final String PWD=p.getProperty("pwd");

}

接下来把加载驱动,连接数据库,负责将执行的sql语句提交到数据库,执行sql查询语句返回的结果集,关闭资源五个模块提取方法,以方便使用

public class BaseDao {
    private  Connection conn;
    private  PreparedStatement pst;
    public  ResultSet rs;

    public void getConn() throws ClassNotFoundException, SQLException {
        Class.forName(Prop.DRIVER);  //启动执行驱动
        conn= DriverManager.getConnection(Prop.URL,Prop.USER,Prop.PWD);
        System.out.println("连接完成");
        //获取连接
    }
    public void query(String sql,Object...params) throws SQLException {
        pst=conn.prepareStatement(sql);
        for (int i = 1; i <=params.length ; i++) {
            pst.setObject(i,params[i-1]);
        }
        rs=pst.executeQuery();
        System.out.println("查询完成");
    }
    public int update(String sql,Object...params) throws SQLException {
        pst=conn.prepareStatement(sql);
        for (int i = 1; i <=params.length ; i++) {
            pst.setObject(i,params[i-1]);
        }
        return pst.executeUpdate();
    }
    public void close() throws SQLException {
         //关闭资源
        if(rs!=null){
            rs.close();
        }
        if(pst!=null){
            pst.close();
        }
        if(conn!=null){
            conn.close();
        }
        System.out.println("关闭完成");
    }
}

使用PreparedStatement的好处:
简化Statement中的操作
提高执行语句的性能
提高安全性,防止sql注入
可读性和可维护性更好
方法executeQuery和executeUpdate的简单介绍
1、方法executeQuery 用于产生单个结果集的语句,例如 SELECT 语句。
2、方法executeUpdate 用于执行 INSERT、UPDATE 或 DELETE 语句以及 SQL DDL(数据定义语言)语句,INSERT、UPDATE 或 DELETE 语句的效果是修改表中零行或多行中的一列或多列。executeUpdate 的返回值是一个整数,指示受影响的行数(即更新计数)。对于 CREATE TABLE 或 DROP TABLE 等不操作行的语句,executeUpdate 的返回值总为零。

事例测试

执行前数据库数据(数据纯瞎编),这里测试更改第一条的loginStatus
在这里插入图片描述
继承调用上面提取的方法,编写sql语句

public class UserDaoImpl extends BaseDao{
    //通过反射获取logger对象,用来打印测试,引入log4j的jar包才能使用,导入时选择org.apache.log4j.Logger
    Logger logger=Logger.getLogger(UserDaoImpl.class);
   public boolean changeType(int id,int i) {
        int num=0;
        try {
            getConn();
            String sql="update tb_user set loginStatus=? where uid=?";
            Object[] o={i,id};
            num=update(sql,o);
            logger.info("执行 update成功");
            logger.info(num>0?true:false);
            logger.debug("测试");
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        } catch (SQLException e) {
            e.printStackTrace();
        }finally {
            try {
                close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
        return  num>0?true:false;
    }
     //测试
    public static void main(String[] args) {
        UserDaoImpl userDao=new UserDaoImpl();
        userDao.changeType(1, 1);
    }
}

执行后控制台输出页面
在这里插入图片描述
数据库变化,显示更改成功
在这里插入图片描述

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值