Statemente update sqlite matlab problem

1 Ansicht (letzte 30 Tage)
Massimo
Massimo am 27 Jun. 2023
Kommentiert: Rik am 28 Jul. 2023
Hello guys, I'm trying to use the command execute to make an update to a sqlite database. I'm on 2022b version, so I can't use sqlupdate command.
If I write this code it works:
statementUpdate = ["UPDATE acquisition_table SET model = '" + app.model + "' WHERE ID = 3 "];
execute(conn,statementUpdate) obviously after having estabilished a connection with my database.
If you notice, in the the statement there is app.model. It is a variable which is updated trhough app designer (model is a property) and so I can write that value modified in my database. I'd like to do the same with ID, which I also have set like a property, but I don't know how to modify that statement. It's probably something related to the position of quotes or the apostrophe, I don't know. I need this because that ID is a filter I use to enter in my database, and it changes when I do some stuffs in my app desinger interface. So having it like a fixed value (WHERE ID = 3 for example) is completely useless for me.
Edit: I forgot to say that statement has been suggested to me, so I have doubt also about the use of + symbol
Thanks guys.

Akzeptierte Antwort

Rik
Rik am 27 Jun. 2023
This seems a case where you want to compose a string from several elements.
You can do this with the string datatype (as you have done here). The benefit is that this will automagically convert numbers to string before concatenating the elements if you use +, while char will be treated as a number if you use +.
Another option is to move to sprintf. That way you have control over the exact format used.
app.model = "some_name";
app.ID = 3;
statementUpdate = "UPDATE acquisition_table SET model = '" + app.model + "' WHERE ID = 3 "
statementUpdate = "UPDATE acquisition_table SET model = 'some_name' WHERE ID = 3 "
statementUpdate = sprintf('UPDATE acquisition_table SET model = ''%s'' WHERE ID = %d',app.model,app.ID)
statementUpdate = 'UPDATE acquisition_table SET model = 'some_name' WHERE ID = 3'
As you can see, both return the same thing, just a different datatype.
One last thing: I thought you should provide the SQLite string datatype with " instead of ' (and that you need to finish every statement with a semicolon). That might cause the underlying problem with this statement.
statementUpdate = sprintf('UPDATE acquisition_table SET model = "%s" WHERE ID = %d;',app.model,app.ID)
  9 Kommentare
Massimo
Massimo am 27 Jul. 2023
You're right.
First of all, I managed to write a statement which the fetch command can execute. I write you it:
sqlquery = ['Select * FROM acquisition_table WHERE Type_of_maneuvers = ''', app.ManeuvValue,''''];
app.ManeuValue it's a property I set on app designer, so that I can update its value if necessary. What I'm trying to do now (and I don't know if it's possible), is to concatenate more infos inside sqlquery statement. What I need is to specify not just one WHERE information, but more than one.
With the UPDATE statement I could write this to concatenate more SET command:
"UPDATE acquisition_table SET mat_dynamics_RAW = '" + app.MatDynamicsRaw + "',mat_dynamics_Translated = '" + app.MatDynamicsTranslated + "' WHERE ID = " + app.filter.Var1;
Unfortunately I'm not able to do the same thing inside my sqlquery I wrote you at the beginning of this anwser.
Thanks @Rik
Rik
Rik am 28 Jul. 2023
This sounds more like a question about SQLite syntax. What is the actual text you want to compose? Does SQLite even support what you want to do?

Melden Sie sich an, um zu kommentieren.

Weitere Antworten (0)

Produkte


Version

R2022b

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by