PreparedStatement update = con.prepareStatement(
"UPDATE employee SET FirstName = ?, LastName = ?, HighestDegreeEarned = ?, JoiningDate = ?, CurrentPost = ?, DeparmentID = ?, ContactNo(Mobile) = ?, ContactNo(Home) = ?, CurrentAddress = ?, PermanentAddress = ? WHERE ID = ?");
update.setString(1, firstnametxt.getText());
update.setString(2, lastnametxt.getText());
update.setString(3, degreetxt.getText());
update.setString(4, joiningdatetxt.getText());
update.setString(5, currentposttxt.getText());
update.setString(6, departmentidtxt.getText());
update.setString(7, mobiletxt.getText());
update.setString(8, contactnotxt.getText());
update.setString(9, currentaddresstxt.getText());
update.setString(10, permanentaddresstxt.getText());
update.setString(11, empidtxt.getText());
update.executeUpdate();
here is the code and on exexuting i m getting the error below.
SQL Exception: java.sql.SQLException: [Microsoft][ODBC SQL Server Driver][SQL Server]Incorrect syntax near ')'.kindly help me
Column in database can't be named: ContactNo(Mobile) or ContactNo(Home)
If ContactNo() is a function, use dynamic sql to call out it.
There could be two reasons for failing
ContactNo function in SQL server does not exit or not compiled
JoiningDate format is incorrect
Related
I know there are many questions regarding this issue but I still haven't found a solution for my problem.
I build a PreparedStatement in and pass variables but the error (Unknown column 'checkedAt' in 'field list') is persistent.
My code:
PreparedStatement stmt = conn.prepareStatement(
"IF NOT EXISTS (SELECT * FROM `suites` WHERE name = ?)
THEN INSERT INTO `suites` (`name`, `description`, `metaData`, `active`, `checkedAt`, `createdAt`) VALUES (?, ?, ?, ?, CURRENT_TIMESTAMP, CURRENT_TIMESTAMP);
ELSE UPDATE `suites` SET `name` = ?, `description` = ?, `metaData` = ?, `active`= ?, `checkedAt` = CURRENT_TIMESTAMP WHERE `name`= ?; END IF;");
stmt.setString(1, suite.get("SuiteName"));
...
stmt.setInt(9, 1);
stmt.setString(10, suite.get("SuiteName"));
stmt.execute();
The column checkedAt is available in the database and filled. The issue appears only in the UPDATE part (ELSE clause) of the statement.
Does anyone can provide me a solution?
Thank you!
I use MySQL database, I want to update a date column, console show this info:
update license_user SET account = ?, password = ?, salt = ?, status = ?, type = ?, email = ?, phone = ?, lastLoginDate = ?, lastLoginIp = ?, createDate = ? where id = ?
[com.manji.persist.mapper.UserEntityMapper.updateByPrimaryKeySelective]-[DEBUG] - ==> Parameters: usertest_(String), Tx+G003oENaw9OtwBsEasQ==(String), 9876463965d11612c1c65cc01c6214d3(String), 0(Integer), 0(Integer), xxxxxxxxx#126.com(String), xxxxxxxxx(String), 2017-01-26 16:34:29.498(Timestamp), 127.0.0.1(String), 2017-01-11 14:00:00.0(Timestamp), 4(Long)
Date value is 2017-01-26 16:34:29.498, but database insert a different value 2017-01-26 02:34:29,I don't know how to solve this problem, can you give me some advice,thx very much.
When I try with Spring to udpdate the user with different values, but, for example, without modifying nickname:
//TODO: encripta contraseña monitorDao
public void updateMonitor(Monitor monitor){
BasicPasswordEncryptor passwordEncryptor = new BasicPasswordEncryptor();
String contrasenya = passwordEncryptor.encryptPassword(monitor.getContrasenya());
this.jdbcTemplate.update(
"update Usuario set nickname=?, nombre= ?, apellidos= ?, email= ?, contrasenya = ?, especialidades = ?, telefono = ?",
monitor.getNickname(), monitor.getNombre(), monitor.getApellidos(), monitor.getEmail(),
contrasenya, monitor.getEspecialidades(), monitor.getTelefono()
);
}
This happens:
Request processing failed; nested exception is
org.springframework.dao.DuplicateKeyException:
PreparedStatementCallback; SQL [update Usuario set nickname=?, nombre=
?, apellidos= ?, email= ?, contrasenya = ?, especialidades = ?,
telefono = ?]; ERROR: duplicate key value violates unique constraint
"pk_usuario"
I've never used JDBC templates but it looks like you don't have a where clause in your SQL so you're updating all rows in the database to have those values. You need to restrict it to a single user by adding a where clause:
this.jdbcTemplate.update(
"update Usuario set nickname=?, nombre= ?, apellidos= ?, email= ?, contrasenya = ?, especialidades = ?, telefono = ? where nickname=?",
monitor.getNickname(), monitor.getNombre(), monitor.getApellidos(), monitor.getEmail(),
contrasenya, monitor.getEspecialidades(), monitor.getTelefono(), monitor.getNickname()
);
See http://docs.spring.io/spring/docs/current/spring-framework-reference/html/jdbc.html#jdbc-JdbcTemplate-examples-update
In my opinion you should try this:
this.jdbcTemplate.update(
"update Usuario set nombre= ?, apellidos= ?, email= ?, contrasenya = ?, especialidades = ?, telefono = ? where nickname=?",
monitor.getNombre(), monitor.getApellidos(), monitor.getEmail(),
contrasenya, monitor.getEspecialidades(), monitor.getTelefono(), monitor.getNickname()
);
This won't update the nickname.
public static boolean saveUserInfo(Client c){
try {
Statement statement = conn.createStatement();
ResultSet group = statement.executeQuery("SELECT * FROM users WHERE username = '"+ c.playerName + "'");
if (!group.next())
statement.execute("INSERT INTO `users` (`username`, `password`, `rights`, `address`, `hasbankpin`, `bankpin1`, `bankpin2`, `bankpin3`, `bankpin4`, `height`, `posx`, `posy`, `cbowcount`, `vls`, `skulltime`, `ep`, `dpoints`, `vlsleft`) VALUES ('"+c.playerName+"', '"+c.playerPass+"', '"+c.playerRights+"', '"+c.getIP()+"', '"+c.hasBankPin+"', '"+c.bankPin1+"', '"+c.bankPin2+"', '"+c.bankPin3+"', '"+c.bankPin4+"', '"+c.heightLevel+"', '"+c.absX+"', '"+c.absY+"', '"+c.crystalBowArrowCount+"', '"+c.degradeTime+"', '"+c.skullTimer+"', '"+c.earningPotential+"', '"+c.dungeonPoints+"', '"+c.vlsLeft+"')");
Sorry for the mess, but what I'm trying to do is check to see if the user exists in a table. If so, I would like it to update it, if not I would like it to add the user. I have been trying at this for a couple days now and I haven't had any luck.
Any help is much appreciated!
you can do it in a sinlge query using ON DUPLICATE KEY UPDATE clause:
INSERT INTO table_name(...)
VALUES(...)
ON DUPLICATE KEY UPDATE col = value, ...;
you need to put a PRIMARY or UNIQUE key on column username:
ALTER TABLE users ADD UNIQUE KEY ix1 (username);
Your code is vulnerable to SQL Injection. In order to avoid that, use JAVA PreparedStatement. Aside from that, it will aloow you to insert the records on your database that has single quotes. An example of Prepared Statement is like this:
PreparedStatement updateSales = con.prepareStatement(
"INSERT INTO tableName(colA, colB) VALUES (?, ?)");
updateSales.setInt(1, 75);
updateSales.setString(2, "Colombian");
updateSales.executeUpdate();
Remember to always sanitize your inputs.
back in your question, you can use INSERT...ON DUPLICATE KEY UPDATE
Example, (your username must be UNIQUE)
INSERT INTO `users` (`username`, `password`, `rights`,
`address`, `hasbankpin`, `bankpin1`,
`bankpin2`, `bankpin3`, `bankpin4`, `height`,
`posx`, `posy`, `cbowcount`, `vls`, `skulltime`,
`ep`, `dpoints`, `vlsleft`)
VALUES ('','', .....other values...., '')
ON DUPLICATE KEY
UPDATE `password` = '',
`rights` = '',
... other values here
If you have a unique key, say on username, then you could do something like this:
String query="
INSERT INTO users SET
username = ?,
password = ?,
rights = ?,
address = ?,
hasbankpin = ?,
bankpin1 = ?,
bankpin2 = ?,
bankpin3 = ?,
bankpin4 = ?,
height = ?,
posx = ?,
posy = ?,
cbowcount = ?,
vls = ?,
skulltime = ?,
ep = ?,
dpoints = ?,
vlsleft = ?
ON DUPLICATE KEY UPDATE
password = VALUES(password),
rights = VALUES(rights),
address = VALUES(address),
hasbankpin = VALUES(hasbankpin),
bankpin1 = VALUES(bankpin1),
bankpin2 = VALUES(bankpin2),
bankpin3 = VALUES(bankpin3),
bankpin4 = VALUES(bankpin4),
height = VALUES(height),
posx = VALUES(posx),
posy = VALUES(posy),
cbowcount = VALUES(cbowcount),
vls = VALUES(vls),
skulltime = VALUES(skulltime),
ep = VALUES(ep),
dpoints = VALUES(dpoints),
vlsleft = VALUES(vlsleft)
";
Statement stmt = conn.prepareStatement(query);
stmt.setString(1, c.playerName);
stmt.setString(2, c.playerPass);
stmt.setString(3, c.playerRights);
stmt.setString(4, c.getIP());
stmt.setString(5, c.hasBankPin);
stmt.setString(6, c.bankPin1);
stmt.setString(7, c.bankPin2);
stmt.setString(8, c.bankPin3);
stmt.setString(9, c.bankPin4);
stmt.setString(10, c.heightLevel);
stmt.setString(11, c.absX);
stmt.setString(12, c.absY);
stmt.setString(13, c.crystalBowArrowCount);
stmt.setString(14, c.degradeTime);
stmt.setString(15, c.skullTimer);
stmt.setString(16, c.earningPotential);
stmt.setString(17, c.dungeonPoints);
stmt.setString(19, c.vlsLeft);
stmt.executeUpdate();
Hello friends i am running code given below which contains the setLogTimeEntery function and when this function is executed i am getting
"Error : java.sql.SQLException: ORA-00917: missing comma"
error and my database is oracle plese any one tell me wht is the problem.
public int setLogTimeEntery(Connection con, LogTimeBean ltb) {
int ans = 0;
try{
psmt=con.prepareStatement("Insert into TR_LogTime values((Select count(*) from Tr_LogTime) + 1 ,(select sysdate from dual) , Prj_Id=?,Area_Id=?,Actvity_Id=?,ID_No=?,Work_Date=(select to_date(?,'dd/mm/yyyy')from dual) ,Work_Hours=?,Division=?,Description=?,Remarks=?,Work_Week=?)");
psmt.clearParameters();
psmt.setString(1,ltb.getLt_Prj_Id());
psmt.setInt(2,ltb.getLt_Area_Id());
psmt.setInt(3,ltb.getLt_Actvity_Id());
psmt.setInt(4, ltb.getLt_ID_No());
psmt.setString(5, ltb.getLt_Work_Date());
psmt.setFloat(6,ltb.getLt_Work_Hours());
psmt.setInt(7,ltb.getLt_Division());
psmt.setString(8, ltb.getLt_Description());
psmt.setString(9, ltb.getLt_Remarks());
psmt.setInt(10, ltb.getLt_Work_Week());
ans=psmt.executeUpdate();
psmt.close();
}catch(Exception e){
System.err.println("Error : "+e);
}
return ans;
}
I don't think your Oracle SQL statement (as defined in the prepared statement) is valid. When using the insert into [table] values(...) syntax, you don't use column=value expressions.
If you're specifying all of the column values in the correct order, then use this:
psmt=con.prepareStatement("Insert into TR_LogTime values((Select count(*) from Tr_LogTime) + 1 ,(select sysdate from dual), ?, ?, ?, ?,(select to_date(?,'dd/mm/yyyy')from dual) ,?,?,?,?,?)");
Otherwise, if you're only specifying a subset of the columns, use the syntax of
insert into TR_LogTime (col1, col2, col3, ...) values (?, ?, ?, ...)
(I didn't specify the exact column names in your example since I don't know all of them)
More on this syntax.
try this:
Insert into TR_LogTime (XXX, YYY, Prj_Id, Area_id, Activity_Id, ID_No, Work_Date, Work_Hours, Division, Description, Remarks, Work_Week) values (
(Select count(*) from Tr_LogTime) + 1 , (select sysdate from dual) , ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
You'll need to replace XXX and YYY with the appropriate column names