gpt4 book ai didi

java - 如何在 JSF 中与 (MySQL) 数据库交互

转载 作者:可可西里 更新时间:2023-11-01 07:49:43 24 4
gpt4 key购买 nike

我来自 PHP,正在尝试使用 JSF 构建 Web 应用程序。我真的很喜欢 JSF 的某些任务的简单性(例如 Ajax 的使用),但是当涉及到数据库集成时,我非常困惑,不知道从哪里开始以及如何开始,无论我阅读了多少关于它的内容.

过去,我只是在 PhpMyAdmin 中创建和管理我的 MySQL 数据库,然后通过 PHP 进行连接,在 JSF 中似乎要困难得多。

我正在使用 Apache Tomcat 作为 Servlet 容器,我什至可以在 Tomcat 上运行 PhpMyAdmin 吗?此外,我还阅读了一些访问 Web 应用程序中的数据库的不同方法,例如使用 Hibernate 作为连接工具的 JPA 和 JDBC。

所以我在这个问题中基本上要求的是有关 Java Server Faces 中数据库连接的初学者技巧和教程。我还想知道是否还有办法让我仍然可以使用 PhpMyAdmin 来管理和创建我的数据库。

我很抱歉这个问题太笼统了,但经过几个小时的研究,我仍然不清楚这个主题,我很想从有经验的人那里得到一些信息。

最佳答案

只是为了开始和理解如何在 JSF 中建立与数据库的连接,我将举例说明如何在不使用任何其他框架的情况下手动执行此操作,稍后您可以使用 Hibernate 或任何您想要的东西。

1-) 确保你的 mysql 服务器正在运行

2-) 创建一个新的动态 web 项目(如果不存在的话)

3-) 下载mysql Connector jar文件,放到web-inf/lib下

4-) 在您的 web.xml 中定义数据库变量。像这样:

<context-param>
<param-name>JDBC-DRIVER</param-name>
<param-value>com.mysql.jdbc.Driver</param-value>
</context-param>
<context-param>
<param-name>DB-SERVER</param-name>
<param-value>jdbc:mysql://localhost:3306/db_name...</param-value>
</context-param>
<context-param>
<param-name>DB-USER</param-name>
<param-value>root or your db username</param-value>
</context-param>
<context-param>
<param-name>DB-PASSWORD</param-name>
<param-value>...db user password ...</param-value>
</context-param>

5-) 创建一个简单的数据库连接管理器示例:

import java.io.Serializable;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.text.DecimalFormat;
import java.util.ArrayList;
import java.util.regex.Pattern;

import javax.faces.context.FacesContext;


public class DBM implements Serializable{
private static final long serialVersionUID = 9204275723046653468L;
private String db_server = "";
private String db_user = "";
private String db_password = "";
private String db_driver = "";

public Connection connection = null;

public DBM() throws Exception {
init();
}

private void init()throws Exception{
FacesContext fc = FacesContext.getCurrentInstance();
db_server = fc.getExternalContext().getInitParameter("DB-SERVER");
db_user = fc.getExternalContext().getInitParameter("DB-USER");
db_password = fc.getExternalContext().getInitParameter("DB-PASSWORD");
db_driver = fc.getExternalContext().getInitParameter("JDBC-DRIVER");
Class.forName(db_driver);
}

public Connection initConnection() throws Exception{
if( this.connection == null ){
this.connection = DriverManager.getConnection(db_server, db_user, db_password);
this.connection.setAutoCommit(false);
}else if( this.connection.isClosed() ){
this.connection = null;
this.connection = DriverManager.getConnection(db_server, db_user, db_password);
this.connection.setAutoCommit(false);
}
return this.connection;
}

public void closeConnection(){
try {
if( this.connection != null ){
this.connection.close();
}
} catch (SQLException e) {
e.printStackTrace();
}
}

public void commitConnection(){
try {
if( this.connection != null && !this.connection.isClosed() ){
this.connection.commit();
}
} catch (SQLException e) {
e.printStackTrace();
}
}

public void rollbackConnection(){
try {
if( this.connection != null && !this.connection.isClosed() ){
this.connection.rollback();
}
} catch (SQLException e) {
e.printStackTrace();
}
}
}

6-) 现在让我们在使用数据库连接的地方创建一个名为 User 的测试类:

import java.io.Serializable;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.util.ArrayList;
import java.util.List;



public class User implements Serializable{
private static final long serialVersionUID = -7667553477247791348L;
private int id;
private String name;
private String category;
private static String db_table = "db table name of this class";

public User(){

}
public User(int id, String name, String cat) {
super();
this.id = id;
this.name = name;
this.category = cat;
}

public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}

public String getCategory() {
return category;
}
public void setCategory(String category) {
this.category = category;
}
public static List<User> getListByCategory(DBM dbm, String cid, boolean close) throws Exception{
List<User> list = new ArrayList<User>();
PreparedStatement preState = null;
ResultSet resultSet = null;
try {
if( dbm == null ){
dbm = new DBM();
}
String sql = "SELECT * FROM "+db_table+" WHERE _CATEGORY_ID=?";
preState = dbm.initConnection().prepareStatement(sql);
preState.setString(1, cid);
resultSet = preState.executeQuery();
while (resultSet.next()) {
list.add( new User(resultSet.getInt(1),resultSet.getString(2),resultSet.getString(3)) );
}
}catch (Exception e) {
e.printStackTrace();
}finally{
if( preState != null )
preState.close();
if( close && dbm.connection != null )
dbm.connection.close();
}
return list;
}

}

关于java - 如何在 JSF 中与 (MySQL) 数据库交互,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21159174/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com