07
2020
02

JDBC问题分析

  1. 一个JDBC编码例子:


一个JavaWeb中连接数据库的代码如下:

详细的步骤可以参照———JDBC编程步骤。

package jdbc;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.Date;

/**
 * 类说明:
 * 		JDBC创建PreparedStatement对象连接数据库
 * @author qianliangguo
 */
public class testPreparedStatement {
	public static void main(String[] args) {
		Connection conn = null;
		PreparedStatement pstm = null;
		ResultSet rs = null;
		try {
			// 1.加载驱动
			Class.forName("com.mysql.jdbc.Driver");
			// 2.获取连接
			String url = "jdbc:mysql://localhost:3306/mybase?useUnicode=true&characterEncoding=utf-8";
			String user = "root";
			String password = "Hudie";
			conn = DriverManager.getConnection(url, user, password);
			// 3.创建PreparedStatement,预编译sql语句
			String sql = "select * from emp where job=?";
			pstm = conn.prepareStatement(sql);//创建sql半成品
			pstm.setString(1,"clerk");//参数绑定
			//4.执行sql语句
			rs = pstm.executeQuery();
			//5.处理结果集
			while(rs.next()){
				int empno = rs.getInt("empno");
				String ename = rs.getString("ename");
				String job = rs.getString(3);
				int mgr = rs.getInt("mgr");
				Date hiredate = rs.getDate(5);
				double sal = rs.getDouble("sal");
				double comm = rs.getDouble("commit");
				int deptno = rs.getInt(8);
				System.out.println(empno+" "+ename+" "+job+" "+mgr+" "+hiredate+" "+sal+" "+comm+" "+deptno);
			}
		} catch (Exception e) {
			e.printStackTrace();
		} finally {
			// 6.关闭连接/释放资源
			try {
				rs.close();
				pstm.close();
				conn.close();
			} catch (SQLException e) {
				e.printStackTrace();
			}
		}
	}
}

2.JDBC编码问题分析


数据库链接创建、释放频繁造成系统资源浪费从而影响系统性能。

如果使用数据库链接池可解决此问题。


Sql 语句在代码中硬编码,造成代码不易维护,实际应用 sql 变化的可能较大,sql 变动需要改变 java代码。

设想:把sql语句写在一个配置文件中,修改配置文件中的sql语句就行了。


使用 preparedStatement 向占有位符号传参数存在硬编码,因为 sql 语句的 where 条件不一定,可能多也可能少,修改 sql 还要修改代码,系统不易维护。

设想:sql语句中的占位符及其参数写在一个配置文件中,自动的完成参数的输入。(输入映射)


对结果集解析存在硬编码(查询列名),sql 变化导致解析代码变化,系统不易维护,如果能将数据库记录封装成 pojo 对象解析比较方便。

设想:查询的结果和Java对象可以自动完成映射。(输出映射)



版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。

本文链接:https://blog.csdn.net/weixin_43691058/article/details/104199767


« 上一篇 下一篇 »

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。