2016-07-16 22 views
5

Tôi đang cố gắng sử dụng hsqldb-2.3.4 để kết nối từ ứng dụng Mùa xuân.Người dùng cơ sở dữ liệu HSQL thiếu đặc quyền hoặc đối tượng không tìm thấy lỗi

Tôi tạo ra cơ sở dữ liệu sử dụng các chi tiết sau đây

Type : HSQL Database Engine Standalone 
Driver: org.hsqldb.jdbcDriver 
URL: jdbc:hsqldb:file:mydb 
UserName: SA 
Password: SA 

Tôi tạo ra một bảng tên ALBUM dưới "MYDB" schema

Trong file cấu hình mùa xuân:

<bean id="jdbcTemplate" 
    class="org.springframework.jdbc.core.namedparam.NamedParameterJdbcTemplate"> 
    <constructor-arg ref="dbcpDataSource" /> 
</bean> 

<bean id="dbcpDataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource"> 
    <property name="driverClassName" value="org.hsqldb.jdbcDriver" /> 
    <property name="url" value="jdbc:hsqldb:file:mydb" /> 
    <property name="username" value="SA" /> 
    <property name="password" value="SA" /> 
</bean> 

Và trong bộ điều khiển lò xo của tôi Tôi đang làm jdbcTemplate.query("SELECT * FROM MYDB.ALBUM", new AlbumRowMapper());

Và Nó mang lại cho tôi ngoại lệ:

org.springframework.web.util.NestedServletException: Request processing failed; nested exception is org.springframework.jdbc.BadSqlGrammarException: PreparedStatementCallback; bad SQL grammar [SELECT * FROM MYDB.ALBUM]; nested exception is java.sql.SQLSyntaxErrorException: user lacks privilege or object not found: ALBUM 
org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:982) 
org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:861) 
javax.servlet.http.HttpServlet.service(HttpServlet.java:622) 
org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:846) 
javax.servlet.http.HttpServlet.service(HttpServlet.java:729) 
org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52) 

Nếu tôi thực hiện cùng một truy vấn thông qua biên tập SQL của HSQLDB nó thực hiện tốt. Bạn có thể giúp tôi với điều này không.

+0

tốt hơn nếu bạn có thể chia sẻ kịch bản SQL của bạn mà tạo ra MYDB. CHỌN * TỪ ALBUM thay vì CHỌN * TỪ MYDB.ALBUM. Sự cố có thể xảy ra với tên người dùng và mật khẩu. Theo mặc định, mật khẩu trống với tên người dùng là "sa", không phân biệt chữ hoa chữ thường. – Azim

Trả lời

3

user lacks privilege or object not found có thể có nhiều nguyên nhân, rõ ràng nhất là bạn đang truy cập vào bảng không tồn tại. Một lý do ít rõ ràng hơn là, khi bạn chạy mã của bạn, kết nối đến một URL cơ sở dữ liệu tệp thực sự có thể tạo một DB. Kịch bản bạn đang gặp phải có thể là bạn đã thiết lập một DB bằng cách sử dụng Trình quản lý cơ sở dữ liệu HSQL, thêm các bảng và các hàng, nhưng nó không phải là trường hợp cụ thể mà mã Java của bạn đang sử dụng. Bạn có thể muốn kiểm tra xem bạn không có nhiều bản sao của những tệp này: mydb.log, mydb.lck, mydb.properties, v.v. trong không gian làm việc của bạn. Trong trường hợp mã Java của bạn đã tạo các tệp đó, vị trí phụ thuộc vào cách bạn chạy chương trình của mình. Trong một dự án Maven chạy bên trong Netbeans ví dụ, các tệp được lưu trữ cùng với tệp pom.xml.

+0

Tôi đã sử dụng PGSQL và chạy thử nghiệm với HSQL. Tôi đã thử nghiệm một dịch vụ nhưng một dịch vụ khác vẫn được kết nối với cơ sở dữ liệu PGSQL. Đây là những gì gây ra lỗi cho tôi: Có PGSQL chạy trong khi cố gắng kiểm tra dịch vụ với HSQL. Sau khi tôi dừng phiên bản PGSQL, lỗi đã biến mất. – DraganescuValentin

0

Tôi gặp lỗi user lacks privilege or object not found trong khi cố gắng tạo bảng trong cơ sở dữ liệu trong bộ nhớ trống. Tôi đã sử dụng spring.datasource.schema và vấn đề là tôi đã bỏ lỡ dấu chấm phẩy trong tệp SQL của mình sau khi "TẠO TẠO" -Statement (được theo sau bởi "CREATE INDEX").

1

Nếu bạn đã thử tất cả các câu trả lời khác về câu hỏi này, thì rất có khả năng bạn đang gặp phải sự cố về độ nhạy.

HSQLDB phân biệt chữ hoa chữ thường theo mặc định. Nếu bạn không chỉ định dấu ngoặc kép xung quanh tên của lược đồ hoặc cột hoặc bảng, thì theo mặc định nó sẽ chuyển đổi thành chữ hoa. Nếu đối tượng của bạn đã được tạo bằng chữ hoa, thì bạn sẽ gặp may. Nếu nó là chữ thường, thì bạn sẽ phải bao quanh tên đối tượng của bạn với dấu ngoặc kép.

Ví dụ:

CREATE MEMORY TABLE "t1"("product_id" INTEGER NOT NULL) 

Để chọn từ bảng này, bạn sẽ phải sử dụng các truy vấn sau đây

select "product_id" from "t1" 
+0

CREATE TABLE DATA_LATEST_BY ( \t DATASRC \t \t VARCHAR (5) \t NOT NULL, \t DATE_LATEST \t VARCHAR (10) NOT NULL \t ); Tôi đang sử dụng kịch bản trên nhưng tôi vẫn gặp vấn đề tương tự – sambatha

Các vấn đề liên quan