【发布时间】:2013-10-07 00:11:37
【问题描述】:
我正在努力寻找下面的 SqlExcpetion 的原因。我正在使用 Oracle Database 11g Express 和 SqlDeveloper。我浏览了其他帖子,但到目前为止没有任何帮助。
java.sql.SQLException: ORA-00917: missing comma
at oracle.jdbc.driver.T4CTTIoer.processError(T4CTTIoer.java:447)
at oracle.jdbc.driver.T4CTTIoer.processError(T4CTTIoer.java:396)
at oracle.jdbc.driver.T4C8Oall.processError(T4C8Oall.java:951)
at oracle.jdbc.driver.T4CTTIfun.receive(T4CTTIfun.java:513)
at oracle.jdbc.driver.T4CTTIfun.doRPC(T4CTTIfun.java:227)
at oracle.jdbc.driver.T4C8Oall.doOALL(T4C8Oall.java:531)
at oracle.jdbc.driver.T4CStatement.doOall8(T4CStatement.java:195)
at oracle.jdbc.driver.T4CStatement.executeForRows(T4CStatement.java:1029)
at oracle.jdbc.driver.OracleStatement.doExecuteWithTimeout(OracleStatement.java:1336)
at oracle.jdbc.driver.OracleStatement.executeQuery(OracleStatement.java:1498)
at oracle.jdbc.driver.OracleStatementWrapper.executeQuery(OracleStatementWrapper.java:406)
at com.ets.hr.dao.EmployeeDAO.createEmployee(EmployeeDAO.java:30)
at Test.main(Test.java:62)
方法如下:
public void createEmployee(Employee e){
try{
Class.forName(oracleClass);
Connection conn = DriverManager.getConnection(oracleUrl, "hr", "hr");
Statement s = conn.createStatement();
String query = "INSERT INTO employees VALUES(" +
e.getEmployeeId() + ", '" +
e.getFirstName() + "', '" +
e.getLastName() + "', '" +
e.getEmail() + "', '" +
e.getPhoneNumber() + "', " +
e.getHireDate() + ", '" +
e.getJobId() + "', " +
e.getSalary() + ", " +
e.getCommissionPct() + ", " +
e.getManagerId() + ", " +
e.getDepartmentId() + ")";
s.executeQuery(query);//LINE 30 - SqlException Here
System.out.println("Query Executed: Create Employee");
}
catch(SQLException se){
se.printStackTrace();
}
catch(ClassNotFoundException ce){
ce.printStackTrace();
}
}
员工类:
package com.ets.hr.dto;
import java.util.Date;
public class Employee {
//CONSTRUCTORS
public Employee(){}
public Employee(long eId,
String firstName,
String lastName,
String email,
String phoneNumber,
Date hireDate,
String jobId,
double salary,
double commissionPct,
long managerId,
long departmentId){
this.firstName = firstName;
this.lastName = lastName;
this.email = email;
this.phoneNumber = phoneNumber;
this.hireDate = hireDate;
this.jobId = jobId;
this.salary = salary;
this.commissionPct = commissionPct;
this.managerId = managerId;
this.departmentId = departmentId;
}
//instance variables (from HR.EMPLOYEE table)
private long employeeId;
private String firstName;
private String lastName;
private String email;
private String phoneNumber;
private Date hireDate;
private String jobId;
private double salary;
private double commissionPct;
private long managerId;
private long departmentId;
//GETTERS
public long getEmployeeId(){
return this.employeeId;
}
public String getFirstName(){
return this.firstName;
}
public String getLastName(){
return this.lastName;
}
public String getEmail(){
return this.email;
}
public String getPhoneNumber(){
return this.phoneNumber;
}
public Date getHireDate(){
return this.hireDate;
}
public String getJobId(){
return this.jobId;
}
public double getSalary(){
return this.salary;
}
public double getCommissionPct(){
return this.commissionPct;
}
public long getManagerId(){
return this.managerId;
}
public long getDepartmentId(){
return this.departmentId;
}
//SETTERS
public void setEmployeeId(long employeeId){
this.employeeId = employeeId;
}
public void setFirstName(String firstName){
this.firstName = firstName;
}
public void setLastName(String lastName){
this.lastName = lastName;
}
public void setEmail(String email){
this.email = email;
}
public void setPhoneNumber(String phoneNumber){
this.phoneNumber = phoneNumber;
}
public void setHireDate(Date hireDate){
this.hireDate = hireDate;
}
public void setJobId(String jobId){
this.jobId = jobId;
}
public void setSalary(double salary){
this.salary = salary;
}
public void setCommissionPct(double commissionPct){
this.commissionPct = commissionPct;
}
public void setManagerId(long managerId){
this.managerId = managerId;
}
public void setDepartmentId(long departmentId){
this.departmentId = departmentId;
}
public void printEmployee(){
System.out.println("Employee ID: " + this.getEmployeeId());
System.out.println("Employee Name: " + this.getFirstName() + this.getLastName());
System.out.println("Employee Email: " + this.getEmail());
System.out.println("Employee Phone: " + this.getPhoneNumber());
System.out.println("Employee Hire Date: " + this.getHireDate());
System.out.println("Employee Job ID: " + this.getJobId());
System.out.println("Employee Salary: " + this.getSalary());
System.out.println("Employee Commission Pct: " + this.getCommissionPct());
System.out.println("Employee Manager ID: " + this.getManagerId());
System.out.println("Employee Department ID: " + this.getDepartmentId());
}
}
【问题讨论】:
-
在执行查询之前,您是否尝试过查看
query字符串的外观? -
连同查询字符串,发布 CREATE TABLE sql 会很有帮助。
-
首先,你真的不应该在你的 SQL 语句中嵌入文字。这不好的原因有很多。这就是参数的用途。可以进行一次性测试,但不要在生产代码中这样做。您的某个字段中可能有一些与语法相关的字符。
-
Vache,你到底是什么意思?
-
Kevin,我没有 CREATE TABLE 代码 - 我正在使用 SqlDeveloper 附带的示例表。