只为开端,了解如何建立在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;
}
}
是的,你仍然可以使用PhpMyAdmin。只需单独安装。在同一台机器上运行2个Web服务器并不禁止(只在不同的端口上运行,但这只不过是显而易见的)。更重要的是,你可以使用其中一个(通常是HTTPD)作为另一个(通常是Tomcat)的代理。这还有其他的好处,例如,有维护页面的可能性。其余的,最好找一个讨论论坛。这不能有一个现在和将来都可以接受的单一答案(这就是像Stack Exchange这样的Q&A网站的全部内容)。 – BalusC
数据库层与你的应用程序体系结构有关,而不是JSF本身,它必须与视图层绑定。我的意思是,对于JSF应该无关紧要地使用MySql或Postgre。您正在寻找可能的架构原型设计和依赖注入工具(请参阅Spring或CDI),它将帮助您构建图层。 –