1

私はJavaServerFacesとJavaDBを初めて使用します。「スキーマ'ROOT'が存在しません」というエラーが原因で、データベースが原因で接続に苦労しています。私はこれの上に髪を引っ張っています、そしてそれは何か単純なものでなければならないことを私は知っています。データベース「guest_book」のユーザー名またはパスワードを設定しませんでした。データベースはAPPスキーマの下に存在します。管理対象Beanは次のようにコード化されます。

    package com.jsf;

/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import javax.annotation.Resource;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;
import javax.sql.DataSource;
import javax.sql.rowset.CachedRowSet;

/**
 *
 * @author pctdeveloper7
 */
@ManagedBean(name="guestbean")
@SessionScoped
public class GuestBookBean {

private String date;
private String fname;
private String lname;
private String email;
private String message;

@Resource( name="jdbc/guest_book" )
DataSource ds;

/**
 * Creates a new instance of NewJSFManagedBean
 */
public GuestBookBean() {

}

public String getDate() {
    return date;
}

public void setDate(String date) {
    this.date = date;
}

public String getEmail() {
    return email;
}

public void setEmail(String email) {
    this.email = email;
}

public String getMessage() {
    return message;
}

public void setMessage(String message) {
    this.message = message;
}

public String getFname() {
    return fname;
}

public void setFname(String fname) {
    this.fname = fname;
}

public String getLname() {
    return lname;
}

public void setLname(String lname) {
    this.lname = lname;
}



//return a resultset of entries
public ResultSet getEntries() throws SQLException{
    //Check if was injected by the server
    if(ds == null)
        throw new SQLException("Unable to obtain datsource");

    //get connection from datapool
    Connection conn = ds.getConnection("root","root");

    //check if connection was successful
    if(conn==null)
        throw new SQLException("Unable to connect to DataSource");



    try{

        //Create a prepared statement to insert a new address book entry
        PreparedStatement getMessages = conn.prepareStatement("Select * " +
                "FROM MESSAGES ORDER BY lname, fname");
        CachedRowSet rowset= new com.sun.rowset.CachedRowSetImpl();
        rowset.populate(getMessages.executeQuery());
        return rowset;
    } finally{
        conn.close(); //return connection to pool
    }
}//End getEntries

//Save a new guestbook message
public String save() throws SQLException{

    //Check if was injected by the server
    if(ds == null)
        throw new SQLException("Unable to obtain datsource");

    //get connection from datapool
    Connection conn = ds.getConnection();

    //check if connection was successful
    if(conn==null)
        throw new SQLException("Unable to connect to DataSource");

    try{
        //create a preparedStatement to insert a new guestbook entry
        PreparedStatement insertEntry = conn.prepareStatement("INSERT INTO"+
                "messages values( ?, ?, ?, ?, ?)");
        //define prepared statements arguements
        insertEntry.setString(1, fname);
        insertEntry.setString(2, lname);
        insertEntry.setString(3, email);
        insertEntry.setString(4, message);
        insertEntry.setString(5, date);

        insertEntry.executeUpdate();// insert the new entry
        return "index"; //go back to the index page

    }finally{
        conn.close();//return connection to the pool
    }
}//END Save()

}

データベースの作成に使用されるSQLは次のとおりです。

    create table messages
(
    fname varchar(25),
    lname varchar(35),
    email varchar(50),
    message varchar(300),
    "DATE" varchar(11)
);

Insert into messages
values('Jared', 'Rainey', 'jared.rainey.it@gmail.com', 'Hi!', '10-12-1982');

接続プールの名前はGuestBookPoolで、データソースはjdbc/guest_bookです。パスワードやユーザー名は何も設定していません。すべて、私が理解していることからAPPスキーマの下で作成されました。どんな助けでも大歓迎です!

4

2 に答える 2

0

@ManagedBean(name="guestbean"); 試し@ManagedBean(name="guestbean", schema="APP");たり、スキーマが何であれ代わりに。

于 2012-05-02T22:51:43.600 に答える
-1

JSF を使用している場合は、プロジェクトに表示されている Web-INF フォルダーに ApplicationContext を作成することで、データベースに接続できます。

目的のデータソースのシングルトン Bean を作成します。

使用している方法は、推奨される方法ではありません。

ところで、さらに参考にするために、どのデータベースを使用しているかお尋ねしてもよろしいですか? Oracle、postgres、Access など?

于 2012-04-20T05:32:11.803 に答える