2012-03-12 152 views
0

使用数据库相对较新,出于某种原因,我无法获得此“执行”的功能。数据库查询问题

statment2.execute("insert into table Value (" + int + "," + date + "," + int + ",'" + string + "')"); 

我得到的错误是“缺少逗号”。日期仅在该特定字段中指定为日期。

我将它设置如下

Date date = new Date(); 
date.setMonth(month); 
date.setYear(year); 
date.setDate(weekStart); //weekStart is always monday 

我需要只使用普通的旧日期或date.toString?我打算使用日历,但我不知道如何使用日历对象设置数据库日期。我没有看到“gety/m/d”方法。

那么,问题是我的查询还是我不正确地使用Date对象来设置数据库中的日期?

编辑:

试过响应,得到了不正确的格式 - 预产期了号码。 试过

sqlDate.valueOf(dateString I created) 
sqlDate.toString() 
sqlDate 

使用preparedStatement不会解决这个问题吗?我意识到这应该是更好的安全原因。

+3

几件事 - 1)取决于数据库,每个数据库将处理这不同。查看他们的文档。 2)您应该研究JDBC准备语句,而不是随时创建自己的SQL - 最终避免出现这些类型的问题。 – 2012-03-12 18:51:01

回答

2

首先,您应该使用PreparedStatement在查询中插入值。这有很多优点,包括避免SQL Injection问题。如果你使用PreparedStatement,你将避免你现在看到的错误。您使用PreparedStatement的代码会是这样的:

Connection conn = null; 
    PreparedStatement pstmt = null; 
    try { 
     conn = getConnection(); 
     String query = "insert into table (column1,column2,column3,column4) values(?, ?, ?,?)"; 

     pstmt = conn.prepareStatement(query); 
     pstmt.setInt(1, 1); 
     pstmt.setDate(2, sqlDate); 
     pstmt.setInt(3, 3); 
     pstmt.setString(3, "test"); 
     pstmt.executeUpdate(); 
    } catch (Exception e) { 
     //log the error messages log.error(e,e); 
     //throw the actual exception upstream 
    } finally { 
     pstmt.close(); 
     conn.close(); 
    } 

我不确定您的意思是“DB”日期。如果您是SQL的Date对象之后,你可以这样一个java.util.Date对象转换为java.sql.Date对象:

java.util.Date date = new java.util.Date(); 
java.sql.Date sqlDate = new java.sql.Date(date.getTime()); 
+0

嗯,得到不正确的格式预期日期得到数字。 – cphilpot 2012-03-12 19:03:05

+0

我是否应该将字符串查询=“准确地插入到表(column1,column2,column3,column4)值(?,?,?,?)中或将column1替换为它的字面名?对于混淆,抱歉。 (即将开始) – cphilpot 2012-03-12 19:09:54

+0

@cphilpot - 用实际名称替换column1它不是PreparedStatement的一部分标准SQL – CoolBeans 2012-03-12 19:11:50