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) 展开
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) 展开
2个回答
展开全部
你这段代码错误较多,主要是对数据库操作的
你的目的是想往一张表中插入数据,使用预处理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个?,就会出错
希望回答对你有帮助,希望及时采纳
展开全部
不是1 ,是0吧 ps.setString(1,"name");
追问
换0也不行
com.microsoft.sqlserver.jdbc.SQLServerException: 索引 0 超出范围。
追答
对了,你好像 没给 变量吧 “?”
类似 “select * from tb where id =?” ? 这个没有 你那个 ps.setString(0,"name")
有什么用
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询
广告 您可能关注的内容 |