簡體   English   中英

准備的語句主鍵存儲種子1和增量

[英]Prepared Statement Primary Key store seed 1 and increment

好的,所以我剛開始使用derby client啟動JDBC,我對此很陌生。 我將列ID設置為主鍵,並將int作為其數據類型。 但是,我不確定是否應包含myStatement.setString(1, ?); 因為我認為它應該自動遞增,但看起來好像沒有這樣做。

這是我的Grab文件詳細信息:

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
)

如何以一種自動添加列ID值的方式糾正我的PreparedStatement或我的表,以便我可以啟動setString(2, 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.setString(1, integervaluehere) 它不是應該自動增加嗎?

我希望得到任何解釋,因為我最近才剛剛開始學習PreparedStatements的基礎知識。

我嘗試對列進行計數,並嘗試了myStatement.setString() 10和11行,但是由於不匹配,仍然無法使其插入數據。

在此處輸入圖片說明

提前致謝。

您需要明確提及“自動遞增”。 或者,您可以編寫自己的Java代碼來跟蹤每個表的ID,並且每當您要求該方法提供ID時,它將返回lastID + 1。

但是,我認為現在可以使用auto_increment選項。

如果您希望它自動遞增,則需要在列定義中這樣說,而您沒有。

我不知道標題中的“默認1”是什么意思,因為您沒有在問題中提到它,但是您不能使用默認值自動遞增。 這沒有道理。

在您的編輯中,我也不知道“存儲種子1”的含義是什么。

當您具有要依賴的默認值或自動遞增的列時,您根本不會在INSERT語句中提及它,因此無需設置任何位置參數。

首先,將主要標識符列設置為自動遞增。 由於您的查詢已經排除了主鍵,因此您只需更改PreparedStatement索引即可匹配從一個開始的查詢中的參數數量。

由於除了主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.setInt(1, primaryId); ,一旦您將表中的主鍵更改為自動遞增。 但是,如果選擇將主鍵保持為非自動遞增,則必須顯式指定主鍵值,並在查詢中提供參數以插入該數據。

如果您使用的不是MySQL Workbench,那么我強烈建議您使用MySQL Workbench,因為它可以正常工作。 您必須選擇自動增量作為該列的特征。 如果您希望列自動遞增,請在數據庫中創建列時選中“自動遞增”選項,有時寫為AI。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM