Ich habe einige Probleme beim Abrufen des nächsten Datensatzes in meiner SQLite-Datenbank. Ich habe ausprobiert, um eine neue ArrayList und Instanz eines Mitarbeiters (eine Klasse mit Getters/Setter) jedoch habe ich noch Probleme. Ich habe die letzten eineinhalb Tage im Internet gesucht, um dieses Problem zu lösen. Ich habe versucht, mit if(rs.next)/while(rs.next)
jedoch nur while
scheint zu arbeiten. Ich habe Online geschaut und folgten mehrere Tutorials aber stoßen die Frage SQLITE TYPE_FORWARD_ONLY.
ich umgesetzt haben:Java/JDBC/Swing - Probleme beim Abrufen des nächsten Datensatzes
ResultSet.TYPE_SCROLL_SENSITIVE,
ResultSet.CONCUR_UPDATABLE
Aber noch kein Glück, so entschied ich mich einen Iterator/Zähler als ID in meiner SQLite-Datenbank ist einzigartig hinzuzufügen. Das Problem scheint jedoch zu sein, dass der Iterator/Zähler nicht inkrementiert wird, wenn jedoch der Wert manuell gesetzt wird, d. H. 2, erhalte ich den zweiten Datensatz innerhalb der Datenbank und so weiter.
nextEmployee.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
// TODO Auto-generated method stub
Connection connection = null;
PreparedStatement pst = null;
Statement statement = null;
ResultSet rs = null;
int i = 1;
try {
Class.forName("org.sqlite.JDBC");
connection = DriverManager.getConnection("jdbc:sqlite:employeeDatabase.sqlite");
connection.setAutoCommit(false);
String sql = "SELECT ID, Name, Gender, DOB, Address, Postcode, NIN, JobTitle, StartDate, Salary, Email from employees WHERE ID= " +(i);
pst = connection.prepareStatement(sql);
rs = pst.executeQuery();
for (i = 1; i <= 4; i++){
while (rs.next()){
String id = rs.getString(1);
String name = rs.getString(2);
String gender = rs.getString(3);
String dob = rs.getString(4);
String Address = rs.getString(5);
String Postcode = rs.getString(6);
String NIN = rs.getString(7);
String JobTitle = rs.getString(8);
String StartDate = rs.getString(9);
String Salary = rs.getString(10);
String email = rs.getString(11);
idTextField.setText(id);
nameTextField.setText(name);
genderTextField.setText(gender);
dobTextField.setText(dob);
addressTextField.setText(Address);
postcodeTextField.setText(Postcode);
ninTextField.setText(NIN);
jobtitleTextField.setText(JobTitle);
startdateTextField.setText(StartDate);
salaryTextField.setText(Salary);
emailTextField.setText(email);
// i++;
connection.commit();
JOptionPane.showMessageDialog(null, "Employee has been found");
}
}
rs.close();
pst.close();
connection.close();
}
catch (Exception e1) {
JOptionPane.showMessageDialog(null, "No more records exist");
}
}});
Ich habe gerade keine Ideen mehr. Dies ist das letzte Puzzleteil, das ich erfolgreich erstellt/einfügen, löschen, suchen, aktualisieren implementiert habe. Kann mir jemand sagen, warum dieser Iterator/Zähler nicht erhöht wird?
Vielen Dank.
EDIT -
Mitarbeiter Klasse
public class Employee extends Person {
private int id;
private float salary;
private String startDate;
private String title;
private String email;
public int getid(){
return id;
}
public void setid(int id){
this.id = id;
}
public float getsalary(){
return salary;
}
public void setsalary(float salary){
this.salary = salary;
}
public String getstartDate(){
return startDate;
}
public void setstartDate(String startDate){
this.startDate = startDate;
}
public String gettitle(){
return title;
}
public void settitle(String title){
this.title = title;
}
public String getemail(){
return email;
}
public void setemial(String email){
this.email = email;
}
public Employee(){
this("", 'N', "", new Date(), "", "", 0, 0, "", "", "");
}
public Employee(String Name, char Sex, String natIncsNumber, Date date, String address, String postcode, int ID, float Salary, String Startdate, String Title, String Email) {
super(Name, Sex,natIncsNumber, date, address, postcode);
this.id = ID;
salary = 0.0f;
this.startDate = Startdate;
this.title = Title;
this.email = Email;
}
public void setSalary(float salry){
salary = salry;
}
public String toString(){
return "Employee ID = " + id+ ", Employee Salary = " + salary + " Start Date = " + startDate +
" Title = " + title + " Email = " + email + super.toString();
}
}
Person Class-
import java.io.*;
public class Person implements Serializable{
protected String name;
protected char gender;
protected String natIncsNo;
protected Date dob;
protected String Address;
protected String Postcode;
public String getName(){
return name;
}
public void setName(String name){
this.name = name;
}
public char getGender(){
return gender;
}
public void setGender(char gender){
this.gender = gender;
}
public String getnatIncsNo(){
return natIncsNo;
}
public void setnatIncsNo(String natIncsNo){
this.natIncsNo = natIncsNo;
}
public Date getdob(){
return dob;
}
public void setdob(Date dob){
this.dob = dob;
}
public String getAddress(){
return Address;
}
public void setAddress(String Address){
this.Address = Address;
}
public String getPostcode(){
return Postcode;
}
public void setPostcode(String Postcode){
this.Postcode = Postcode;
}
public Person(String Name, char Sex, String natIncsNumber, Date date, String address, String postcode) {
name = Name;
gender = Sex;
natIncsNo = natIncsNumber;
dob = date;
Address = address;
Postcode = postcode;
}
public Person(){
this("", 'N', "", new Date(), "", "");
}
public String toString(){
String output = " Name: " + name + " Gender: " + gender + " National Insurance Number: " + natIncsNo +
" Date Of Birth : " + dob +
" Address: " + Address + " Postcode: " + Postcode;
return output;
}
}
EDIT X 2-
EmployeeDAO Klasse
import java.security.spec.ECFieldF2m;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
public class EmployeeDAO extends Employee {
private Connection con;
private Statement st;
private ResultSet rs;
public EmployeeDAO() {
Connection connection = null;
try {
Class.forName("org.sqlite.JDBC");
connection = DriverManager.getConnection("jdbc:sqlite:employeeDatabase.sqlite");
} catch (Exception e) {
System.err.println(e.getClass().getName() + ": " + e.getMessage());
System.exit(0);
}
System.out.println("Connection - database driver found");
//insertEmployeeAtID();
//selectAllEmployees();
//insertEmployee();
//deleteEmployeeByID();
}
public Statement getConnection() {
return st;
}
public void closeConnection() throws SQLException {
if (con != null) con.close();
}
public ArrayList<Employee> selectAllEmployees(){
Connection connection = null;
Statement statement = null;
try {
Class.forName("org.sqlite.JDBC");
connection = DriverManager.getConnection("jdbc:sqlite:employeeDatabase.sqlite");
connection.setAutoCommit(false);
System.out.println("Read operation - database successfully opened");
statement = connection.createStatement();
ResultSet resultset = statement.executeQuery("SELECT * from employees");
while (resultset.next()) {
int id = resultset.getInt("id");
String name = resultset.getString("name");
String email = resultset.getString("email");
String gender = resultset.getString("gender");
String dob = resultset.getString("dob");
String Address = resultset.getString("address");
String Postcode = resultset.getString("Postcode");
String NIN = resultset.getString("NIN");
String JobTitle = resultset.getString("JobTitle");
String StartDate = resultset.getString("StartDate");
String Salary = resultset.getString("Salary");
System.out.println("ID : " + id);
System.out.println("Name : " + name);
System.out.println("Gender : " + gender);
System.out.println("Date Of Birth : " + dob);
System.out.println("Address : " + Address);
System.out.println("Postcode : " + Postcode);
System.out.println("National Insurance Number : " + NIN);
System.out.println("Job Title : " + JobTitle);
System.out.println("Start Date : " + StartDate);
System.out.println("Salary : " + Salary);
System.out.println("Email: " + email);
System.out.println();
}
resultset.close();
statement.close();
connection.close();
} catch (Exception e) {
System.err.println(e.getClass().getName() + ": " + e.getMessage());
System.exit(0);
}
System.out.println("Read operation successfully done");
return new ArrayList<Employee>();
}
public String selectEmployeeByName() {
Connection connection = null;
Statement statement = null;
try {
Class.forName("org.sqlite.JDBC");
connection = DriverManager.getConnection("jdbc:sqlite:employeeDatabase.sqlite");
connection.setAutoCommit(false);
System.out.println("Read operation - database successfully opened");
statement = connection.createStatement();
ResultSet resultset = statement.executeQuery("SELECT * from employees WHERE Name = 'Brad Stones';");
while (resultset.next()) {
int id = resultset.getInt("id");
String name = resultset.getString("name");
String email = resultset.getString("email");
String gender = resultset.getString("gender");
String dob = resultset.getString("dob");
String Address = resultset.getString("address");
String Postcode = resultset.getString("Postcode");
String NIN = resultset.getString("NIN");
String JobTitle = resultset.getString("JobTitle");
String StartDate = resultset.getString("StartDate");
String Salary = resultset.getString("Salary");
/*
System.out.println("ID : " + id);
System.out.println("Name : " + name);
System.out.println("Gender : " + gender);
System.out.println("Date Of Birth : " + dob);
System.out.println("Address : " + Address);
System.out.println("Postcode : " + Postcode);
System.out.println("National Insurance Number : " + NIN);
System.out.println("Job Title : " + JobTitle);
System.out.println("Start Date : " + StartDate);
System.out.println("Salary : " + Salary);
System.out.println("Email: " + email);
System.out.println();
*/
}
resultset.close();
statement.close();
connection.close();
} catch (Exception e) {
System.err.println(e.getClass().getName() + ": " + e.getMessage());
System.exit(0);
}
System.out.println("Read operation successfully done");
return toString();
}
public boolean insertEmployee(){
Connection connection = null;
Statement statement = null;
try {
Class.forName("org.sqlite.JDBC");
connection = DriverManager.getConnection("jdbc:sqlite:employeeDatabase.sqlite");
connection.setAutoCommit(false);
System.out.println("Insert operation -database successfully opened");
statement = connection.createStatement();
String sql = "INSERT INTO employees (id, name, gender, NIN, dob, Address, Postcode,startDate, salary, email, JobTitle) "
+ "VALUES ('1', 'Brad Stones', 'M', 'YU6593864T', '09-01-1987', '100 Dalton Road', 'M1 7TA', '09-01-1981','25000', '[email protected]', 'Tutor')";
statement.executeUpdate(sql);
statement.close();
connection.commit();
connection.close();
} catch (Exception e) {
System.err.println(e.getClass().getName() + ": " + e.getMessage());
System.exit(0);
}
System.out.println("Records successfully created");
return false;
}
public boolean insertEmployeeAtID(){
Connection connection = null;
Statement statement = null;
try {
Class.forName("org.sqlite.JDBC");
connection = DriverManager.getConnection("jdbc:sqlite:employeeDatabase.sqlite");
connection.setAutoCommit(false);
System.out.println("Update operation - database successfully opened");
statement = connection.createStatement();
String sql = "UPDATE employees set JobTitle = 'Potato' where ID=1;";
statement.executeUpdate(sql);
connection.commit();
statement.close();
connection.close();
} catch (Exception e) {
System.err.println(e.getClass().getName() + ": " + e.getMessage());
System.exit(0);
}
System.out.println("Update operation successfully done");
return false;
}
public boolean deleteEmployeeByID(){
Connection connection = null;
Statement statement = null;
try {
Class.forName("org.sqlite.JDBC");
connection = DriverManager.getConnection("jdbc:sqlite:employeeDatabase.sqlite");
connection.setAutoCommit(false);
System.out.println("Delete operation -database successfully opened");
statement = connection.createStatement();
String sql = "DELETE from employees where ID= 1";
statement.executeUpdate(sql);
connection.commit();
statement.close();
connection.close();
} catch (Exception e) {
System.err.println(e.getClass().getName() + ": " + e.getMessage());
System.exit(0);
}
System.out.println("Delete operation successfully done");
return false;
}
}
nextEmployee Method-
List<Employee> list= empDAO.selectAllEmployees();
int counter=0;
nextEmployee.addActionListener(new ActionListener() {
boolean isfirstTime = true;
@Override
public void actionPerformed(ActionEvent e) {
if (isfirstTime) {
Connection connection = null;
PreparedStatement pst = null;
Statement statement = null;
ResultSet rs = null;
int i = 1;
try {
Class.forName("org.sqlite.JDBC");
connection = DriverManager.getConnection("jdbc:sqlite:employeeDatabase.sqlite");
connection.setAutoCommit(false);
String sql = "SELECT ID, Name, Gender, DOB, Address, Postcode, NIN, JobTitle, StartDate, Salary, Email from employees WHERE ID= "
+ (i);
pst = connection.prepareStatement(sql);
rs = pst.executeQuery();
while(rs.next()){
EmployeeDAO empDao=new EmployeeDAO();
//set the variables for the employee
String id = rs.getString(1);
String name = rs.getString(2);
String gender = rs.getString(3);
String dob = rs.getString(4);
String Address = rs.getString(5);
String Postcode = rs.getString(6);
String NIN = rs.getString(7);
String JobTitle = rs.getString(8);
String StartDate = rs.getString(9);
String Salary = rs.getString(10);
String email = rs.getString(11);
idTextField.setText(id);
nameTextField.setText(name);
genderTextField.setText(gender);
dobTextField.setText(dob);
addressTextField.setText(Address);
postcodeTextField.setText(Postcode);
ninTextField.setText(NIN);
jobtitleTextField.setText(JobTitle);
startdateTextField.setText(StartDate);
salaryTextField.setText(Salary);
emailTextField.setText(email);
list.add(empDao);
}
rs.close();
pst.close();
connection.close();
}
catch (Exception e1) {
JOptionPane.showMessageDialog(null, "No more records exist");
}
}else{
Employee emp=list.get(counter);
idTextField.setText(String.valueOf(emp.getid()));
//and so on. always get from emp
JOptionPane.showMessageDialog(null, "Employee has been found");
}
}
});
zu arbeiten bewegen 'Connection.commit();' 'vor Ihrer for' Schleife. – Berger
@Berger Versucht es jedoch, da i = 1, gibt es nur den ersten Datensatz zurück und weigert sich nur, den Wert von i zu erhöhen. – TheNotoriousCoder
Was ist der Zweck der 'for (i = 1; i <= 4; i ++)' Schleife? – Berger