美文网首页Hibernate 菜鸟教程程序员Java学习笔记
使用工具类DbUtils连接数据库,并简单操作数据库

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

作者: lkee6760 | 来源:发表于2017-02-19 21:19 被阅读751次

    一、文章结构

    工具类完整源码

    SQL语句编写及操作

    标识符的一般命名规范

    二、工具类DbUtils

    编写工具类的准备工作

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


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


      图片.png
    3. 编写配置文件,放入src目录下
    • 不同的数据库有不同的驱动类及url,命名规范也不相同,需要根据数据库JDBC操作帮助文档编写字符串
    • 配置文件必须是'键=值'对形式,不能有空格和标点符号,严格区分大小写
    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》)
    • 名称都应该以自己的单位或者组织的Internet域名开头,并且定顶级域名放在前面;
    • 用户自定义包的名称决不能以java和javax开头;
    • 包名称的其余部分应该包括一个或者多个描述该包的组成部分,并且简短,单个层级名称通常不超过8个字符;
    • 鼓励使用有意义的缩写形式,例如utils就是utilities的缩写。
    1. 自定义类、接口、枚举、注释的命名规范
    • 每个单词首字母大写;
    • 尽量避免使用缩写,通用的缩写除外;
    • 遇到首字母缩写的情况,建议使用首字母大写而不是全部大写,例如HttpUrl而不是HTTPURL;
    1. 自定义方法和变量的命名规范
    • 首个单词小写,其它单词大写;
    • 如果遇到多个单词首字母缩写的形式,建议都小写;
    • 常量的名称应该所有的单词大写,并且单词之间使用下划线分割;
    • 常量是唯一一个建议使用下划线命名的情形。
    1. 类型参数
    • T 表示任意类型
    • E 表示集合的元素类型
    • K 映射的键类型
    • V 映射的值类型
    • X 表示异常

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

    相关文章

      网友评论

      • 5d1f2b50e2df:你好!请问你联系方式是什么?
        5d1f2b50e2df: @lkee6760 你好!请问可以分享一下Java的学习方法吗?
        5d1f2b50e2df: @lkee6760 想请教一下怎样学Java?
        lkee6760: @H伟 有什么可以帮忙的?🙂

      本文标题:使用工具类DbUtils连接数据库,并简单操作数据库

      本文链接:https://www.haomeiwen.com/subject/jaojwttx.html