最近看了许多岗位,有要求使用JDBC SERVLET JSP,突然有点懵,只记得jdbc,servlet,jsp已经是许久以前学的了,当时也是为了学框架,顺便学了jdbc,servlet这些底层,还有el和jstl表达式来使用jsp。还有一些 xml 的 自定义dtd约束等。 后来开发项目都逐渐使用,框架,前后端分离,这些知识就有点遗忘。但是因为以前都学过,所以捡起来比较容易。
对jdbc单纯的开发过程的总结和弊端
转载于 JDBC编程
JDBC(7)
(1)加载数据库驱动
//加载数据库驱动的代码如下(反射加载数据库驱动)
Class.forName("com.mysql.jdbc.Driver");
(2)定义数据库的url(统一资源定位符)
//url是获取连接的必须要素,其格式如下:协议、IP地址、端口号、数据库名
//我们定义的url如下:
String url = “jdbc:mysql://localhost:3306/databases?characterEncoding=utf-8”
(3)获得数据库连接(Connection对象)
//获得数据库连接对象的代码如下:(url,数据库用户名root,密码)
Connection conn = DriverManager.getConnection(url, username, password);
(4)创建Statement并初始化
我们还可以使用prepareStatement
二者区别详见 defference between prepareStatement and Statement
//创建Statement对象的代码如下:
Statement stmt = conn.createStatement();
(5)执行SQL语句,并获取结果集
String sql="";
//第一种操作方式,无返回值
stmt.execute(sql)
//第二种操作方式,有结果集返回
ResultSet rs = stmt.executeQuery(sql);
(6)释放数据库资源
代码抽取(4)
为了降低程序复杂程度,增加代码复用性,我们将共性模块进行抽取
抽取的模块主要有:
- 数据库信息模块
#db.properties
driver = com.mysql.jdbc.Driver
url = jdbc:mysql://localhost:3306/mydb?useUnicode=true&characterEncoding=utf-8
username = root
password = root
- 资源读取模块
pro创建一个静态的Properties对象
JDBCUtil.class是创建一个JDBCUtil的Class对象
Class类的作用是运行时提供或获得某个对象的类型信息(可参考Dependence Injection) , 和C++中的typeid()函数类似
Class是反射技术的基础,要想操纵类中的属性和方法,都必须从获取Class开始
获取Class对象的方式:Class对象由虚拟机创建,只能获取
详细内容见:JDBC中的反射
static {
//对资源文件的读取
Properties pro = new Properties();
try {
InputStream s = JDBCUtils.class.getResourceAsStream("db.properties");
p.load(s);
} catch (IOException e) {
e.printStackTrace();
}
driverClass = p.getProperty("driver");
url = p.getProperty("url");
userName = p.getProperty("username");
passWord = p.getProperty("password");
try {
//通过反射获取数据库驱动
Class.forName(driverClass);
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
}
- 连接获取模块
public static Connection getConnection(){
Connection conn = null;
try {
conn = DriverManager.getConnection(url, username, password);
} catch (SQLException e) {
e.printStackTrace();
}
return conn;
}
- 资源释放模块(有无结果集,导致关闭资源方式不一样,所以进行重载)
public static void closeResource(ResultSet result, Statement stmt, Connection conn) {
try {
result.close();
} catch (SQLException e) {
e.printStackTrace();
}
try {
stmt.close();
} catch (SQLException e) {
e.printStackTrace();
}
try {
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
public static void closeResource(PreparedStatement stmt, Connection conn) {
try {
stmt.close();
} catch (SQLException e) {
e.printStackTrace();
}
try {
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}