将java集合保存到数据库中

将java集合保存到数据库中,java,mysql,collections,Java,Mysql,Collections,我创建了一个名为collection的java集合,但在将其保存到数据库中时遇到了问题。 我认为最简单的方法是,通过发送如下查询,在Persons表中逐个插入collections对象,并使用for-each循环: 个人p:收集{ statement.executeUpdate在人员姓名、姓氏、ID、电话值中插入a.getName、a.getLastName、a.getID、a.getPhone;; } 但是我在编译时收到了这个错误:com.mysql.jdbc.exceptions.jdbc4

我创建了一个名为collection的java集合,但在将其保存到数据库中时遇到了问题。 我认为最简单的方法是,通过发送如下查询,在Persons表中逐个插入collections对象,并使用for-each循环:

个人p:收集{ statement.executeUpdate在人员姓名、姓氏、ID、电话值中插入a.getName、a.getLastName、a.getID、a.getPhone;; }

但是我在编译时收到了这个错误:com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException:您的SQL语法有错误;检查与MySQL服务器版本对应的手册,以了解第1行附近要使用的正确语法


a、 getName、a.getName、a.getID、a.getPhone是getter,有没有办法在sql查询中使用它们?

我认为您应该使用:

(Person p: collection){ statement.executeUpdate("INSERT INTO Persons (Name,Surname,ID,Phone) values (" + a.getName()+","+ a.getSurname()+","a.getID().toString()+","+a.getPhone().toString()+";)"); }
你能试试这个吗


values语句中有一个分号,需要右括号。试试这个:

for (Person p: collection){ statement.executeUpdate("INSERT INTO Persons (Name,Surname,ID,Phone)
                                     values (a.getName(),a.getSurname(),a.getID(),a.getPhone())"); }

您应该这样添加它们:

for (Person p: collection){ 
statement.executeUpdate("INSERT INTO Persons (Name,Surname,ID,Phone) values("+a.getName()+","+a.getSurname()+","+a.getID()+","+a.getPhone()+")");
 }

也许你可以看看准备好的陈述。
移除;从a.getPhone之后的语句中,使用准备好的语句:

Connection conn = DriverManager.getConnection(url);
String insert = "INSERT INTO Persons (Name,Surname,ID,Phone) values (?,?,?,?);";
PreparedStatement pStmnt = conn.prepareStatement(insert);
pstmnt.setString(1,a.getName());
pstmnt.setString(2,a.getSurname());
pStmnt.setInt(3,a.getId());
pStmnt.setString(3,a.getPhone());

pStmnt.execteUpdate();
准备好的声明应尽可能防止和使用

您可以毫无困难地将其包装在循环中-只需确保您的对象引用的是正确的内容:

for(Person p : collection{
    pstmnt.setString(1,p.getName());
    pstmnt.setString(2,p.getSurname());
    pStmnt.setInt(3,p.getId());
    pStmnt.setString(3,p.getPhone());

    pStmnt.execteUpdate();
}

这是什么代码?有对象吗?目前,您只是在尝试将名称a.getName、a.getNames插入数据库。它不会将这些数据解析为它们的值。也许可以使用String API中的String.format。对于此类任务,最好使用prepared语句。太棒了!工作得很有魅力!
Connection conn = DriverManager.getConnection(url);
String insert = "INSERT INTO Persons (Name,Surname,ID,Phone) values (?,?,?,?);";
PreparedStatement pStmnt = conn.prepareStatement(insert);
pstmnt.setString(1,a.getName());
pstmnt.setString(2,a.getSurname());
pStmnt.setInt(3,a.getId());
pStmnt.setString(3,a.getPhone());

pStmnt.execteUpdate();
for(Person p : collection{
    pstmnt.setString(1,p.getName());
    pstmnt.setString(2,p.getSurname());
    pStmnt.setInt(3,p.getId());
    pStmnt.setString(3,p.getPhone());

    pStmnt.execteUpdate();
}