JDBC使用类路径读取jdbc配置文件
时间:20180314
优化jdbc的JdbcUtil类
代码实现在JdbcUtil类中使用类路径读取jdbc配置文件
//jdbc配置文件--jdbc.properties
url=jdbc:mysql://localhost:3306/day16
user=root
password=root
driverClass=com.mysql.jdbc.Driver

jdbc.properties文件结构目录
//JdbcUtil.java
/**
* jdbc通用方法
* @author mengjie
*
*/
public class JdbcUtil {
//url
//private static String url = "null";错误写法,读取jdbc.properties文件中数据无法覆盖
private static String url = null;
//user
//private static String user = "null"; static静态写法,只初始化一次
private static String user = null;
//password
//private static String password = "null";static静态写法,只初始化一次
private static String password = null;
//driveClass驱动程序类
//private static String driverClass = "null";static静态写法,只初始化一次
private static String driverClass = null;
/**
*z只注册一次驱动,静态代码块
*/
static {
//注册驱动程序
try {
/**
* 读取jdbc.properties文件
*/
//1) 创建Properties
Properties prop = new Properties();
//构造输入流
/**
* 相对路径: . 这个代表当前目录。当前目录本质上是java命令运行的目录
* java项目中:eclipse中,当前目录指向项目的跟目录
* web项目中:当前目录只想%tomcat%/bin目录
* 结论:
* 1).在web项目中不能使用相对路径
* 2).不能使用ServletContext读取文件(Java项目中无法使用,web项目可行)
* 3).使用类路径的方式读取配置文件
* 3.1获取类的对象
* Class clazz = 当前项目的类.class
*
* 3.2调用类的路径方法
* clazz.getResourceAsStream("/配置文件")
* 这个斜杠代表类路径的根目录
*/
//1)获取类的对象(使用当前类)
Class clazz = JdbcUtil.class;
//2)使用类路径的读取方法去读取文件
/**
* 这个斜杠:代表项目类路径的根目录。
* 什么是类路径:查找类的目录/路径
* java项目下:类路径的根目录,指向项目的bin目录
* Web项目下:类路径的跟目录,指向WEB-INF/classes目录下
* 只要把配置文件放在src目录的根目录下,那么这些文件就自动拷贝到项目的类路径跟目录下
*/
InputStream in = clazz.getResourceAsStream("/jdbc.properties");
//InputStream in = new FileInputStream("./src/jdbc.properties");
//2) 加载文件
prop.load(in);
//3) 读取文件内容
url = prop.getProperty("url");
user = prop.getProperty("user");
password = prop.getProperty("password");
driverClass = prop.getProperty("driverClass");
System.out.println("url: "+url+" user: "+user+" password: "+password+" driverClass: "+driverClass);
Class.forName(driverClass);
} catch (Exception e) {
e.printStackTrace();
}
}
/**
* 获取连接的方法
* @throws SQLException
*/
public static Connection getConnection() {
try {
Connection conn = DriverManager.getConnection(url, user, password);
return conn;
} catch (SQLException e) {
e.printStackTrace();
throw new RuntimeException(e);
}
}
/**
* 释放资源的方法
*/
public static void close(Statement stmt, Connection conn) {
if(stmt != null) {
try {
stmt.close();
} catch (SQLException e) {
e.printStackTrace();
throw new RuntimeException(e);
}
}
if(conn != null) {
try {
conn.close();
} catch (SQLException e) {
e.printStackTrace();
throw new RuntimeException(e);
}
}
}
/**
* 释放资源的方法
*/
public static void close(ResultSet rs, Statement stmt, Connection conn) {
if(rs!=null) {
try {
rs.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
if(stmt != null) {
try {
stmt.close();
} catch (SQLException e) {
e.printStackTrace();
throw new RuntimeException(e);
}
}
if(conn != null) {
try {
conn.close();
} catch (SQLException e) {
e.printStackTrace();
throw new RuntimeException(e);
}
}
}
}
//测试demo
public class Demo2 {
private static Connection conn = null;
private static Statement stmt = null;
private static ResultSet res = null;
public static void main(String[] args) throws Exception {
String username = "rose";
String password = "123456";
conn = JdbcUtil.getConnection();
stmt = conn.createStatement();
String sql = "SELECT * FROM user_list WHERE NAME =' "+username+" ' AND PASSWORD=' "+password+" '";
res = stmt.executeQuery(sql);
if(res.next()) {
System.out.println("登陆成功");
}else {
System.out.println("登陆失败");
}
}
}
总结
- jdbc是什么?
使用java程序操作数据库的技术。(就是一套接口) - jdbc操作数据库步骤:
2.1注册驱动
Class.forName(驱动名称)
2.2获取连接
Connection conn = DriverManager.getConnection(url,user,password);
2.3创建Statement/PreparedeStatement/CallableStatement
Statement stmt = conn.getStatement();
PreparedStatement stmt = conn.PreparedStatement(sql);
2.4如果使用PreparedeStatement/CallableStatement,设置参数
stmt.setXXX(参数位置, 参数值);
2.5执行sql/发送参数
stmt.executeUpdate() DDL+DML
ResultSet res = stmt.executeQuery() ; DQL
2.6处理结果集
res.next()
res.get()
2.7关闭资源
res.close();
stmt.close();
conn.close();