I am creating a spring boot application using MS SQL server. I have a requirement where I need to initialize USERS table in user_database database using data.sql file placed in /src/main/resources/ folder and rest of the tables should be created automatically in springboot_db database with the help of @Table annotation. Below is the code snippet.
applicaiton.properties file
spring.datasource.platform=mssql
spring.datasource.url=jdbc:sqlserver://localhost;databaseName=springboot_db
spring.datasource.username=sa
spring.datasource.password=einfochips@123
spring.datasource.driver-class-name=com.microsoft.sqlserver.jdbc.SQLServerDriver
spring.jpa.show-sql=true
spring.jpa.hibernate.ddl-auto=create-drop
spring.datasource.initialize=true
data.sql
USE master
IF EXISTS(select name from sys.databases where name='user_database')
DROP DATABASE user_database;
CREATE DATABASE user_database;
USE user_database;
CREATE TABLE tbl_users (
id INTEGER NOT NULL IDENTITY(1,1),
name VARCHAR(25),
email VARCHAR(50),
username VARCHAR(25),
password VARCHAR(225),
gender VARCHAR(1),
contact_number VARCHAR(12),
address VARCHAR(150),
country VARCHAR(20),
newsletter BIT,
framework VARCHAR(500),
skill VARCHAR(500),
role_id INTEGER,
PRIMARY KEY (id)
);
INSERT INTO tbl_users
(name, email, username, password, gender, contact_number, address, country, newsletter, framework, skill, role_id)
VALUES
('Admin User1', '[email protected]', 'admin', '$2a$10$WOf9uuaNfUgqpfXrfK1QiO.scUjxJMA.wENEu4c8GJMbPhFwbxMwu', 'f', 919979294062, 'Ahmedabad', 'India', 0, 'Spring MVC', 'Spring', 1);
AppConfiguration.java (One of the entity file)
@Entity
@Table(name = "tbl_configuration_details")
public class AppConfiguration implements Serializable {
/**
*
*/
private static final long serialVersionUID = 6657691404940352980L;
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
@Column(name = "config_id")
private Integer id;
@Column(name = "schedule_time")
private Integer scheduleTimePeriod;
// other variables and respective getter setters
}
If I am running my application keeping both the approaches separately than its working fine. When I merge both into a single application, it is showing following error.
Caused by: com.microsoft.sqlserver.jdbc.SQLServerException: Invalid object name 'tbl_configuration_details'.
at com.microsoft.sqlserver.jdbc.SQLServerException.makeFromDatabaseError(SQLServerException.java:232) ~[mssql-jdbc-6.1.0.jre7.jar:na]
at com.microsoft.sqlserver.jdbc.SQLServerStatement.getNextResult(SQLServerStatement.java:1672) ~[mssql-jdbc-6.1.0.jre7.jar:na]
at com.microsoft.sqlserver.jdbc.SQLServerPreparedStatement.doExecutePreparedStatement(SQLServerPreparedStatement.java:460) ~[mssql-jdbc-6.1.0.jre7.jar:na]
at com.microsoft.sqlserver.jdbc.SQLServerPreparedStatement$PrepStmtExecCmd.doExecute(SQLServerPreparedStatement.java:405) ~[mssql-jdbc-6.1.0.jre7.jar:na]
at com.microsoft.sqlserver.jdbc.TDSCommand.execute(IOBuffer.java:7535) ~[mssql-jdbc-6.1.0.jre7.jar:na]
at com.microsoft.sqlserver.jdbc.SQLServerConnection.executeCommand(SQLServerConnection.java:2438) ~[mssql-jdbc-6.1.0.jre7.jar:na]
at com.microsoft.sqlserver.jdbc.SQLServerStatement.executeCommand(SQLServerStatement.java:208) ~[mssql-jdbc-6.1.0.jre7.jar:na]
at com.microsoft.sqlserver.jdbc.SQLServerStatement.executeStatement(SQLServerStatement.java:183) ~[mssql-jdbc-6.1.0.jre7.jar:na]
at com.microsoft.sqlserver.jdbc.SQLServerPreparedStatement.executeQuery(SQLServerPreparedStatement.java:317) ~[mssql-jdbc-6.1.0.jre7.jar:na]
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:1.8.0_144]
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) ~[na:1.8.0_144]
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) ~[na:1.8.0_144]
at java.lang.reflect.Method.invoke(Unknown Source) ~[na:1.8.0_144]
at org.apache.tomcat.jdbc.pool.StatementFacade$StatementProxy.invoke(StatementFacade.java:114) ~[tomcat-jdbc-8.5.23.jar:na]
at com.sun.proxy.$Proxy92.executeQuery(Unknown Source) ~[na:na]
at org.hibernate.engine.jdbc.internal.ResultSetReturnImpl.extract(ResultSetReturnImpl.java:70) ~[hibernate-core-5.0.12.Final.jar:5.0.12.Final]
... 94 common frames omitted
Because the Connection currently points to the database containing the stored procedure and the table does not exist in that database, "Invalid Object Name" errors are returned.
com.microsoft.sqlserver.jdbc.SQLServerException: Invalid object name 'tbl_configuration_details'.
You have defined table name as
CREATE TABLE tbl_users
But, in your code
@Table(name = "tbl_configuration_details")
Since, there isn't any object exists with the same name, you will get Invalid object name
exception.
I had same problem and find out that needed put in properties the database name.
Example for Spring Boot:
spring:
datasource:
url: jdbc:sqlserver://localhost:1234;databaseName=DATABASENAMEHERE
username: USER
password: ******
driver-class-name: com.microsoft.sqlserver.jdbc.SQLServerDriver
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With