jdbc问题总结如下
数据库【连接创建、释放频繁】造成系统资源浪费,从而影响系统性能。解决方式:使用【数据库连接池】可解决此问题。
【Sql语句】在代码中【硬编码】,造成代码不易维护,在实际应用中sql语句可能经常发生变化,sql变动需要改变文件下的java代码。
使用预编译声明【preparedStatement】向【占位符传参】存在【硬编码】,因为sql语句的where条件不一定,?数量可能多也可能少,对应位置也可能变化,修改sql后还要修改对应代码,系统不易维护。
对【结果集】解析存在【硬编码】,sql变化导致解析代码变化,系统不易维护,如果能将【数据库记录封装成pojo对象】解析相对比较方便。
JDBC无封装下的标准代码
public static void main(String[] args) {
Connection conn = null;
PreparedStatement pstmt = null;
ResultSet rs = null;
try {
// 加载数据库连接驱动
Class.forName("com.mysql.jdbc.Driver");
// 通过DriverManager驱动管理类获取数据库连接【问题一】
connection = DriverManager.getConnection("jdbc:mysql://localhost:3306/jdbc_project?characterEncoding=utf-8", "root", "root");
// 定义sql语句 ?表示占位符【问题二】
String sql="select * from tb_user where username=?";
// 获取预处理statement
pstmt= conn.prepareStatement(sql);
// 设置参数,第一个参数为sql语句中占位符的序号(从1开始),第二个参数为设置的参数值【问题三】
pstmt.setString(1, "王五");
// 向数据库发出sql执行查询,查询出结果集【问题四】
rs= pstmt.executeQuery();
// 遍历查询结果集
while (rs.next()) {
System.out.println(rs.getString("id")
+ " " + rs.getString("username"));
}
} catch (Exception e) {
e.printStackTrace();
} finally {
// 释放资源
if (rs!= null) {
try {
rs.close();
} catch (Exception e) {
e.printStackTrace();
}
}
if (pstmt!= null) {
try {
pstmt.close();
} catch (Exception e) {
e.printStackTrace();
}
}
if (conn!= null) {
try {
conn.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}
}