从控制台到数据库Java.sql.sqlexception的Java jdbc记录:

从控制台到数据库Java.sql.sqlexception的Java jdbc记录:,java,jdbc,Java,Jdbc,从用户处获取并插入到数据库中但给出错误的值的代码 “java.sql.SQLException:列位置'45'超出范围。此结果集的列数为'2'。” 当用户输入45作为编号时,代码将其作为列编号,即2 必须更改哪些内容,使number成为列id中的文字表有两列id和Name 封装关系数据库; 导入java.sql.Connection; 导入java.sql.DriverManager; 导入java.sql.PreparedStatement; 导入java.sql.SQLException;

从用户处获取并插入到数据库中但给出错误的值的代码

“java.sql.SQLException:列位置'45'超出范围。此结果集的列数为'2'。”

当用户输入45作为编号时,代码将其作为列编号,即2 必须更改哪些内容,使number成为列id中的文字表有两列id和Name

封装关系数据库;
导入java.sql.Connection;
导入java.sql.DriverManager;
导入java.sql.PreparedStatement;
导入java.sql.SQLException;
导入java.util.Scanner;
类Jdbcfrnd{
公共静态void main(字符串[]args)引发SQLException{
String drv=“org.apache.derby.jdbc.ClientDriver”;
String url=“jdbc:derby://localhost:1527/Oracle;create=true;“;
字符串user=“Android”;
字符串password=“java”;
连接myConn=null;
PreparedStatement myStmt=null;
连接dbConnection=null;
扫描器=空;
试一试{
//0.从命令行读取用户输入:姓、名和电子邮件
扫描仪=新扫描仪(System.in);
扫描仪sc=新的扫描仪(System.in);
System.out.print(“输入数字1:”);
INTA;
a=sc.nextInt();
System.out.print(“输入您的姓名:”);
String firstName=scanner.nextLine();
//System.out.print(“输入您的电子邮件:”);
//字符串email=scanner.nextLine();
//1.获取到数据库的连接
myConn=DriverManager.getConnection(url、用户、密码);
//2.创建一个语句
String sql=“插入到良好状态”
+“(ID,名称)“+”值(?,)”;
myStmt=myConn.prepareStatement(sql);
//设置参数值
myStmt.setString(a,firstName);
//设置字符串(ID,“Android”);
//3.执行SQL查询
myStmt.executeUpdate();
System.out.println(“插入完成”);
}捕获(异常exc){
exc.printStackTrace();
}最后{
如果(myStmt!=null){
myStmt.close();
}
如果(myConn!=null){
myConn.close();
}
如果(扫描器!=null){
scanner.close();
}
}
}
}
java.sql.SQLException:列位置“45”超出范围。此结果集的列数为“2”

正如您所提到的,当用户输入45作为编号时,代码将其作为列编号,即2。现在,输入指定为列位置的相同输入

int a;
a = sc.nextInt();
...
...
myStmt.setString(a , firstName);
请注意,的第一个参数是
parameterIndex
,您对它的值有误解。相反,你应该

myStmt.setInt(1, a);
myStmt.setString(2, firstName);
当用户输入45作为编号时,代码将其作为列编号,即2

这没有道理。正如错误所说,您的代码将列号设为45

列位置“45”超出范围

尝试为要设置的列创建单独的变量

myStmt = myConn.prepareStatement(sql);
int col = 1;

Scanner sc = new Scanner(System.in);
System.out.print("Enter number 1: ");
int a= sc.nextInt();
myStmt.setInt(col++, a);

System.out.print("Enter your Name: ");
String firstName = sc.nextLine();
myStmt.setString(col++ , firstName);

我需要做哪些更改,以便用户可以输入数据库中的编号和名称感谢您现在可以工作,而您仍然可以将csv文件中的记录添加到数据库中,因为有很多记录,thanks@foursystems有很多方法可以实现。我建议你自己研究这个话题,这符合你的要求。编写一些代码,并返回给我们您的具体问题(如果有)。祝您一切顺利:-)@foursystems确保您阅读了此@MahendraKapadne。不建议共享第三方链接,它们明天可能会被破坏,您的评论/回答将毫无用处。如果你有不同的答案。然后,请继续并将其作为答案发布谢谢,是否可以将csv文件中的记录添加到数据库中,因为有很多记录,thanks@foursystems是的,这是可能的。写一些代码就可以了。@foursystems我没有将数据加载到Derby数据库的经验。MySQL、Postgres、Mongo等都有特定于它们的导入工具。