java连接到sql server2008数据库添加数据显示索引超出范围

importjava.sql.Connection;importjava.sql.DriverManager;importjava.sql.PreparedStateme... import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.Statement;
public class Testadd {
public static void main(String[] args) {
// TODO 自动生成的方法存根
Connection con=null;

try {
Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
con=DriverManager.getConnection("jdbc:sqlserver://127.0.0.1:1433;DatabaseName=testdb3","sa","123");

String sql = "INSERT INTO test users varchar(50)";
PreparedStatement ps=con.prepareStatement(sql);
ps = con.prepareStatement(sql,Statement.RETURN_GENERATED_KEYS);
ps.setString(1,"name");

ps.executeUpdate();
}catch (Exception ex) {
ex.printStackTrace();
}

}
}

com.microsoft.sqlserver.jdbc.SQLServerException: 索引 1 超出范围。
at com.microsoft.sqlserver.jdbc.SQLServerException.makeFromDriverError(SQLServerException.java:170)
at com.microsoft.sqlserver.jdbc.SQLServerPreparedStatement.setterGetParam(SQLServerPreparedStatement.java:698)
at com.microsoft.sqlserver.jdbc.SQLServerPreparedStatement.setValue(SQLServerPreparedStatement.java:707)
at com.microsoft.sqlserver.jdbc.SQLServerPreparedStatement.setString(SQLServerPreparedStatement.java:1015)
at sql.Testadd.main(Testadd.java:21)
展开
 我来答
百度网友090def6
2015-06-06 · TA获得超过2211个赞
知道小有建树答主
回答量:558
采纳率:100%
帮助的人:710万
展开全部

你这段代码错误较多,主要是对数据库操作的


你的目的是想往一张表中插入数据,使用预处理SQL,即PrepareStatement


1. SQL语句错误, 插入表

    String sql = "INSERT INTO 表名(字段1) values(?)";
    PreparedStatement ps = con.prepareStatement(sql,Statement.RETURN_GENERATED_KEYS);  
    ps.setString(1,"name");


2. 错误原因分析

   使用PrepareStatement,结合?占位符号,有几个?符号

   ps.setString(1,"name"); // 1 表示第一个?, 后面的“name”表示?对应的值

   

如果有一张表Student,字段有4个字段: id [int]、name [varchar(50)]、age [int]、email [varchar(50)]

   String sql = "INSERT INTO Student(id, name, age, email ) values(?, ?, ?, ?)";
   PreparedStatement ps = con.prepareStatement(sql,Statement.RETURN_GENERATED_KEYS);  
   ps.setString(1,1); // 对应第1个?,即SQL语句中对应的列 id
   ps.setString(2,"张三"); // 对应第2个?,即SQL语句中对应的列 name
   ps.setString(3,20); // 对应第3个?,即SQL语句中对应的列 age
   ps.setString(4,"test@aaa.com"); // 对应第4个?,即SQL语句中对应的列email

   

   因为索引,即?的顺序号是从1开始的,如使用0 或者 数量不匹配,就会出现

   com.microsoft.sqlserver.jdbc.SQLServerException: 索引 1 超出范围。异常

   

   如果你增加。如

   ps.setString(5,"test@aaa.com"); // 没有5个?,就会出错


  希望回答对你有帮助,希望及时采纳

百度网友3b4b748
2015-06-06 · TA获得超过1059个赞
知道小有建树答主
回答量:760
采纳率:63%
帮助的人:272万
展开全部
不是1 ,是0吧 ps.setString(1,"name");
追问
换0也不行

com.microsoft.sqlserver.jdbc.SQLServerException: 索引 0 超出范围。
追答
对了,你好像 没给 变量吧 “?”
类似 “select * from tb where id =?” ? 这个没有 你那个 ps.setString(0,"name")
有什么用
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式