一、文章结构
工具类完整源码
SQL语句编写及操作
标识符的一般命名规范
二、工具类DbUtils
编写工具类的准备工作
- 安装mysql数据库,并制作表格;
- 在工程目录下新建lib文件夹,导入mysql-connector-java-5.1.37-bin.jar包,右键文件选择Build Path-->add Build Path...
- 编写配置文件,放入src目录下
- 不同的数据库有不同的驱动类及url,命名规范也不相同,需要根据数据库JDBC操作帮助文档编写字符串
- 配置文件必须是'键=值'对形式,不能有空格和标点符号,严格区分大小写
driver=com.mysql.jdbc.Driverurl=jdbc:mysql://localhost:3306/databaseusername=rootpassword=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); }}复制代码
四、几点注意事项
- 自定义包的命名规范(参考《The Java Language Specification》)
- 名称都应该以自己的单位或者组织的Internet域名开头,并且定顶级域名放在前面;
- 用户自定义包的名称决不能以java和javax开头;
- 包名称的其余部分应该包括一个或者多个描述该包的组成部分,并且简短,单个层级名称通常不超过8个字符;
- 鼓励使用有意义的缩写形式,例如utils就是utilities的缩写。
- 自定义类、接口、枚举、注释的命名规范
- 每个单词首字母大写;
- 尽量避免使用缩写,通用的缩写除外;
- 遇到首字母缩写的情况,建议使用首字母大写而不是全部大写,例如HttpUrl而不是HTTPURL;
- 自定义方法和变量的命名规范
- 首个单词小写,其它单词大写;
- 如果遇到多个单词首字母缩写的形式,建议都小写;
- 常量的名称应该所有的单词大写,并且单词之间使用下划线分割;
- 常量是唯一一个建议使用下划线命名的情形。
- 类型参数
- T 表示任意类型
- E 表示集合的元素类型
- K 映射的键类型
- V 映射的值类型
- X 表示异常
如果长期养成的习惯用法与此不同,请不要盲目遵从这些命名惯例。