如何使用javafx将select(jdbc)与prepared语句一起使用

如何使用javafx将select(jdbc)与prepared语句一起使用,select,jdbc,javafx,prepared-statement,Select,Jdbc,Javafx,Prepared Statement,我有一个jdbc代码,我想使用prepared语句和javaFX从数据库中选择数据。我的意思是我想使用JavaFX来获取字符串部分。这是我的数据访问代码,但我不知道如何使用参数编写控制器方法以及如何迭代列表 public ArrayList selectByNameAndFamily(Person person) throws Exception { preparedStatement = connection.prepareStatement("select * from

我有一个jdbc代码,我想使用prepared语句和javaFX从数据库中选择数据。我的意思是我想使用JavaFX来获取字符串部分。这是我的数据访问代码,但我不知道如何使用参数编写控制器方法以及如何迭代列表

      public ArrayList selectByNameAndFamily(Person person) throws Exception {
    preparedStatement = connection.prepareStatement("select * from person where name = ? and family = ?");
    preparedStatement.setString(1,person.getName());
    preparedStatement.setString(2,person.getFamily());
    ResultSet resultSet = preparedStatement.executeQuery();
    ArrayList<Person> list = new ArrayList<>();
    while (resultSet.next()) {
        person.setPhone(resultSet.getLong("phone"));
        person.setId(resultSet.getLong("id"));
        person.setPlaque(resultSet.getLong("plaque"));
        person.setUnit(resultSet.getLong("unit"));
        person.setName(resultSet.getString("name"));
        person.setFamily(resultSet.getString("family"));
        person.setAddress1(resultSet.getString("Address1"));
        person.setAddress2(resultSet.getString("address2"));
        person.setAddress3(resultSet.getString("address3"));

        list.add(person);
    }
    return list;
public ArrayList selectByNameAndFamily(Person)引发异常{
preparedStatement=connection.prepareStatement(“从姓名=?和家庭=?”的人员中选择*”;
preparedStatement.setString(1,person.getName());
preparedStatement.setString(2,person.getFamily());
ResultSet ResultSet=preparedStatement.executeQuery();
ArrayList=新建ArrayList();
while(resultSet.next()){
person.setPhone(resultSet.getLong(“电话”));
person.setId(resultSet.getLong(“id”);
个人设置斑块(结果集getLong(“斑块”));
person.setUnit(resultSet.getLong(“单位”);
person.setName(resultSet.getString(“name”);
person.setFamily(resultSet.getString(“family”);
person.setAddress1(resultSet.getString(“Address1”);
person.setAddress2(resultSet.getString(“address2”);
person.setAddress3(resultSet.getString(“address3”);
列表。添加(人);
}
退货清单;
*注意我的表对象名是Person,我已经在代码中创建了PreparedStatement的对象。

之后

Person person = new Person();
person.getName()和person.getFamily()将是什么?null?空字符串

因此preparedStatement.executeQuery()将找不到任何行,您将永远无法输入

while (resultSet.next())
之后

person.getName()和person.getFamily()将是什么?null?空字符串

因此preparedStatement.executeQuery()将找不到任何行,您将永远无法输入

while (resultSet.next())

我创建了这个。我的一些方法和变量与您的不同。此外,我使用SQLITE并创建了一个示例数据库。这不是javaFX问题,这是java问题

public static void main(String[] args) {

    try
    {
        Class.forName("org.sqlite.JDBC");
        Scanner input = new Scanner(System.in);
        Person person = new Person();

        System.out.println("Enter person name: ");
        person.setName(input.nextLine());
        System.out.println("Enter person family: ");
        person.setFamilyName(input.nextLine());

        ArrayList<Person> peopleFromDatabase = selectByNameAndFamily(person);

        for(Person entry : peopleFromDatabase)
        {
             System.out.println("PERSON:");
             System.out.println("\t" + entry.getName());
             System.out.println("\t" + entry.getID());
             System.out.println("\t" + entry.getFamilyName());
             System.out.println("\t" + entry.getAddress1());

             System.out.println();
        }
    } 
    catch (ClassNotFoundException ex) 
    {
        Logger.getLogger(TestingGround.class.getName()).log(Level.SEVERE, null, ex);
    }
}

public static ArrayList<Person> selectByNameAndFamily(Person person)
{
    ArrayList<Person> list = new ArrayList();
    String sql = "select * from person where name = ? and family_name = ?";

    try(Connection con = DriverManager.getConnection("jdbc:sqlite:family.db");
        PreparedStatement prestmt = con.prepareStatement(sql); )
    {
        prestmt.setString(1, person.getName());
        prestmt.setString(2, person.getFamilyName());
        ResultSet rs = prestmt.executeQuery();

        while (rs.next()) {
            Person returningPerson = new Person();

            returningPerson.setID(rs.getLong("id"));
            returningPerson.setName(rs.getString("name"));
            returningPerson.setFamilyName(rs.getString("family_name"));
            returningPerson.setPhone(rs.getString("phone"));                
            returningPerson.setPlaque(Long.parseLong(rs.getString("plaque")));
            returningPerson.setUnit(Long.parseLong(rs.getString("unit")));                
            returningPerson.setAddress1(rs.getString("Address1"));
            returningPerson.setAddress2(rs.getString("address2"));
            returningPerson.setAddress3(rs.getString("address3"));

            list.add(returningPerson);
        }


    }   
    catch (SQLException ex) 
    {
        Logger.getLogger(TestingGround.class.getName()).log(Level.SEVERE, null, ex);
    }

    return list;
}
publicstaticvoidmain(字符串[]args){
尝试
{
Class.forName(“org.sqlite.JDBC”);
扫描仪输入=新扫描仪(System.in);
Person=新人();
System.out.println(“输入人名:”);
person.setName(input.nextLine());
System.out.println(“输入个人家庭:”;
person.setFamilyName(input.nextLine());
ArrayList peopleFromDatabase=按姓名和家庭(个人)选择;
for(个人输入:peopleFromDatabase)
{
System.out.println(“人:”);
System.out.println(“\t”+entry.getName());
System.out.println(“\t”+entry.getID());
System.out.println(“\t”+entry.getFamilyName());
System.out.println(“\t”+entry.getAddress1());
System.out.println();
}
} 
捕获(ClassNotFoundException ex)
{
Logger.getLogger(TestingGround.class.getName()).log(Level.SEVERE,null,ex);
}
}
公共静态数组列表selectByNameAndFamily(个人)
{
ArrayList=新建ArrayList();
String sql=“从姓名=?和姓氏=?”的人员中选择*;
try(Connection con=DriverManager.getConnection(“jdbc:sqlite:family.db”);
PreparedStatement prestmt=con.prepareStatement(sql);)
{
prestmt.setString(1,person.getName());
prestmt.setString(2,person.getFamilyName());
ResultSet rs=prestmt.executeQuery();
while(rs.next()){
人员返回人员=新人员();
returningPerson.setID(rs.getLong(“id”);
returningPerson.setName(rs.getString(“name”);
returningPerson.setFamilyName(rs.getString(“family_name”);
returningPerson.setPhone(rs.getString(“phone”);
returningPerson.setplate(Long.parseLong(rs.getString(“plate”));
returningPerson.setUnit(Long.parseLong(rs.getString(“unit”));
returningPerson.setAddress1(rs.getString(“Address1”);
returningPerson.setAddress2(rs.getString(“address2”);
returningPerson.setAddress3(rs.getString(“address3”);
列表。添加(返回人员);
}
}   
catch(SQLException-ex)
{
Logger.getLogger(TestingGround.class.getName()).log(Level.SEVERE,null,ex);
}
退货清单;
}

我创建了这个。我的一些方法和变量与您的不同。此外,我使用了SQLITE并创建了一个示例数据库。这不是javaFX问题,这是java问题

public static void main(String[] args) {

    try
    {
        Class.forName("org.sqlite.JDBC");
        Scanner input = new Scanner(System.in);
        Person person = new Person();

        System.out.println("Enter person name: ");
        person.setName(input.nextLine());
        System.out.println("Enter person family: ");
        person.setFamilyName(input.nextLine());

        ArrayList<Person> peopleFromDatabase = selectByNameAndFamily(person);

        for(Person entry : peopleFromDatabase)
        {
             System.out.println("PERSON:");
             System.out.println("\t" + entry.getName());
             System.out.println("\t" + entry.getID());
             System.out.println("\t" + entry.getFamilyName());
             System.out.println("\t" + entry.getAddress1());

             System.out.println();
        }
    } 
    catch (ClassNotFoundException ex) 
    {
        Logger.getLogger(TestingGround.class.getName()).log(Level.SEVERE, null, ex);
    }
}

public static ArrayList<Person> selectByNameAndFamily(Person person)
{
    ArrayList<Person> list = new ArrayList();
    String sql = "select * from person where name = ? and family_name = ?";

    try(Connection con = DriverManager.getConnection("jdbc:sqlite:family.db");
        PreparedStatement prestmt = con.prepareStatement(sql); )
    {
        prestmt.setString(1, person.getName());
        prestmt.setString(2, person.getFamilyName());
        ResultSet rs = prestmt.executeQuery();

        while (rs.next()) {
            Person returningPerson = new Person();

            returningPerson.setID(rs.getLong("id"));
            returningPerson.setName(rs.getString("name"));
            returningPerson.setFamilyName(rs.getString("family_name"));
            returningPerson.setPhone(rs.getString("phone"));                
            returningPerson.setPlaque(Long.parseLong(rs.getString("plaque")));
            returningPerson.setUnit(Long.parseLong(rs.getString("unit")));                
            returningPerson.setAddress1(rs.getString("Address1"));
            returningPerson.setAddress2(rs.getString("address2"));
            returningPerson.setAddress3(rs.getString("address3"));

            list.add(returningPerson);
        }


    }   
    catch (SQLException ex) 
    {
        Logger.getLogger(TestingGround.class.getName()).log(Level.SEVERE, null, ex);
    }

    return list;
}
publicstaticvoidmain(字符串[]args){
尝试
{
Class.forName(“org.sqlite.JDBC”);
扫描仪输入=新扫描仪(System.in);
Person=新人();
System.out.println(“输入人名:”);
person.setName(input.nextLine());
System.out.println(“输入个人家庭:”;
person.setFamilyName(input.nextLine());
ArrayList peopleFromDatabase=按姓名和家庭(个人)选择;
for(个人输入:peopleFromDatabase)
{
System.out.println(“人:”);
System.out.println(“\t”+entry.getName());
System.out.println(“\t”+entry.getID());
System.out.println(“\t”+entry.getFamilyName());
System.out.println(“\t”+entry.getAddress1());
System.out.println();
}
} 
捕获(ClassNotFoundException ex)
{
Logger.getLogger(TestingGround.class.getName()).log(Level.SEVERE,null,ex);
}
}
公共静态数组列表selectByNameAndFamily(个人)
{
ArrayList=新建ArrayList();
String sql=“从姓名=?和姓氏=?”的人员中选择*;
try(Connection con=DriverManager.getConnection(“jdbc:sqlite:family.db”);
PreparedStatement prestmt=con.prepareStatement(sql);)
{
prestmt.setString(1,person.getName());
prestmt.setString(2,person.getFamilyName());
ResultSet rs=prestmt.exe