Java JDBC-如何更新日期为-1的记录
我有两个表和两列,用于在SQL数据库中存储应用程序设置。我的问题是如何通过将dCreateTime值更改为负1天加上调用其中的userID=atest211来更新记录。我的代码似乎不起作用 我的代码:Java JDBC-如何更新日期为-1的记录,java,sql,jdbc,sql-update,prepared-statement,Java,Sql,Jdbc,Sql Update,Prepared Statement,我有两个表和两列,用于在SQL数据库中存储应用程序设置。我的问题是如何通过将dCreateTime值更改为负1天加上调用其中的userID=atest211来更新记录。我的代码似乎不起作用 我的代码: public void getEmployeesFromDataBase() { try { String query = "update a set a.dCreateTime=a.dCreateTime-1 from tbet a, tuser b wh
public void getEmployeesFromDataBase() {
try {
String query = "update a set a.dCreateTime=a.dCreateTime-1 from tbet a, tuser b where a.iUserKey= b.iUserKey and b.sUserid = 'atest211' and a.dCreateTime> GETDATE()-5";
statement = connection.createStatement();
rs = statement.executeQuery(query);
while (rs.next()) {
int EmpId = rs.getInt("iUserKey");
String EmpName = rs.getString("sUserid");
System.out.println(EmpId + "\t" + EmpName + "\t");
}
} catch (SQLException ex) {
ex.printStackTrace();
}
}
我更新的代码,仍然不能正常工作
public void updateTableData() {
PreparedStatement pstmt = null;
try {
pstmt = connection.prepareStatement("update a set a.dCreateTime=a.dCreateTime-1 from tbet a, tuser b where a.iUserKey= b.iUserKey and b.sUserid = 'atest211' and a.dCreateTime> GETDATE()-5");
pstmt.setString(1, "dCreateTime");
pstmt.setString(2, "atest211");
// To execute update query.
pstmt.executeUpdate();
// Printing all records of user table after updating record.
String query = "select * from tbet";
// Get the contents of user table from DB
ResultSet res = statement.executeQuery(query);
// Print the result untill all the records are printed
// res.next() returns true if there is any next record else returns
// false
while (res.next()) {
System.out.println(String.format("%s - %s - %s - %s ", res.getString(1), res.getString(2),
res.getString(3), res.getString(4)));
}
} catch (Exception e) {
e.printStackTrace();
}
你需要更新。。。参加设置其中语法:
String query = "update a join b on a.iUserKey= b.iUserKey set a.dCreateTime=a.dCreateTime-1 where b.sUserid = 'atest211' and a.dCreateTime> GETDATE()-5";
接下来,您必须使用statement.executequery;而不是使用executeQueryquery。
该方法不返回resultset
您还应该阅读有关SQL注入和使用准备好的语句的内容。您需要更新。。。参加设置其中语法:
String query = "update a join b on a.iUserKey= b.iUserKey set a.dCreateTime=a.dCreateTime-1 where b.sUserid = 'atest211' and a.dCreateTime> GETDATE()-5";
接下来,您必须使用statement.executequery;而不是使用executeQueryquery。
该方法不返回resultset
此外,您还应该阅读有关SQL注入和使用准备好的语句的内容。您使用的是带有更新的结果集,这是不可能的。
另外,在while循环中,基本上是从数据库中获取值,而不是更新它们
如果您想更新值,我建议您使用PreparedStatement
如果希望代码正常工作,请尝试在查询中使用SELECT而不是UPDATE
String query = "SELECT a.dCreateTime FROM tbet a, tuser b WHERE a.iUserKey= b.iUserKey and b.sUserid = 'atest211' and a.dCreateTime> GETDATE()-5";
编辑:
如果要使用PreparedStatement,请尝试以下方法
// create the preparedstatement
PreparedStatement ps = conn.prepareStatement(
"UPDATE yourTable SET title = ?, author = ? WHERE id = ?");
ps.setString(1,title);
ps.setString(2,author);
ps.setInt(3,id);
//execute the upate
ps.executeUpdate();
ps.close();
您正在将结果集与更新一起使用,这是不可能的。
另外,在while循环中,基本上是从数据库中获取值,而不是更新它们
如果您想更新值,我建议您使用PreparedStatement
如果希望代码正常工作,请尝试在查询中使用SELECT而不是UPDATE
String query = "SELECT a.dCreateTime FROM tbet a, tuser b WHERE a.iUserKey= b.iUserKey and b.sUserid = 'atest211' and a.dCreateTime> GETDATE()-5";
编辑:
如果要使用PreparedStatement,请尝试以下方法
// create the preparedstatement
PreparedStatement ps = conn.prepareStatement(
"UPDATE yourTable SET title = ?, author = ? WHERE id = ?");
ps.setString(1,title);
ps.setString(2,author);
ps.setInt(3,id);
//execute the upate
ps.executeUpdate();
ps.close();
要归功于@OldMcDonald,因为我修改了代码,它正在工作。不幸的是,在尝试检索记录以检查记录是否已更新时,select语句中出现了一些错误,遇到错误:java.lang.NullPointerException。它通过添加statement=connection.createStatement解决了错误 代码如下:
public void updateTableData() {
PreparedStatement pstmt = null;
try {
//create calendar date -1 day
Calendar cal = Calendar.getInstance();
cal.add(Calendar.DATE, -1);
// preparing query to update record In db.
pstmt = connection.prepareStatement("update a set a.dCreateTime= ? from tbet a, tuser b where a.iUserKey= b.iUserKey and b.sUserid = ? and a.dCreateTime> GETDATE()-5");
// Set name value which you wants to update.
pstmt.setDate(1, new java.sql.Date(cal.getTime().getTime()));
// Set id of record which you wants to update.
pstmt.setString(2, "atest211");
// To execute update query.
pstmt.executeUpdate();
// Printing all records of user table after updating record.
String query = "select * from tbet where iUserKey=53298 ORDER BY tbet.dCreateTime desc";
statement = connection.createStatement();
// Get the contents of user table from DB
ResultSet res = statement.executeQuery(query);
// Print the result untill all the records are printed
// res.next() returns true if there is any next record else returns
// false
while (res.next()) {
System.out.println(String.format("%s - %s - %s - %s ", res.getString(1), res.getString(2),
res.getString(3), res.getString(4)));
}
} catch (Exception e) {
e.printStackTrace();
}
要归功于@OldMcDonald,因为我修改了代码,它正在工作。不幸的是,在尝试检索记录以检查记录是否已更新时,select语句中出现了一些错误,遇到错误:java.lang.NullPointerException。它通过添加statement=connection.createStatement解决了错误 代码如下:
public void updateTableData() {
PreparedStatement pstmt = null;
try {
//create calendar date -1 day
Calendar cal = Calendar.getInstance();
cal.add(Calendar.DATE, -1);
// preparing query to update record In db.
pstmt = connection.prepareStatement("update a set a.dCreateTime= ? from tbet a, tuser b where a.iUserKey= b.iUserKey and b.sUserid = ? and a.dCreateTime> GETDATE()-5");
// Set name value which you wants to update.
pstmt.setDate(1, new java.sql.Date(cal.getTime().getTime()));
// Set id of record which you wants to update.
pstmt.setString(2, "atest211");
// To execute update query.
pstmt.executeUpdate();
// Printing all records of user table after updating record.
String query = "select * from tbet where iUserKey=53298 ORDER BY tbet.dCreateTime desc";
statement = connection.createStatement();
// Get the contents of user table from DB
ResultSet res = statement.executeQuery(query);
// Print the result untill all the records are printed
// res.next() returns true if there is any next record else returns
// false
while (res.next()) {
System.out.println(String.format("%s - %s - %s - %s ", res.getString(1), res.getString(2),
res.getString(3), res.getString(4)));
}
} catch (Exception e) {
e.printStackTrace();
}
为什么使用selenium标签?@Jens因为我在做更新记录的自动化部分,但你的问题与selenium无关,你在使用哪个DBMS?标准SQL不允许在update语句的from子句中列出多个表。为什么使用selenium标记?@Jens,因为我正在为update Record执行自动化部分,但您的问题与selenium无关,您使用的是哪种DBMS?标准SQL不允许在update语句的from子句中列出多个表。请尝试使用PreparedStatements,这样就不能使用ResultSet进行更新。阅读官方文件以了解更多信息:我对准备好的声明做了一些研究,但我不知道如何做,对此有何想法?谢谢你,我已经编辑了我的文章,包括一份准备好的声明。嗨,请看一下我的编辑部分。我已经修改了代码,但仍然不起作用。请尝试使用PreparedStatements,这样您就无法使用ResultSet进行更新。阅读官方文件以了解更多信息:我对准备好的声明做了一些研究,但我不知道如何做,对此有何想法?谢谢你,我已经编辑了我的文章,包括一份准备好的声明。嗨,请看一下我的编辑部分。我已经修改了代码,但仍然不起作用。