This is the code where I’m trying to use the insert query:
int insertItems(String name,double amt,String exp)throws Exception{
Connection con=getConnection();
PreparedStatement ps=con.prepareStatement("insert into itemsList (null,name,amt,expire) values (?,?,?,?);");//when I use the 4?s it displays [Exception in thread "main" java.sql.SQLException: No value specified for parameter 1] and if I use 3?s it shows out of range.
//ps.setInt(1,id);//I declared the id as auto-Increment and primary key
ps.setString(2,name);
ps.setDouble(3,amt);
ps.setString(4,exp);
int n=ps.executeUpdate();
return n;
}
I don’t understand that where I’m going wrong please help me to understand it.
getConnection() is where I created the JDBC driver, driver manager till connection and it is returning the connection object to other methods
I can read data easily but when it comes to exp line its shows exception
Choose Option :
1.Add Item 2.View all Items
3.Place Order 4.NA
5.View Orders 6.Exit
-------------------------------------------------------------------------------------------
1
Choose type of Item :
1.Normal item 2.Food
2
Enter Item name :
dragon
Enter the Price :
70
Enter the Expire date :
12/11
Exception in thread "main" java.sql.SQLException: No value specified for parameter 1
at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:129)
at com.mysql.cj.jdbc.exceptions.SQLExceptionsMapping.translateException(SQLExceptionsMapping.java:122)
at com.mysql.cj.jdbc.ClientPreparedStatement.executeUpdateInternal(ClientPreparedStatement.java:1084)
at com.mysql.cj.jdbc.ClientPreparedStatement.executeUpdateInternal(ClientPreparedStatement.java:1009)
at com.mysql.cj.jdbc.ClientPreparedStatement.executeLargeUpdate(ClientPreparedStatement.java:1320)
at com.mysql.cj.jdbc.ClientPreparedStatement.executeUpdate(ClientPreparedStatement.java:994)
at com.fixitytech.isodb.ItemDAO.insertItems(ItemDAO.java:37)
at com.fixitytech.isodb.ShopdbUI.main(ShopdbUI.java:90)
2
Answers
Don’t pass null in insert query.
You define 4 columns in your statement, one is using an invalid column name
null
. And accordingly you define 4 placeholders, waiting for values to be assigned.But you only supply 3. That‘s the cause for the error.
Solution is to fix the SQL statement and assign values to placeholders at their new position: