开发过程问题总结:

记录一下 在进行java学习以及尝试开发项目过程中所遇到的一些问题:

项目一:是利用SWT进行界面设计,使用JDBC连接Oracle数据库  纯java开发的酒店管理系统

2022.04.27

  • 在项目初期搭建数据库,创建单人间,双人间等不同类别房间表格空间时,就直接为不同的房间类型创建不同的表格,刚开始感觉查询起来应该互不干扰还挺好的,但后面发现这些表结构完全一样可以试着重构一下,就改写分成了房间信息表roomInfo和房间类型roomType两个表,在房间信息表中引入房间类型的外键约束,这样极大的简化了表结构,后期也只是加了sql语句的查询条件,也可以进行多条查询。
  • 在添加列名desc时也在报错,百思不得其解sql语句没毛病,后面才知道desc是 oracle 的 关键字,所以字段名不能叫desc,否则插入数据库报错。
  • OS:在下载安装 Oracle数据库时,也很容易出错,出错又得删除重来

2022.04.29

  • 在JDBC连接Oracle数据库时,配置相关信息 -> 加载驱动 -> 建立连接 -> 释放连接,并尝试将这一固定步骤 封装成一个DBHelper类,并且将驱动也进行封装成数据库连接配置文件db.properties(放在类路径下),省下一大波事;
/**
 * 自定义的JDBC优化类
 * 	   封装操作数据库的相关方法
 * @author sunliang
 * @date 2022年4月29日
 * @version 1.0
 * Email 269224347@qq.com
 */
public class DBHelper {

	//配置信息
	//ORACLE
	//private static String driverClassName = "oracle.jdbc.driver.OracleDriver";
	//private String url = "jdbc:oracle:thin:@localhost:1521:ORCL";
	//private String user = "scott";
	//private String password = "a";

	//MySQL

	//相关对象
	private Connection conn = null;//连接对象
	private PreparedStatement pstmt = null;//预编译
	private ResultSet rs = null;//结果集

	// 只在类中第一次加载才执行 且 执行一次   -> 当使用JNDI连接数据库时  可以注释该静态加载  
	static {
		//2、加载并注册依赖oracle.jdbc.driver.OracleDriver   包路径  + 类名  
		try {
			Class.forName( ReadConfig.getInstance().getProperty("driverClassName"));
		} catch (ClassNotFoundException e) {
			e.printStackTrace();
		}
	}

	// 建立连接
	private Connection getConn() {
		// 3、建立连接     url  uname  pwd   ctrl 1 + 2 -> L
		// jdbc:oracle:thin:@<要访问的数据库服务器的ip地址>:<数据库服务器的端口>:<要访问的数据库名>
		// url 统一资源定位符   jdbc:oracle:thin:@数据库的IP地址:端口号:实例名    127.0.0.1 | localhost:1521:ORCL 
		try {
			// conn = DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:ORCL", "scott", "a");
			conn = DriverManager.getConnection(ReadConfig.getInstance().getProperty("url"), ReadConfig.getInstance());
		} catch (SQLException e) {
			e.printStackTrace();
		}
		return conn;
	}

	// 释放资源
	@SuppressWarnings("unused")
	private void closes(ResultSet rs, PreparedStatement pstmt, Connection conn) {
		//7、关闭资源  先开启的后关闭  后开启的先关闭  结果集 -> 语句块 -> 连接
		if( rs != null) {
			try {
				rs.close();
			} catch (SQLException e) {
				e.printStackTrace();
			}
		}
		if( pstmt != null) {
			try {
				pstmt.close();
			} catch (SQLException e) {
				e.printStackTrace();
			}
		}
		if( conn != null) {
			try {
				conn.close();
			} catch (SQLException e) {
				e.printStackTrace();
			}
		}
	}
}

db.properties

#Oracle
#driverClassName=oracle.jdbc.driver.OracleDriver
#url=jdbc:oracle:thin:@localhost:1521:orcl
#user=scott
#password=a

2022.05.04

  • 在DAO层进行数据添加时,控制台报 未找到父项关键字
    错误;初步判断以为是在sql语句中未指明,后面查原因才发现时数据库中出现问题,解释如下:
    -------------表A中有个字段是外键,关联了表B中的某字段,再往表A插入数据时,会出现这种情况。可能原因:1.在往A表插入时,外键关联的字段在B表中必须有数据,如果B表中没有数据则又这种情况。2.产生了外键环,就是B表中被外键关联的字段又关联了C表中的字段,而C中相应字段却没有数据,则产生这种情况。
    -------------所以得知原因,重新在表中添加数据后再进行数据操作,问题解决。
  • OS:在进行DAO层数据操作时,也要注意进行容错判断,注意定义方法中的查询参数个数和参数名称,sql语句在方法中并不会直接报错,所以也要格外注意

2022.05.08

  • 今天在对部分DAO层方法构建完成后进行Junit单元测试时,发现在数据库中插入的值,结果在console控制台查询不出来;以为是查询语句出错,校对了好久,结果是因为oracle更新数据后没有commit,它不会正式提交到数据库; 引以为戒!!!

2022.05.12

  • 利用SWT进行登录界面设计时,登录界面的背景中 总有部分被组件label的颜色挡住,无法通过组件背景颜色透明化来显示登录界面全屏背景,看着突出那一块就很不舒服。也尝试通过给shell设置
    shell.setBackgroundMode(SWT.INHERIT_DEFAULT);
    也无法使得界面背景完全呈现,后面才发现是调用了在uitl工具类中定义的图片自适应方法,背景自适应大小 使得界面不断重绘, ?

2022.05.14

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值