Hibernate 菜鸟教程程序员Java学习笔记

使用工具类DbUtils连接数据库,并简单操作数据库

2017-02-19  本文已影响751人  lkee6760

一、文章结构

工具类完整源码

SQL语句编写及操作

标识符的一般命名规范

二、工具类DbUtils

编写工具类的准备工作

  1. 安装mysql数据库,并制作表格;


    数据表
  2. 在工程目录下新建lib文件夹,导入mysql-connector-java-5.1.37-bin.jar包,右键文件选择Build Path-->add Build Path...


    图片.png
  3. 编写配置文件,放入src目录下
driver=com.mysql.jdbc.Driver
url=jdbc:mysql://localhost:3306/database
username=root
password=123
工程目录
package cn.edu.nefu.jdbc.dbutils;

import java.io.IOException;
import java.io.InputStream;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.Properties;

public class DbUtils {
    private static Connection con;
    private static String driver;
    private static String url;
    private static String username;
    private static String password;
    
    static{
        try {
            readinfo();                 //读取配置文件
            Class.forName(driver);      //反射的方式注册驱动
            con = DriverManager.getConnection(url, username, password);         //获取数据库连接
        } catch (Exception e) {
            e.printStackTrace();
            throw new RuntimeException("数据库连接失败");          //如果数据库连接异常直接终止程序
        }
    }
    
    //获取连接方法
    public static Connection getConnection() {
        return con;
    }
    
    //释放资源
    public static void close(ResultSet rs, Statement ps, Connection con) {
        try {
            if(rs != null) {
                rs.close();
                rs = null;
            }
        } catch (SQLException e) {
            e.printStackTrace();
        }finally{
            try {
                if(ps != null){
                    ps.close();
                    ps = null;
                }
            } catch (SQLException e) {
                e.printStackTrace();
            }finally{
                try {
                    if(con != null) {
                        con.close();
                        con = null;
                    }
                } catch (SQLException e) {
                    e.printStackTrace();
                }
            }
        }
    }
    
    //没有结果集释放资源
    public static void close(Statement ps, Connection con) {
        try {
            if(ps != null){
                ps.close();
                ps = null;
            }
        } catch (SQLException e) {
            e.printStackTrace();
        }finally{
            try {
                if(con != null) {
                    con.close();
                    con = null;
                }
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
    }


    //读取配置文件
    private static void readinfo() throws IOException {
        //获取输入流 配置文件dbutils.properties放在工程src文件夹下
        InputStream is = DbUtils.class.getClassLoader().getResourceAsStream("dbutils.properties");
        //建立属性集合
        Properties pro = new Properties();
        //读取属性列表
        pro.load(is);
        //读取键所对应的值,并赋值
        driver = pro.getProperty("driver");
        url = pro.getProperty("url");
        username = pro.getProperty("username");
        password = pro.getProperty("password");
        //关闭流
        is.close();
    }
}

三、测试

package cn.edu.nefu.jdbc.dbtest;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import cn.edu.nefu.jdbc.dbutils.DbUtils;
public class DBTest {
    public static void main(String[] args) throws SQLException{
        //测试
        Connection con = DbUtils.getConnection();
        //sql语句不区分大小写,但是关键字建议使用大写,便于区分
        String sql = "SELECT * FROM students WHERE sid = ?";
        //为了防止注入攻击,这里使用预处理集方式
        PreparedStatement ps = con.prepareStatement(sql);
        ps.setString(1, "002");
        ResultSet rs = ps.executeQuery();
        while(rs.next()) {
            System.out.println(rs.getString("sid") + "   " + rs.getString("sname") + "   " + rs.getString("phoneNum"));
        }
        DbUtils.close(rs, ps, con);
    }
}

四、几点注意事项

  1. 自定义包的命名规范(参考《The Java Language Specification》)
  1. 自定义类、接口、枚举、注释的命名规范
  1. 自定义方法和变量的命名规范
  1. 类型参数

如果长期养成的习惯用法与此不同,请不要盲目遵从这些命名惯例。

上一篇 下一篇

猜你喜欢

热点阅读