2014-10-24 2 views
1
public ResultSet runQuery(String cmd, String table, String[] keys, String[] values,   String[] whereKeys, String[] whereValues, int limitStart, int limitCount) throws Exception 
{ 
    PreparedStatement stmt; 

    if(!(cmd.equals("INSERT") || cmd.equals("SELECT") || cmd.equals("UPDATE") || cmd.equals("DELETE"))) 
    { 
     throw new Exception("CMD UNSUPPORTED! CMD must be INSERT, SELECT, UPDATE, or DELETE."); 
    } 

    String sql = ""; 
    if(cmd.equals("INSERT")) 
    { 
     //Build Insert statement 
     sql += "INSERT INTO "+table+" ("; 

     for(int i = 0; i < keys.length; i++) 
     { 
      sql += ""+keys[i]+""; 
      if(i!=keys.length-1) 
       sql+=","; 
     } 

     sql += ") VALUES("; 

     for(int i = 0; i < values.length; i++) 
     { 
      sql += "'?'"; //This line seems to be causing trouble for me... 
      if(i!=values.length-1) 
       sql+=","; 
     } 

     sql += ")"; 

    } 

컨텍스트 : 나는 클래스 프로젝트에서 작업 중이며 데이터베이스 팀에 배정되었습니다. 필자는 MySQL에 대한 경험이 거의 없으며 MySQL 및 Java에 대한 많은 경험이 있다고 주장하는 사람과 파트너 관계를 맺었습니다. 삽입, 선택, 업데이트 및 삭제에 대해 작성한 함수입니다. 이러한 함수 중 하나를 사용하여 만든 모든 함수에는 오류가 있었으며이 원래의 runQuery 함수를 수정해야합니다. 내가 작업하려고 시도한 가장 중요한 것은 "삽입"명령입니다. 나는 사용자, 관리자 또는 클래스 (대학 수업과 같은)를 만들고 적절한 정보 (이름, userNames, 암호, tableID)를 삽입 할 수 있어야합니다. 내가 오류를 생성하지 않고 사용자 또는 관리자를 만들 수 있습니다,하지만 난 클래스를 만들 때, 나는 오류 얻을 : http://imgur.com/g99Ru6hMySQL, Java 및 테이블에 삽입

public boolean createUser(String first, String last, String user, String pass) 
{ 
    String[] keys = {"FName", "LName", "UName", "Password"}; 
    String[] vals = {first, last, user, pass}; 

    try 
    { 
     runQuery("INSERT", "Users", keys, vals, null, null, 0, 30); 
    }catch(Exception e) 
    { 
     e.printStackTrace(); 
     System.out.println(e); 
     return false; 
    } 

    return true; 
} 



public boolean createClass(int classID, String name, int adminID, String institution, String meetTimes) 
{ 
    String[] keys = {"ClassID", "ClassName", "AdminID", "Institution", "MeetTimes"}; 
    String[] vals = {Integer.toString(classID), name, Integer.toString(adminID), institution, meetTimes}; 

    try 
    { 
     runQuery("INSERT", "Classes", keys, vals, null, null, 0, 30); 
    }catch(Exception e) 
    { 
     e.printStackTrace(); 
     System.out.println(e); 
     return false; 
    } 

    return true; 
} 

TL을, DR : 나는 테이블에 새로운 '클래스'를 삽입하는 데 문제가 오전 오류가 다시 runQuery 함수와 관련 있다고 생각하십시오. 이 문제에 대해서는 필자가 생각하지 않기 때문에 지금 runQuery 함수의 나머지는 생략했지만 241 행 전체를 추가 할 수 있습니다. 이 상황과 관련하여 온라인에서 볼 수있는 내용을 토대로 preparedStatements는 정보를 입력하는 훨씬 쉬운 방법입니다.

도와 주셔서 감사합니다.

답변

0

링크 된 이미지에서 스택 추적으로 누군가가 인수가있는 명령문을 실행하려고합니까? 장소 소유자. SQL 엔진은 ClassID에 대한 인수가 '?'라고 불평합니다. 그것은해야한다 ? '아닌가?' 수치는 ''을 필요로하지 않기 때문에. 하지만 이상한 사실은 쿼리에서 ClassID 인수를 발견 할 수 없다는 것입니다.

+0

나는 라인이 어디에? 문제가있는 것으로 표시된 경우 구문은 다음과 같아야합니다. sql + = "?"; 또는 sql + =?; – jawsh

+0

해당 유형이 VARCHAR 등의 문자열 인 경우 '?'여야합니다. 그것의 숫자면?. 너를 대체 할 때 그렇게 생각해? 변수의 값으로 잘 정의 된 SQL 명령이 나오게됩니다. – Oncaphillis

+0

그렇다면 입력 데이터 형식을 어떻게 다르게 처리 할 수 ​​있습니까? 나는 이것이 일반적인 문제라고 생각합니다. 다소 단순한 해결책을 가지고 있습니다 ... – jawsh

관련 문제