原生JDBC开发详解及问题总结(一)
本篇文章主要介绍JDBC开发过程,程序代码需要注意的问题及原生JDBC自身存在的问题总结。
JDBC基本编程步骤
- 加载数据库驱动
- 创建并获取数据库连接
- 创建JDBC statement对象或者preparedStatement预编译对象
- 设置sql语句
- 设置sql语句中的参数(使用preparedStatement时使用)
- 通过statement对象获取结果集(resultSet)
- 使用结果集resultSet的getString等方法获取查询结果
- 释放资源,从建立对象的反方向释放(resultSet,prepareStatement/Statement,Connection)
JDBC问题总结
1.数据库连接,使用时就创建,不使用时就立即释放,对数据库进行频繁连接开启和关闭,造成资源浪费,影响数据库性能。
设想:使用数据库连接池管理数据库连接。
2.将数据库硬编码到Java代码中,如果sql语句修改,需要重新编译Java代码,不利于维护。
设想:将sql语句配置在xml配置文件中。
3.向preparedStatement中设置参数,对占位符号设置和设置参数,硬编码在Java代码中,不利于系统维护。
设想:将sql语句及占位符和参数全部配置在xml中。
4.从resultSet中遍历结果集数据时,存在硬编码,将获取表的字段进行硬编码,不利于系统维护。
设想:将查询的结果集,自动映射成Java对象。
5.需对JDBC编程可能产生的异常进行捕捉处理并正确关闭资源。
设想:采用ORM模型
以下是JDBC创建的基础程序代码:
public static void main(String[] args) {
ResultSet re = null;
Statement st = null;
Connection conn = null;
try {
Class.forName("com.mysql.jdbc.Driver");//加载数据库驱动
conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/Newdata","root","12345678");//创建数据库连接
//获取Statement
st = conn.createStatement();
//statement执行sql语句获得结果集
re = st.executeQuery("select * from students");
while(re.next()) {
System.out.println(re.getString("name")+" "+re.getInt("age")+" "+re.getString("sports"));
}//遍历查询出的结果
} catch(ClassNotFoundException ex) {
ex.printStackTrace();
} catch (SQLException e) {
System.out.println("get a error");
e.printStackTrace();
} finally {
//关闭资源
try {
if(re!=null)
re.close();
re = null;
if(st!=null)
st.close();
st = null;
if(conn!=null)
conn.close();
conn = null;
} catch(SQLException ex) {
ex.printStackTrace();
}
}
}
网友评论