Java 准备好的语句主键存储种子1和增量

Java 准备好的语句主键存储种子1和增量,java,swing,jdbc,prepared-statement,Java,Swing,Jdbc,Prepared Statement,好的,我刚刚用derby客户端启动了JDBC,我对它有点陌生。 我将列ID设置为主键,int作为其数据类型。但是,我不确定是否应该包含myStatement.setString?;因为我认为它应该自动递增,但看起来它没有这样做 以下是我的抓取文件详细信息: create table "ADMIN1".STUDENTPERSONALDETAILS ( ID INTEGER not null primary key, STUDENTID VARCHAR(10) not null, LASTNAME

好的,我刚刚用derby客户端启动了JDBC,我对它有点陌生。 我将列ID设置为主键,int作为其数据类型。但是,我不确定是否应该包含myStatement.setString?;因为我认为它应该自动递增,但看起来它没有这样做

以下是我的抓取文件详细信息:

create table "ADMIN1".STUDENTPERSONALDETAILS
(
ID INTEGER not null primary key,
STUDENTID VARCHAR(10) not null,
LASTNAME VARCHAR(50) not null,
FIRSTNAME VARCHAR(50) not null,
MIDDLENAME VARCHAR(50) not null,
PLACEOFBIRTH VARCHAR(200) not null,
DOB VARCHAR(50) not null,
GENDER VARCHAR(4) not null,
CIVILSTATUS VARCHAR(7) not null,
RELIGION VARCHAR(15) not null,
NATIONALITY VARCHAR(20) not null
)
如何更正PreparedStatement或表,以便自动为列ID添加值,以便启动setString2、studentID并避免出现列数与提供的列数不匹配的错误

这是我的密码:

addButton.addActionListener(new ActionListener () {
        @Override
        public void actionPerformed(ActionEvent e) {
            try {
                String myDbUrl = "jdbc:derby://localhost:1527/Enrollment"; //stores url to string
                String userName = "admin1";
                String Password = "admin1";
                    Connection myDBConnection = DriverManager.getConnection(myDbUrl, userName, Password);
                String myQuery = "INSERT INTO STUDENTPERSONALDETAILS"
                        + "(STUDENTID,LASTNAME,FIRSTNAME,MIDDLENAME,PLACEOFBIRTH,DOB,GENDER,CIVILSTATUS,RELIGION,NATIONALITY) "
                        + "VALUES(?,?,?,?,?,?,?,?,?,?) ";

                String adminissionNo ;
                String studentID = tfStudentId.getText().toString();
                String lastName = tfLastName.getText().toString();
                String firstName = tfFirstName.getText().toString();
                String middleName = tfMiddleName.getText().toString();
                String placeOfBirth = tfPob.getText().toString();
                String dateOfBirth = listDOB.getSelectedItem().toString();
                String gender = listGender.getSelectedItem().toString();
                String civilStatus = listCivilStatus.getSelectedItem().toString();
                String religion = listReligion.getSelectedItem().toString();
                String nationality = listNationality.getSelectedItem().toString();

                PreparedStatement myStatement = myDBConnection.prepareStatement(myQuery);

                    myStatement.setString(2, lastName);
                    myStatement.setString(3, firstName);
                    myStatement.setString(4, middleName);
                    myStatement.setString(5, placeOfBirth);
                    myStatement.setString(6, dateOfBirth);
                    myStatement.setString(7, gender);
                    myStatement.setString(8, civilStatus);
                    myStatement.setString(9, religion);
                    myStatement.setString(10, nationality);

                boolean insertResult = myStatement.execute();
                if(insertResult == true)
                    JOptionPane.showMessageDialog(null, "Successfully Added Information");
                else
                    JOptionPane.showMessageDialog(null, "Encountered an error while inserting data");
            }
            catch(SQLException ex) {
                JOptionPane.showMessageDialog(null, ex.toString());
            }
        }
  });  
主键是否需要包含myStatement.setString1、integervaluehere?它不是应该自动递增吗

如果有任何解释,我将不胜感激,因为我最近才开始学习准备报表的基础知识

我尝试计数列,尝试了myStatement.setString的10行和11行,但由于不匹配,仍然无法让它插入数据


提前感谢。

您需要明确提到“自动增量”。 或者,您可以编写自己的java代码来跟踪每个表的Id,每当您要求该方法提供Id时,它都将返回lastID+1


但是,我认为现在您可以使用自动增量选项。

您需要明确提到“自动增量”。 或者,您可以编写自己的java代码来跟踪每个表的Id,每当您要求该方法提供Id时,它都将返回lastID+1


但是,我认为现在可以使用auto_increment选项。

如果您希望它自动递增,您需要在列定义中这样说,但您没有

我不知道标题中的“默认值1”是什么意思,因为您在问题中没有提到,但您不能有默认值和自动递增。这没有道理

在您的编辑中,我也不知道“存储种子1”是什么意思


如果有一个列具有要依赖的默认值或自动递增,则在INSERT语句中根本不提及该列,因此不需要设置位置参数。

如果希望该列自动递增,则需要在列定义中这样说,而您没有这样做

我不知道标题中的“默认值1”是什么意思,因为您在问题中没有提到,但您不能有默认值和自动递增。这没有道理

在您的编辑中,我也不知道“存储种子1”是什么意思


如果有一个列具有要依赖的默认值或autoincrement,则在INSERT语句中根本不提及该列,因此没有要设置的位置参数。

首先,将主标识符列设置为autoincrement。因为您的查询已经排除了主键,所以您只需更改索引以匹配查询中的参数数量

由于除了主ID列之外还有10列,PreparedStatement可能如下所示:

PreparedStatement myStatement = myDBConnection.prepareStatement(myQuery);
myStatement.setString(1, studentId);
myStatement.setString(2, lastName);
myStatement.setString(3, firstName);
myStatement.setString(4, middleName);
myStatement.setString(5, placeOfBirth);
myStatement.setString(6, dateOfBirth);
myStatement.setString(7, gender);
myStatement.setString(8, civilStatus);
myStatement.setString(9, religion);
myStatement.setString(10, nationality);

请注意,您不需要指令myStatement.setInt1,primaryId;,将表中的主键更改为自动递增后。但是,如果选择将主键保留为非自动递增,则必须明确指定主键值并在查询中提供参数以插入该数据。

首先,将主标识符列设置为自动递增。因为您的查询已经排除了主键,所以您只需更改索引以匹配查询中的参数数量

由于除了主ID列之外还有10列,PreparedStatement可能如下所示:

PreparedStatement myStatement = myDBConnection.prepareStatement(myQuery);
myStatement.setString(1, studentId);
myStatement.setString(2, lastName);
myStatement.setString(3, firstName);
myStatement.setString(4, middleName);
myStatement.setString(5, placeOfBirth);
myStatement.setString(6, dateOfBirth);
myStatement.setString(7, gender);
myStatement.setString(8, civilStatus);
myStatement.setString(9, religion);
myStatement.setString(10, nationality);

请注意,您不需要指令myStatement.setInt1,primaryId;,将表中的主键更改为自动递增后。但是,如果您选择将主键保留为非自动递增,则必须显式指定主键值,并在查询中提供一个参数以插入该数据。

如果您使用的是MySQL Workbench,如果不是,我强烈推荐,因为它可以正常工作。必须选择“自动增量”作为该列的特征。如果希望列自动递增,在数据库中创建列时,请选中选项auto increment,有时写为AI

如果您使用的是MySQL Workbench,如果您不使用,我强烈推荐,因为它可以正常工作。必须选择“自动增量”作为该列的特征。如果希望列自动递增,在数据库中创建列时,请选中选项auto increment,有时写为AI

我不确定我是否应该包括我的陈述。setString1,?-不,insert语句根本不需要studentid字段。我不确定是否应该包括myStatement。setString,?-不,insert语句“或者您可以编写自己的Java代码”完全不需要studentid字段
这是一个糟糕的建议。自动增量需要在服务器上进行。没有理由在一个语句可以完成的地方编写两个语句,也没有理由在两个方向上发送数据。“或者您可以编写自己的Java代码”是一个糟糕的建议。自动增量需要在服务器上进行。没有理由在一个语句可以执行的地方编写两个语句,也没有理由向两个方向发送数据。非顺序。无论使用何种工具,他都需要指定autoincrement,并且“通常在创建列时”不应该这样做。您只能在每个表的一列上执行此操作。关于MySQL Workbench的句子仍然无关紧要。@EJP我对“一般”部分表示歉意。我最终以一种误导的方式构建了这个句子。此外,我只是指出这是另一种选择。如果他在数据库中指定了这个属性,他就不再需要在代码中这样做,因为数据库列现在具有这个属性。没有必要记下这个评论。你不知道是谁记下了这个答案,但是关于MySQL Workbench的部分仍然是不相关的。非sequitur。无论使用何种工具,他都需要指定autoincrement,并且“通常在创建列时”不应该这样做。您只能在每个表的一列上执行此操作。关于MySQL Workbench的句子仍然无关紧要。@EJP我对“一般”部分表示歉意。我最终以一种误导的方式构建了这个句子。此外,我只是指出这是另一种选择。如果他在数据库中指定了这个属性,他就不再需要在代码中这样做,因为数据库列现在具有这个属性。没有必要记下这条评论。你不知道是谁记下了这个答案,但是关于MySQL Workbench的部分仍然无关紧要。谢谢。它正在工作。我必须添加生成的始终作为标识,如创建表TablenameID INTEGER NOT NULL生成的始终作为标识,。。。。。有没有其他方法可以使它自动递增,而不是将生成的始终作为它的任何较短版本的标识?谢谢。你有没有像每个人和他的狗在这里说的那样考虑过自动增量?谢谢。它正在工作。我必须添加生成的始终作为标识,如创建表TablenameID INTEGER NOT NULL生成的始终作为标识,。。。。。有没有其他方法可以使它自动递增,而不是将生成的始终作为它的任何较短版本的标识?谢谢。你有没有像每个人和他的狗在这里说的那样考虑过自动增量?