java update query for paradox database - java

i'm trying to update paradox table from java but i'm getting an Exception
java.sql.SQLException: [Microsoft][ODBC Paradox Driver] Operation must use an updateable query.
java.sql.SQLException: [Microsoft][ODBC Paradox Driver] Operation must use an updateable query.
java.sql.SQLException: [Microsoft][ODBC Paradox Driver] Operation must use an updateable query.
I'm using this code:
private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {
try {
Connection paradoxCon = paradox.createConnection();
Results res = new Results();
res.getAll();
if (res.allRes.isEmpty()) {
JOptionPane.showMessageDialog(mainPanel, "There are no Finished or Postponed Games!", "Error", JOptionPane.ERROR_MESSAGE);
} else {
int y = res.allRes.size();
for (int x = 0; x < y; x = x + 1) {
try {
if (res.getAll().get(x).Reversed == 0) {
if (res.getAll().get(x).Status.equals("Fin")) {
String sql = "UPDATE Kvote SET _45_d = '" + res.getAll().get(x).HThome + "', _45_g = '" + res.getAll().get(x).HTaway + "', _90_d= '" + res.getAll().get(x).FThome + "', _90_g = '" + res.getAll().get(x).FTaway + "', Ok='Y' WHERE Kolo = '" + res.getAll().get(x).tRound + "' AND Sifra='" + res.getAll().get(x).TID + "'";
PreparedStatement ps = paradoxCon.prepareStatement(sql);
ps.executeUpdate();
}
if (res.getAll().get(x).Status.equals("Post")) {
String sql = "UPDATE Kvote SET _45_d = '" + res.getAll().get(x).HThome + "', _45_g = '" + res.getAll().get(x).HTaway + "', _90_d= '" + res.getAll().get(x).FThome + "', _90_g = '" + res.getAll().get(x).FTaway + "', Ok='O' WHERE Kolo = '" + res.getAll().get(x).tRound + "' AND Sifra='" + res.getAll().get(x).TID + "'";
PreparedStatement ps = paradoxCon.prepareStatement(sql);
ps.executeUpdate();
}
}
if (res.getAll().get(x).Reversed == 1) {
if (res.getAll().get(x).Status.equals("Fin")) {
String sql = "UPDATE Kvote SET _45_d = '" + res.getAll().get(x).HTaway + "', _45_g = '" + res.getAll().get(x).HThome + "', _90_d= '" + res.getAll().get(x).FTaway + "', _90_g = '" + res.getAll().get(x).FThome + "', Ok='Y' WHERE Kolo = '" + res.getAll().get(x).tRound + "' AND Sifra='" + res.getAll().get(x).TID + "'";
PreparedStatement ps = paradoxCon.prepareStatement(sql);
ps.executeUpdate();
}
if (res.getAll().get(x).Status.equals("Post")) {
String sql = "UPDATE Kvote SET _45_d = '" + res.getAll().get(x).HTaway + "', _45_g = '" + res.getAll().get(x).HThome + "', _90_d= '" + res.getAll().get(x).FTaway + "', _90_g = '" + res.getAll().get(x).FThome + "', Ok='O' WHERE Kolo = '" + res.getAll().get(x).tRound + "' AND Sifra='" + res.getAll().get(x).TID + "'";
PreparedStatement ps = paradoxCon.prepareStatement(sql);
ps.executeUpdate();
}
}
} catch (Exception ex) {
System.out.println(ex);
}
}
}
res.getAll().clear();
} catch (ParseException ex) {
Logger.getLogger(AutoResultsImporterView.class.getName()).log(Level.SEVERE, null, ex);
}
}

I Solve the problem using INTERSOLV 3.11 32-BIT ParadoxFile (*.db) driver
I created an System DSN Data Source Using this driver and connect to this Data Source

Related

SQLite JavaFX INSERT Into Syntax error near x

I have a line of code to insert many variables into a database called GoodDB. for some reason I am unable to get it to work and get a syntax error.
I have read multiple threads where my code is 1:1 yet for some reason it still does not work for me
public void submitButton (ActionEvent event) throws IOException{
try {
Connection conn = DriverManager.getConnection("jdbc:sqlite:--Location--");
Statement statement = conn.createStatement();
statement.executeUpdate("INSERT INTO GooDB (Date, UID, prodCode, TableNr, TableTwo, Line, Var, Comment, CommentTwo, Person, Dept, Qty) VALUES '" + dDate.getValue() + "', '" + tfuID.getText() + "', '" +
tfprodCode.getText() + "', '" + tfTableNr.getText() + "', '" + tfLine.getText() + "', '" + tfcommentTwo.getText() + "', '" + taComm.getText() + "', '" + cbPerson.getValue() + "', '" + cbTableTwo.getValue() + "', '" +
cbDept.getValue() + "', '" + cbQty.getValue() + "'");
Alert alert = new Alert(Alert.AlertType.ERROR);
alert.setTitle("u good");
alert.setHeaderText("u good");
alert.setContentText(null);
alert.showAndWait();
} catch (SQLException e){
Alert alert = new Alert(Alert.AlertType.ERROR);
alert.setTitle("DB Error");
alert.setHeaderText("DB Connection Failed");
alert.setContentText(e.getMessage());
alert.showAndWait();
}
}
Upon entering data I get Error message described in "catch" showing
[SQLITE_ERROR] SQL error or missing database (near "'null'": syntax error)

I am not able to do execute update in the while loop

String re = "inCart";
String sre = "Sold";
resultSetP = statement.executeQuery("select * from shoppingcart where proStatus='" + re + "' and customerID='" + this.customerID + "'");
while (resultSet.next()) {
int ed = statement.executeUpdate("update shoppingcart set proStatus='" + sre + "' where proStatus='" + re + "' and customerID='" + this.customerID + "'");
}
resultSetS = statement.executeQuery("select * from shoppingcart where serStatus='" + re + "' and customerID='" + this.customerID + "'");
while (resultSet.next()) {
int efd = statement.executeUpdate("update shoppingcart set serStatus='" + sre + "' where serStatus='" + re + "' and customerID='" + this.customerID + "'");
}
In your code you write inside the loop conditions resultSet.next() maybe it should be resultSetS.next() or resultSetP.next()
Try using resultSet.hasNext() instead of resultSet.next(). So effectively your code should be like the below while iterating through the resultset
while (resultset.hasNext()) {
resultset.next();
//Your query
}

Imp code modification required

Following code needs modification can we use constants files if yes then how we can segregate string in separate files so that loop continues then performance is not impacted
for (int j = 0; j < subconfigListRLC.size(); j++) {
StringBuffer sqlQuery = new StringBuffer();
test = (SubConfigurationDetailsObject) subconfigListRLC.get(j);
if (test.getFlag().equalsIgnoreCase("T")) {
sqlQuery = sqlQuery.append("update SUB_CONFIG set TSTED = "
+ test.getSubConfigurationIndexNo() + " , Q_SUB_INDX = 0 "
+ "where BASE_ENG_KEY = '" + test.getBaseEngineKey() + "' "
+ "AND MODEL_YEAR = '" + modelYear + "' "
+ "AND RLHP_LVW = '" + test.getRoadLoadHorsepowerValue() + "' "
+ "AND LVW_TEST_WT_WO_CONT = '" + test.getEtwValue() + "' "
+ "AND INERTIA_WT_CLASS = '" + test.getInertiaWeightClassNo() + "' "
+ "AND TEST_GROUP_ID = " + test.getTestGroupId() + " "
+ "AND ENGINE_CODE = '" + test.getEngineCode() + "' "
+ "AND AXLE_RATIO = '" + test.getAxleRatioValue() + "'");
} else if (test.getFlag().equalsIgnoreCase("U")) {
sqlQuery = sqlQuery.append("update SUB_CONFIG set Q_SUB_INDX = "
+ test.getSubConfigurationIndexNo() + " "
+ "where BASE_ENG_KEY = '" + test.getBaseEngineKey() + "' "
+ "AND MODEL_YEAR = '" + modelYear + "' "
+ "AND RLHP_LVW = '" + test.getRoadLoadHorsepowerValue() + "' "
+ "AND LVW_TEST_WT_WO_CONT = '" + test.getEtwValue() + "' "
+ "AND INERTIA_WT_CLASS = '" + test.getInertiaWeightClassNo() + "' "
+ "AND TEST_GROUP_ID = " + test.getTestGroupId() + " "
+ "AND ENGINE_CODE = '" + test.getEngineCode() + "' "
+ "AND AXLE_RATIO = '" + test.getAxleRatioValue() + "'");
}
//System.out.println("Query----------->"+sqlQuery.toString());
processor.getUpdateAccessor().executeUpdateSql(sqlQuery.toString());
}
Use a Java PreparedStatement in order to build the query. You can then store the query string for the PreparedStatement in a properties file. Read the two possible query strings into variables before entering the loop (in fact you may want to build both PreparedStatements before entering the loop - depending on whether you always use them both). You can then call clearParamaters, then set your new parameters, execute, repeat.
As you asked for the exact details, something like this. Search for javadocs on PreparedStatement. Javadocs are always worth reading.
String sql = "update SUB_CONFIG set TSTED = ? , Q_SUB_INDX = ? " +
"where BASE_ENG_KEY = ? " +
"AND MODEL_YEAR = ? " +
"AND RLHP_LVW = ? " +
"AND LVW_TEST_WT_WO_CONT = ? " +
"AND INERTIA_WT_CLASS = ? " +
"AND TEST_GROUP_ID = ? " +
"AND ENGINE_CODE = ? " +
"AND AXLE_RATIO = ?");
PreparedStatement statement = connection.createPreparedStatement(sql);
for (SubConfigurationDetailsObject test: subconfigListRLC) {
if (test.getFlag().equalsIgnoreCase("T")) {
statement.setIntParam(1, test.getSubConfigurationIndexNo());
statement.setIntParam(2, 0);
} else if (test.getFlag().equalsIgnoreCase("U")) {
statement.setIntParam(1, 0);
statement.setIntParam(2, test.getSubConfigurationIndexNo());
} else {
continue;
}
statement.set...Param(3, ...);
...
statement.executeUpdate();
}
You may probably only need one PreparedStatement, and the result is indeed faster.
BTW. better use StringBuilder instead of StringBuffer.

intermittent "java.sql.SQLException: org.apache.commons.dbcp.DelegatingStatement is closed."

I had been facing this exception from very long time.
My tomcat/java web application having very large no of database transaction.
I am using MSSQL server as my back end and using DBCP, database connection pooling in tomcat.
I have following practice of using this.
DB pooling in my servlet.
//Skeleton
dopost
{
//geting connection using JNDI
//Creating statement object
// calling method of execution of Business Logic
}
finally
{
//closing all DB resorces
}
Business Logic
{
//do all Database transaction
}
//Original code spinet
public class Frm_mst_operation_II extends HttpServlet
{
protected void doPost(HttpServletRequest httpservletrequest, HttpServletResponse httpservletresponse) throws ServletException, IOException
{
try
{
String option=httpservletrequest.getParameter("option");
InitialContext initialcontext = new InitialContext();
if(initialcontext == null)
throw new Exception("Boom - No Context");
InitialContext initialcontext2 = new InitialContext();
if(initialcontext2 == null)
throw new Exception("Boom - No Context");
Context context = (Context)initialcontext.lookup("java:/comp/env");
Context context2 = (Context)initialcontext.lookup("java:/comp/env");
DataSource datasource = (DataSource)context.lookup(RuntimeConf.abi_database);
DataSource datasource_sql = (DataSource)context2.lookup(RuntimeConf.abi_sql_database);
if(datasource != null)
{
if(dbcon == null)
{
dbcon = datasource.getConnection();
}
else
{
if(!dbcon.isClosed())
{
dbcon.close();
}
dbcon = datasource.getConnection();
}
if(dbcon_sql == null)
{
dbcon_sql = datasource_sql.getConnection();
}
else
{
if(!dbcon_sql.isClosed())
{
dbcon_sql.close();
}
dbcon_sql = datasource_sql.getConnection();
}
if(dbcon_sql != null)
{
dbcon.setAutoCommit(false);
dbcon_sql.setAutoCommit(false);
stmt_ora1 = dbcon.createStatement();
stmt = dbcon_sql.createStatement();
if(option.equals("Insert_cge_Data"))
{
Insert_CGE_Data(httpservletrequest);
}
dbcon.close();
dbcon_sql.close();
dbcon=null;
dbcon_sql=null;
}
}
else
{
System.out.println("Data Source Not Found - Error : Exception In Frm_mst_operation_II");
}
httpservletresponse.sendRedirect(url);
}
catch(Exception exception)
{
System.out.println("Exception In Frm_mst_operation_II And Exception Is :: "+exception);
exception.printStackTrace();
}
finally
{
if(rset != null)
{
try
{
rset.close();
}
catch(SQLException e)
{
System.out.println("Exception in Frm_mst_operation_II "+e);
}
rset = null;
}
if(stmt != null)
{
try
{
stmt.close();
}
catch(SQLException e)
{
System.out.println("Exception in Frm_mst_operation_II "+e);
}
stmt = null;
}
if(stmt_ora1 != null)
{
try
{
stmt_ora1.close();
}
catch(SQLException e)
{
System.out.println("Exception in Frm_mst_operation_II "+e);
}
stmt_ora1 = null;
}
if(dbcon != null)
{
try
{
dbcon.close();
}
catch(SQLException e)
{
System.out.println("Exception in Frm_mst_operation_II "+e);
}
dbcon = null;
}
if(dbcon_sql != null)
{
try
{
dbcon_sql.close();
}
catch(SQLException e)
{
System.out.println("Exception in Frm_mst_operation_II "+e);
}
dbcon_sql = null;
}
}
}//End Of doPost() Method ...
public void Insert_CGE_Data(HttpServletRequest request) throws IOException,
ServletException, SQLException {
try
{
query_th_ora = " INSERT INTO PR_OPR_TH " + " ( "
+ " COMP_N, YR_N, TRN_N, TRN_C, "
+ " TRN_D, MCH_N, SHIFT_N, STRT_TIME, "
+ " END_TIME, PROD_N, BODY_N, "
+ " CAR_N , FIRE_N, CREATED_UID," + " CREATED_D , " +
// " UPDATED_UID, UPDATED_D" +
" TRNTYP , TOT_QTY " + " , RSN_N ) " + " VALUES " + " ( "
+ " '" + comp_cd + "', '" + yr_n + "', '" + TRN_N
+ "', 'CGE" + TRN_C + "', " + " to_date('" + trn_d
+ "', 'dd/mm/yyyy') , '" + mch_nm
+ "', '" + shift + "', to_date('" + in_time
+ "', 'dd/mm/yyyy hh:mi:ss AM'), " + " to_date('"
+ out_time + "', 'dd/mm/yyyy hh:mi:ss AM'), '" + prod_n
+ "', '" + body_n + "', " + " '" + car_n + "', '"
+ fire_n + "', '" + user_cd + "',to_date('"+ora_sysdt+"', 'dd/mm/yyyy HH24:MI:SS'), " + " 'CGE', '" + tot_qty + "'"
+ " , '"+RSN_N+"' ) " + " ";
//SQL MD20230302
query_th_sql = " INSERT INTO PROD.PR_OPR_TH " + " ( "
+ " COMP_N, YR_N, TRN_N, TRN_C, "
+ " TRN_D, MCH_N, SHIFT_N, STRT_TIME, "
+ " END_TIME, PROD_N, BODY_N, "
+ " CAR_N , FIRE_N, CREATED_UID," + " CREATED_D , " +
// " UPDATED_UID, UPDATED_D" +
" TRNTYP , TOT_QTY " + " , RSN_N, FLAG) " + " VALUES " + " ( "
+ " '" + comp_cd + "', '" + yr_n + "', '" + TRN_N
+ "', 'CGE" + TRN_C + "', " + " PROD.to_date('" + trn_d
+ "', 'dd/mm/yyyy') , '" + mch_nm
+ "', '" + shift + "', PROD.to_date('" + in_time
+ "', 'dd/mm/yyyy hh:mi:ss AM'), " + " PROD.to_date('"
+ out_time + "', 'dd/mm/yyyy hh:mi:ss AM'), '" + prod_n
+ "', '" + body_n + "', " + " '" + car_n + "', '"
+ fire_n + "', '" + user_cd + "', PROD.to_date('" + sysdt
+ "', 'dd/mm/yyyy hh:mi:ss AM'), " + " 'CGE', '" + tot_qty + "'"
+ " , '"+RSN_N_SQL+"', 'Y' ) " ;
//ORA
query_td_ora = "INSERT INTO PR_OPR_TD" + " ("
+ " COMP_N, YR_N, TRN_N, TRN_C, "
+ " TRN_D, TRNDTL_N, SRNO_C, QTY, SMPL_RMK, "
+ " OPR_N, OPRGRP_N, NXT_OPR, REJTYP_N, "
+ " REJ_QTY, STATUS, SRNO_N, DECK_NO, "
+ " CREATED_UID , CREATED_D , " +
" TRNTYP, PREV_OPR, GOOD_QTY, PREV_STATUS, "
+ " BODY_N, BARCODE_NO, PREVTRNDTL_N, PROD_N, " + "" +
" glzsrno_c, good_wt, exttrn_d," +
" glztrn_d, unit_wt, layer_n, zones_n, SOTTRN_D, ASSBLD_STS" +
" )" + " VALUES"
+ "(" + " '" + comp_cd + "', '" + yr_n + "', '" + TRN_N
+ "', 'CGE" + TRN_C + "', " + " to_date('" + trn_d
+ "', 'dd/mm/yyyy'), '" + trndtl_n + "', '" + srno_c + "', '" + accept_qty
+ "', '" + barcode_no + "', " + " '" + OPR_N + "', '"
+ OPRGRP_N + "', '" + NXT_OPR + "', '" + REJTYP_N + "', "
+ " '" + rej_qty + "', '" + status + "', '" + srno_n
+ "', '" + deck_no + "', " + " '" + user_cd
+ "', to_date('"+ora_sysdt+"', 'dd/mm/yyyy HH24:MI:SS'), "
+ " 'CGE', '" + opr_n + "', '" + good_qty + "', '"
+ PREV_STATUS + "', " + " '" + body_n + "', '"
+ barcode_no + "', '" + TRNDTL_N + "'" + " , '"+prod_n+"', " +
" '" + glzsrno_c + "', '" + good_wt + "', to_date('" + exttrn_d + "' , 'dd/mm/yyyy'), " +
" to_date('" + glztrn_d + "' , 'dd/mm/yyyy'), '" + unit_wt + "', '" + layer_n + "', " +
" '" + zones_n + "', to_date('"+SOTTRN_D+"', 'dd/mm/yyyy'),'"+ASSBLD_STS+"' " +
")";
//SQL MD20230302
query_td_sql = "INSERT INTO PROD.PR_OPR_TD" + " ("
+ " COMP_N, YR_N, TRN_N, TRN_C, "
+ " TRN_D, TRNDTL_N, SRNO_C, QTY, SMPL_RMK, "
+ " OPR_N, OPRGRP_N, NXT_OPR, REJTYP_N, "
+ " REJ_QTY, STATUS, SRNO_N, DECK_NO, "
+ " CREATED_UID , CREATED_D , " +
" TRNTYP, PREV_OPR, GOOD_QTY, PREV_STATUS, "
+ " BODY_N, BARCODE_NO, PREVTRNDTL_N, PROD_N, " + "" +
" glzsrno_c, good_wt, exttrn_d," +
" glztrn_d, unit_wt, layer_n, zones_n, FLAG, SOTTRN_D, ASSBLD_STS" +
" )" + " VALUES"
+ "(" + " '" + comp_cd + "', '" + yr_n + "', '" + TRN_N
+ "', 'CGE" + TRN_C + "', " + " PROD.to_date('" + trn_d
+ "', 'dd/mm/yyyy'), '" + trndtl_n + "', '" + srno_c + "', '" + accept_qty
+ "', '" + barcode_no + "', " + " '" + OPR_N + "', '"
+ OPRGRP_N + "', '" + NXT_OPR + "', '" + REJTYP_N_SQL + "', "
+ " '" + rej_qty + "', '" + status + "', '" + srno_n
+ "', '" + deck_no + "', " + " '" + user_cd
+ "', PROD.to_date('" + sysdt + "', 'dd/mm/yyyy hh:mi:ss AM'), "
+ " 'CGE', '" + opr_n + "', '" + good_qty + "', '"
+ PREV_STATUS + "', " + " '" + body_n + "', '"
+ barcode_no + "', '" + TRNDTL_N + "'" + " , '"+prod_n+"', " +
" '" + glzsrno_c + "', '" + good_wt + "', PROD.to_date('" + exttrn_d + "' , 'dd/mm/yyyy'), " +
" PROD.to_date('" + glztrn_d + "' , 'dd/mm/yyyy'), '" + unit_wt + "', '" + layer_n + "', " +
" '" + zones_n + "', 'Y', PROD.to_date('"+SOTTRN_D+"', 'dd/mm/yyyy'), '"+ASSBLD_STS+"' "
+")";
//System.out.println(query_th_ora);
stmt_ora1.executeUpdate(query_th_ora);
//System.out.println(query_th_sql);
stmt3.executeUpdate(query_th_sql);
//System.out.println(query_td_ora);
stmt_ora1.executeUpdate(query_td_ora);
//System.out.println(query_td_sql);
stmt3.executeUpdate(query_td_sql);
}
catch (SQLException e)
{
dbcon.rollback();
dbcon_sql.rollback();
e.printStackTrace();
}
catch (Exception e)
{
dbcon.rollback();
dbcon_sql.rollback();
e.printStackTrace();
}
}
}
And some where in between Business Logic method I always got that exception.
And strange thing is that I always got this exception in my servlets only never in Databean.
I know the why this exception is raise but I don't understand the cause.
And second thing My tomcat service get also hang intermittently.
become completely unresponsive, need to restr in order to run the application again.
So request to all of u to please respond my query/que/issue and help me to get out of this mud bag. One thing to mention is my client machines runs on WiFi network, does it has any effect on the raising this issue?
Thanks a lot in advance
you can get this exception when try to use the PreparedStatemen while its close
This id detailed in this question

General error when trying to insert data into database

I am trying to insert data into a database and once again I cant seem to get to the bottom as to why I am getting a general error.
Any advice as to how to overcome this problem.
Class.forName(driverName);
connection = DriverManager.getConnection(SourceURL, user, password);
int rowAdded;
Object typeId = comboKeys.getSelectedItem();
String typeIdString = typeId.toString();
int typeIdInt = Integer.parseInt(typeIdString);
String animalIDString = txtAnimalID.getText();
int animalID = Integer.parseInt(animalIDString);
System.out.println(animalID);
String name = txtName.getText();
Statement statement = connection.createStatement();
String queryString = "INSERT INTO Animal (animalID, name, typeIDForeign) VALUES (" + animalID + ", '" + name + "', '" + typeIdInt + "')";
rowAdded = statement.executeUpdate(queryString);
connection.close();
Kind regards
Arian
Error
You have typeIdInt as Integer, however in the sql query, you are stating it as string (because you surround it with single quotes)
Solution
String queryString = "INSERT INTO Animal (animalID, name, typeIDForeign) VALUES (" + animalID + ", '" + name + "', '" + typeIdInt + "')";
should be :
String queryString = "INSERT INTO Animal (animalID, name, typeIDForeign) VALUES (" + animalID + ", '" + name + "', " + typeIdInt + ")";
Look at " + typeIdInt + ". You have '" + typeIdInt + "'
Good Luck!!!

Categories

Resources