2013-07-23 60 views
-1

我有此數據庫表格:參數索引超出範圍(8>參數的數量,這是7)

create table users(
    id int not null auto_increment, 
    fn varchar(30), 
    ln varchar(30), 
    sex char, 
    email varchar(60), 
    country varchar(40), 
    username varchar(30), 
    password varchar(100), 
    primary key(id) 
); 

當運行該代碼,我得到一個錯誤:參數索引超出範圍( 8>參數數量,即7)。我也嘗試更換setString(1,fn),但它不起作用。

try{ 
    String INSERT="INSERT INTO users (fn,ln,,sex,email,country,username,password) VALUES (?,?,?,?,?,?,?)"; 
    PreparedStatement pst=conn.prepareStatement(INSERT); 
    System.out.println("Created prepared statement"); 

    pst.setString(2,"fn"); 
    pst.setString(3,"ln"); 
    pst.setString(4,"sex"); 
    pst.setString(5,"email"); 
    pst.setString(6,"country"); 
    pst.setString(7,"username"); 
    pst.setString(8,"password)"); 
    pst.executeUpdate(); 
} 
+3

您在查詢中提到了7列,但設置了8列的值。 – Veera

+0

請發佈stacktrace! – Reddy

回答

0

您正在傳遞8列和7個變量,計數不匹配。

確保如果此:

String INSERT="INSERT INTO users (fn,ln,,sex,email,country,username,password) VALUES (?,?,?,?,?,?,?)"; 

應該是這樣的:

String INSERT="INSERT INTO users (fn,ln,sex,email,country,username,password) VALUES (?,?,?,?,?,?,?)"; 
+0

謝謝,額外的逗號是錯誤,我現在糾正它正在工作! – sujeet325

+0

沒問題,http://meta.stackexchange.com/questions/5234/how-does-accepting-an-answer-work – mirkobrankovic

4

你有你的查詢額外的逗號和您的列數應該開始從1

String INSERT="INSERT INTO users (fn,ln,sex,email,country,username,password) VALUES (?,?,?,?,?,?,?)"; 
pst.setString(1,"fn"); 
    pst.setString(2,"ln"); 
    pst.setString(3,"sex"); 
    pst.setString(4,"email"); 
    pst.setString(5,"country"); 
    pst.setString(6,"username"); 
    pst.setString(7,"password)"); 
    pst.executeUpdate(); 
+1

嘗試'int i = 0; ps.setString(++ i,「fn」); ps.setString(++ i,「ln」);'。這樣您就不必擔心數字 - 只需正確維護訂單。 – ADTC

0

相對查詢的參數號碼

pst.setString(1,"fn"); 
pst.setString(2,"ln"); 
pst.setString(3,"sex"); 
pst.setString(4,"email"); 
pst.setString(5,"country"); 
pst.setString(6,"username"); 
pst.setString(7,"password)"); 
pst.executeUpdate(); 
0

更正:

String INSERT="INSERT INTO users (fn,ln,sex,email,country,username,password) VALUES (?,?,?,?,?,?,?)"; 

short c = 0; 
    //using a counter variable (short or int) means 
    //no worries about numbering - just maintain the order below 
pst.setString(++c,"fn"); 
pst.setString(++c,"ln"); 
pst.setString(++c,"sex"); 
pst.setString(++c,"email"); 
pst.setString(++c,"country"); 
pst.setString(++c,"username"); 
pst.setString(++c,"password)"); 

注:++c是預先遞增運算符。它將當前值c(對此設置爲c)加1,並使用新值c

相關問題