JDBC实现数据库表格到java对象的转换。

在Java领域,当人们谈到对象持久化的时候,大多人都能想到hibernate。使用hibernate能够简化Java开发,并且使Java代码具有良好的移植性。不管换成什么样的数据库,上层的代码都一样,只要在hibernate配置文件里,加上一点点修改就能完成任务,它平衡了各大数据库的差异,以统一的接口实现了数据库的通常操作。
hibernate到底带给了我们什么呢?数据库里的表格可以当做Java类看,而里面的记录则可以看成Java对象。而hibernate最主要要做的事情就是如何将记录映射成Java类对象。hibernate还提供了数据库连接池和对操作的数据库对象管理的方案,提交客户响应速度。
下面将给出一个例子,使用jdbc映射数据库,从而揭露hibernate的原理。
简单领域对象User.java
package com.model;
public class User {
private Integer id;
private String username;
private String password;

public User() {
super();
}

public User(Integer id, String username, String password) {
super();
this.id = id;
this.username = username;
this.password = password;
}

public Integer getId() {
return id;
}

public void setId(Integer id) {
this.id = id;
}

public String getUsername() {
return username;
}

public void setUsername(String username) {
this.username = username;
}

public String getPassword() {
return password;
}

public void setPassword(String password) {
this.password = password;
}

}

操作接口UserManager.java
package com.manager;
import java.util.List;
import com.model.User;

public interface UserManager {
User get(Integer id);
User get(String username,String password);
List<User> getAll();
void save(User user);
void update(User user);
}

接口的实现 UserDao.java
package com.manager;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.List;

import com.model.User;

public class UserDao implements UserManager {
private String driverName;
private String url;
private String username;
private String password;

public UserDao() {
super();
}

public UserDao(String driverName, String url, String username,
String password) {
super();
this.driverName = driverName;
this.url = url;
this.username = username;
this.password = password;
}

public String getDriverName() {
return driverName;
}

public void setDriverName(String driverName) {
this.driverName = driverName;
}

public String getUrl() {
return url;
}

public void setUrl(String url) {
this.url = url;
}

public String getUsername() {
return username;
}

public void setUsername(String username) {
this.username = username;
}

public String getPassword() {
return password;
}

public void setPassword(String password) {
this.password = password;
}

private Connection getConnection() {
try {
Class.forName(driverName);
return DriverManager.getConnection(url, username, password);
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
return null;
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
return null;
}
}

@Override
public User get(Integer id) {
// TODO Auto-generated method stub
String queryString = "select * from user where id=" + id;
Connection conn;
User user = new User();
if ((conn = getConnection()) == null)
return null;
try {
Statement stmt = conn.createStatement();
ResultSet result = stmt.executeQuery(queryString);
while (result.next()) {
Integer user_id = result.getInt("id");
String user_username = result.getString("username");
String user_password = result.getString("password");
user.setId(user_id);
user.setUsername(user_username);
user.setPassword(user_password);
}
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
return null;
}

return user;
}

@Override
public User get(String username, String password) {
String queryString = "select * from user where username=" + username
+ " and password=" + password;
Connection conn;
User user = new User();
if ((conn = getConnection()) == null)
return null;
try {
Statement stmt = conn.createStatement();
ResultSet result = stmt.executeQuery(queryString);
while (result.next()) {
Integer user_id = result.getInt("id");
String user_username = result.getString("username");
String user_password = result.getString("password");
user.setId(user_id);
user.setUsername(user_username);
user.setPassword(user_password);
}
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
return null;
}

return user;
}

@Override
public List<User> getAll() {
// TODO Auto-generated method stub
String queryString = "select * from user";
Connection conn;
List<User> list = new ArrayList<User>();
if ((conn = getConnection()) == null)
return null;
try {
Statement stmt = conn.createStatement();
ResultSet result = stmt.executeQuery(queryString);
while (result.next()) {
User user = new User();
Integer user_id = result.getInt("id");
String user_username = result.getString("username");
String user_password = result.getString("password");
user.setId(user_id);
user.setUsername(user_username);
user.setPassword(user_password);
list.add(user);
}
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
return list;
}

return list;
}

@Override
public void save(User user) {
// TODO Auto-generated method stub
String queryString = "insert into user (username,password) values ('"
+ user.getUsername() + "','" + user.getPassword() + "')";
Connection conn;
List<User> list = new ArrayList<User>();
if ((conn = getConnection()) == null)
return;

Statement stmt;
try {
stmt = conn.createStatement();
stmt.execute(queryString);
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}


}

@Override
public void update(User user) {
// TODO Auto-generated method stub
String queryString = "update user set username='"+user.getUsername()+"'," +
"password'"+user.getPassword()+"'wherer id="+user.getId();
Connection conn;
List<User> list = new ArrayList<User>();
if ((conn = getConnection()) == null)
return;

Statement stmt;
try {
stmt = conn.createStatement();
stmt.execute(queryString);
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}

测试类
package com.test;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.List;

import com.manager.UserDao;
import com.manager.UserManager;
import com.model.User;

public class Test {

/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
String dirverName="com.mysql.jdbc.Driver";
String url="jdbc:mysql://localhost/sample";
String username="root";
String password="lilonglai";
UserManager userManager = new UserDao(dirverName,url,username,password);
List list=userManager.getAll();
int i=0;
while(i<list.size()){
User user=(User)list.get(i);
System.out.print("id:"+user.getId());
System.out.print(" username:"+user.getUsername());
System.out.println(" password:"+user.getPassword());
i++;
}

}
}


这样就完成了从数据库到Java类的转换,这大概也是hibernate的操作方法。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,我可以为您提供Java窗体显示SQL数据的示例代码,实现显示数据库表格。 您可以使用JavaJDBC API连接到SQL数据库,然后使用Java GUI框架(如Swing或JavaFX)创建窗体,并将查询结果显示在表格控件中。 以下是一个使用Swing框架创建Java窗体,显示SQL查询结果的简单示例代码: ```java import javax.swing.*; import javax.swing.table.DefaultTableModel; import java.awt.*; import java.sql.*; public class MyWindow extends JFrame { private JTable table; public MyWindow() { super("SQL数据表"); try { // 加载数据库驱动 Class.forName("com.mysql.jdbc.Driver"); // 连接数据库,这里使用MySQL数据库举例 String url = "jdbc:mysql://localhost:3306/mydatabase"; String user = "root"; String password = "mypassword"; Connection conn = DriverManager.getConnection(url, user, password); // 执行SQL查询 Statement stmt = conn.createStatement(); ResultSet rs = stmt.executeQuery("SELECT * FROM mytable"); // 将查询结果装载到JTable中 table = new JTable(buildTableModel(rs)); JScrollPane scrollPane = new JScrollPane(table); getContentPane().add(scrollPane, BorderLayout.CENTER); // 关闭连接 rs.close(); stmt.close(); conn.close(); } catch (Exception e) { e.printStackTrace(); } setSize(400, 300); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); setVisible(true); } public static void main(String[] args) { new MyWindow(); } // 将ResultSet装载到TableModel中 public static DefaultTableModel buildTableModel(ResultSet rs) throws SQLException { ResultSetMetaData metaData = rs.getMetaData(); // 获取列数 int columnCount = metaData.getColumnCount(); // 获取列名 String[] columnNames = new String[columnCount]; for (int column = 1; column <= columnCount; column++) { columnNames[column - 1] = metaData.getColumnName(column); } // 将结果集转换为表格模型 DefaultTableModel tableModel = new DefaultTableModel(columnNames, 0); while (rs.next()) { Object[] rowData = new Object[columnCount]; for (int column = 1; column <= columnCount; column++) { rowData[column - 1] = rs.getObject(column); } tableModel.addRow(rowData); } return tableModel; } } ``` 以上代码演示了如何将查询结果装载到`JTable`中,并显示在Java窗体中。在`buildTableModel()`方法中,我们使用`ResultSetMetaData`对象获取每一列的列名,并将查询结果装载到`DefaultTableModel`中。 希望以上内容能够帮助到您。如果您有任何问题,请随时问我。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值