Java中如何实现控制台逐字段录入后执行SQL INSERT插入数据库
问题解答
核心疑问答疑
不存在「if循环」的说法,if是条件判断语句,本身没有循环执行的能力,无法用来实现重复的输入提示逻辑。你可以用两种方式实现需求:当前只有4个字段的场景下直接按顺序写输入逻辑即可,后续如果字段要扩展,可以用for/while循环实现批量录入。
现有代码问题
你当前的代码只读取了1次用户输入,并且只给SQL的第1个占位符赋值,剩下3个占位符没有传值,运行会直接报错。
实现方案1:直接顺序输入(最适合你当前场景)
代码修改后如下:
public void insertSupplier() { // 先打印录入提示头 System.out.println("--- Insert required information ---"); // 依次提示输入每个字段并读取值 System.out.print("Supplier name: "); String supplierName = scan.nextLine(); System.out.print("Supplier email: "); String supplierEmail = scan.nextLine(); System.out.print("Supplier phonenumber: "); String supplierPhone = scan.nextLine(); System.out.print("Supplier contactperson: "); String contactPerson = scan.nextLine(); // 数据库操作用try-with-resources自动释放资源,避免资源泄漏 try ( Connection cn = DriverManager.getConnection(DB_ADDRESS, DB_USER, DB_PASS); PreparedStatement pstat = cn.prepareStatement("INSERT INTO supplier (supplier_name, supplier_email, supplier_phonenumber, supplier_contactperson) VALUES (?,?,?,?)") ) { // 给所有占位符赋值 pstat.setString(1, supplierName); pstat.setString(2, supplierEmail); pstat.setString(3, supplierPhone); pstat.setString(4, contactPerson); pstat.executeUpdate(); System.out.println("Supplier added to database"); } catch (SQLException e) { System.out.println(e.getMessage()); } }
实现方案2:用for循环批量处理(适合字段多、后续可能扩展的场景)
如果后续可能新增字段,用循环可以减少重复代码,实现如下:
public void insertSupplier() { // 把所有要录入的字段名存到数组里,后续加字段只需要改这个数组即可 String[] fields = {"Supplier name", "Supplier email", "Supplier phonenumber", "Supplier contactperson"}; String[] values = new String[fields.length]; System.out.println("--- Insert required information ---"); // 循环提示输入每个字段 for (int i = 0; i < fields.length; i++) { System.out.print(fields[i] + ": "); values[i] = scan.nextLine(); } try ( Connection cn = DriverManager.getConnection(DB_ADDRESS, DB_USER, DB_PASS); PreparedStatement pstat = cn.prepareStatement("INSERT INTO supplier (supplier_name, supplier_email, supplier_phonenumber, supplier_contactperson) VALUES (?,?,?,?)") ) { // 循环给占位符赋值 for (int i = 0; i < values.length; i++) { pstat.setString(i+1, values[i]); } pstat.executeUpdate(); System.out.println("Supplier added to database"); } catch (SQLException e) { System.out.println(e.getMessage()); } }
内容的提问来源于stack exchange,提问作者Pawpaw
相关产品推荐
相关产品推荐

