Java 在数据库中更新邮件列表的最佳方法
我有下面的数据库模式Java 在数据库中更新邮件列表的最佳方法,java,sql,database,Java,Sql,Database,我有下面的数据库模式 SQL> describe USERS; Name Null? Type ----------------------------------------- -------- ---------------------------- user_id NOT NULL NUMBER(38) name
SQL> describe USERS;
Name Null? Type
----------------------------------------- -------- ----------------------------
user_id NOT NULL NUMBER(38)
name NOT NULL VARCHAR2(50)
password NOT NULL VARCHAR2(50)
score NUMBER(38)
notify_before_expiration NUMBER(38)
is_admin NOT NULL NUMBER(1)
SQL> describe EMAIL;
Name Null? Type
----------------------------------------- -------- ----------------------------
email_id NOT NULL NUMBER(38)
email NOT NULL VARCHAR2(50)
user_id NOT NULL NUMBER(38)
所以一个用户有很多电子邮件。
用户可以访问一个表单,在那里他们可以添加/删除他们的电子邮件。
问题是:哪种更新db的方式更好,因为db拥有从该表单获得的邮件列表
我在想:(java伪代码)
//数据库中的邮件列表。
ArrayList emailsInDB=getAllMailsFromDB(用户);
//表格中的邮件列表
ArrayList emailsInForm=form.getAllMail();
//迭代从表单获取的所有电子邮件。
用于(字符串电子邮件:EmailsForm){
if(emailsInDB.contains)(电子邮件){
//已经在数据库中
emailsInDB.remove(电子邮件,用户);
}否则{
//新邮件!添加到数据库中!
db.insertMail(电子邮件、用户);
}
//数据库中的所有电子邮件,但不在表单中,
//已删除。请从数据库中删除它们。
用于(字符串电子邮件:emailsInDB){
db.deleteMail(电子邮件);
}
欢迎提出更好的想法!
感谢阅读。您可以做的一个优化是在插入新电子邮件之前先删除电子邮件 在伪SQL中:
DELETE from emails WHERE emali.user_id=userid AND email NOT IN(...list of emails from the form...)
这会在一次调用SQL server时删除所有需要删除的电子邮件,如果您有很多电子邮件,而服务器离您很远,则会节省一些延迟
然后继续插入电子邮件
//List of mails in db.
ArrayList<String> emailsInDB = getAllMailsFromDB(user);
//Iterates all emails gotten from the form.
for (String email : emailsInForm) {
if (!emailsInDB.contains(email) {
//New mail! Add it in the db!
db.insertMail(email, user);
}
//数据库中的邮件列表。
ArrayList emailsInDB=getAllMailsFromDB(用户);
//迭代从表单获取的所有电子邮件。
用于(字符串电子邮件:EmailsForm){
如果(!emailsInDB.contains)(电子邮件){
//新邮件!添加到数据库中!
db.insertMail(电子邮件、用户);
}
您可以做的一个优化是在插入新电子邮件之前先删除电子邮件
在伪SQL中:
DELETE from emails WHERE emali.user_id=userid AND email NOT IN(...list of emails from the form...)
这会在一次调用SQL server时删除所有需要删除的电子邮件,如果您有很多电子邮件,而服务器离您很远,则会节省一些延迟
然后继续插入电子邮件
//List of mails in db.
ArrayList<String> emailsInDB = getAllMailsFromDB(user);
//Iterates all emails gotten from the form.
for (String email : emailsInForm) {
if (!emailsInDB.contains(email) {
//New mail! Add it in the db!
db.insertMail(email, user);
}
//数据库中的邮件列表。
ArrayList emailsInDB=getAllMailsFromDB(用户);
//迭代从表单获取的所有电子邮件。
用于(字符串电子邮件:EmailsForm){
如果(!emailsInDB.contains)(电子邮件){
//新邮件!添加到数据库中!
db.insertMail(电子邮件、用户);
}
尽管没有很好的文档记录,但Oracle允许您定义一种称为VARRAY的数组类型。通过这些类型,您可以将“emailsToAdd”和“emailsToDelete”批量传递到一个过程中。这将允许您减少对DB的调用量,提高该方法的整体性能。这是一个让您开始的示例ed.尽管没有很好的文档记录,Oracle允许您定义一种称为VARRAY的数组类型。通过这些类型,您可以批量将“emailsToAdd”和“emailsToDelete”传递到一个过程中。这将允许您减少对DB的调用量,提高该方法的整体性能。这是一个让您能够rted.我不希望使用这种工具。更改RDBM时很难迁移它们。谢谢。同意。也许重新标记sql而不是oracle是合适的。我不希望使用这种工具。更改RDBM时很难迁移它们。谢谢。同意。也许重新标记sql而不是oracle是合适的里亚特。