java – 从结果集创建对象.我这样做了吗?
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了java – 从结果集创建对象.我这样做了吗?,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含3187字,纯文字阅读大概需要5分钟。
内容图文
![java – 从结果集创建对象.我这样做了吗?](/upload/InfoBanner/zyjiaocheng/723/10689ab70af84b19ab0f526df519199b.jpg)
我正在学习Java,我现在正在学习JDBC.我想我已经掌握了如何使用结果集对象,但我想确保我做得对.
请参阅下面的代码.它在名为“restaurant”的数据库中查询名为“menu”的表.该表有四列:
> id_menu整数,表的主键.
> name String,菜单项的名称(例如“Double cheeseburger”)
> descr String,菜单项的描述(例如“全麦面包上的两个全牛肉馅饼.”)
>价格Double,商品的价格(例如5.95)(注意我知道我可以使用Money类型,但我试图保持简单)
这是menuItem对象的Java代码.表中的每一行都应该用于创建menuItem对象:
public class menuItem {
public int id = 0;
public String descr = "";
public Double price = 0.0;
public String name = "";
public menuItem(int newid, String newdescr, Double newprice, String newname){
id = newid;
descr = newdescr;
price = newprice;
name = newname;
}
}
一切都是公开的,只是为了简化这个练习.
这是填充数据库的代码.目前,此代码是主类中的一个方法.
public static ArrayList<menuItem> reQuery() throws ClassNotFoundException, InstantiationException, IllegalAccessException, SQLException{
ArrayList<menuItem> mi = new ArrayList<menuItem>();
//Step 1. User Class.forname("").newInstance() to load the database driver.
Class.forName("com.mysql.jdbc.Driver").newInstance();
//Step 2. Create a connection object with DriverManager.getConnection("")
//Syntax is jdbc:mysql://server/database? + user=username&password=password
Connection conn = DriverManager.getConnection("jdbc:mysql://localhost/miguelel_deliveries?" + "user=root&password=");
//Step 3. Create a statement object with connection.createStatement();
Statement stmt = conn.createStatement();
//Step 4. Create variables and issue commands with the Statement object.
ResultSet rs = stmt.executeQuery("Select * from menu");
//Step 5. Iterate through the ResultSet. Add a new menuItem object to mi for each item.
while(rs.next()){
menuItem item = new menuItem(rs.getInt("id_menu"),rs.getString("descr"),rs.getDouble("price"),rs.getString("name"));
mi.add(item);
}
return mi;
}
这段代码有效.我最终得到了一个menuItem的ArrayList,因此每个元素对应于表中的一行.但这是最好的方法吗?我可以将其概括为处理ResultSet的方法吗?
>对于数据库中的每个表或视图,创建一个Java类,其属性等同于表的列.
>将表内容加载到ResultSet对象中.
>使用while(ResultSet.next())迭代ResultSet,在步骤1中为ResultSet中的每个项创建一个新对象(来自类).
>在创建每个新对象时,将其添加到类的ArrayList中.
>根据需要操作ArrayList.
这是一种有效的方法吗?有没有更好的方法呢?
解决方法:
代码逻辑很好,但实现有几个问题:
>它不尊重命名约定.类以大写字母开头
>你不应该使用公共领域.如果将字段重新初始化为构造函数,则将字段初始化为默认值是无用的
>你没有关闭连接,这意味着每次执行该方法时,它将使一个连接保持打开状态,导致内存成为消费者,并且由于达到最大打开连接数,程序最终会失败.应该在finally块中关闭连接,或者使用自Java 7以来可用的try-with-resources构造.也应该关闭ResultSet和语句,尽管不关闭它们不会像关闭连接那样有问题.
>对于最近足够的驱动程序和JVM,不应该使用Class.forName().newInstance()
>所选择的类型很奇怪.例如,价格存储在可空的Double变量中.但是你使用getDouble(),它永远不会返回null,来获取它的值.此外,使用双倍价格是一个糟糕的选择.请改用BigDecimal.
>使用select *是一种不好的做法.选择所需的列,而不是所有列.
我不会概括每个表创建一个类.很多时候,您不会查询单个表中的所有列,而是查询几个连接表的某些列.
我还会考虑使用ORM(JPA)而不是JDBC.这将使您的代码更清晰,更简洁,更易读,更安全.
内容总结
以上是互联网集市为您收集整理的java – 从结果集创建对象.我这样做了吗?全部内容,希望文章能够帮你解决java – 从结果集创建对象.我这样做了吗?所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。