2012-04-20 3 views
1

Я новичок в Java Server Faces и JavaDB. Я изо всех сил пытаюсь подключиться из-за моей базы данных из-за ошибки, указывающей, что «Схема ROOT» не существует ». Я вытягиваю свои волосы из-за этого, и я знаю, что это должно быть что-то простое. Я не задал имя пользователя или пароль для базы данных «guest_book». База данных существует в рамках схемы APP. Управляемый компонент кодируется следующим образом ..Ошибка JavaDB 'Schema' ROOT 'не существует'

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', '[email protected]', 'Hi!', '10-12-1982'); 

пул соединений называется GuestBookPool и источник данных JDBC/guest_book. Я не устанавливал пароли или имя пользователя для чего-либо, и все это было создано по схеме APP из того, что я понимаю. Любая помощь будет принята с благодарностью!

+0

Как настроен ваш источник данных? –

ответ

-1

Если вы используете JSF, вы можете подключиться к базе данных, создав ApplicationContext в своей папке Web-INF, показанной в проекте.

Создайте одноэлементный боб из желаемого источника данных.

Метод, который вы используете, не является предпочтительным.

Кстати, чтобы помочь вам больше, могу я спросить, какую базу данных вы используете? Oracle, postgres, Access и т. Д.?

+1

Не рекомендуется объявлять источник данных в классе компонентов. – abhi

+0

Как указано в заголовке вопроса, OP использует JavaDB. –

0

Вместо @ManagedBean(name="guestbean"); попробуйте @ManagedBean(name="guestbean", schema="APP"); или что бы ни была ваша схема.