2014-01-16 32 views
3

我来自PHP并试图使用JSF构建Web应用程序。我真的很喜欢JSF的一些任务的简单性(例如使用Ajax),但是当涉及到数据库集成时,我感到非常困惑,不知道在哪里以及如何开始,无论我阅读的是多少。如何与JSF中的(MySQL)数据库交互

在过去,我简单地创建并给予我的MySQL数据库在phpMyAdmin,做通过PHP连接,在JSF这似乎是方式更加困难。

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

那么,我基本上是在这个问题询问是关于Java服务器数据库连接面初学者技巧和教程。另外我想知道是否有办法继续使用PhpMyAdmin来管理和创建我的数据库。

我对这个问题beeing很通用抱歉,但研究这个课题小时后仍是如此不清楚,我认为我很想得到有经验的人的一些信息。

+1

是的,你仍然可以使用PhpMyAdmin。只需单独安装。在同一台机器上运行2个Web服务器并不禁止(只在不同的端口上运行,但这只不过是显而易见的)。更重要的是,你可以使用其中一个(通常是HTTPD)作为另一个(通常是Tomcat)的代理。这还有其他的好处,例如,有维护页面的可能性。其余的,最好找一个讨论论坛。这不能有一个现在和将来都可以接受的单一答案(这就是像Stack Exchange这样的Q&A网站的全部内容)。 – BalusC

+0

数据库层与你的应用程序体系结构有关,而不是JSF本身,它必须与视图层绑定。我的意思是,对于JSF应该无关紧要地使用MySql或Postgre。您正在寻找可能的架构原型设计和依赖注入工具(请参阅Spring或CDI),它将帮助您构建图层。 –

回答

8

只为开端,了解如何建立在JSF到数据库的连接,我给你举个例子如何做手工,而无需使用任何其他框架,以后你可以使用Hibernate或者你什么都想要。

1)请确保你的MySQL服务器正在运行

2-)创建一个新的动态Web项目(如果尚未存在)

3-)下载MySQL连接器jar文件,并把它下在你的web.xml WEB-INF/lib目录

4-)定义DB瓦尔。是这样的:

<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-)现在让我们创建一个测试类命名的用户,我们使用数据库连接:

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; 
    } 

} 
+0

谢谢你,这是一些很好的帮助 –

+0

@JakobAbfalter,欢迎,很高兴我可以帮助 –