1.如果存在更新数据库,如果不存在就插入数据库(merg into)语法
merg into table_name alias1 using (table|view|sub_query alias2 on (join condition)
when matched then update table_name set col1=col1value,col2=col2value
when not matched then insert into (col1,col2,...,coln) values(col1value,col2value,....colnvalue);
2.java程序里面插入数据库拼接sql语句的方法:
1.定义StringBuffer接收拼接的字段
StringBuffer sql = new StringBuffer("select col1,col2,col3,col3 from table_name where coln='").append(colnvalue).append("'")append("' and coln='").append(colnvalue).append("'");;
sql.toString();
2.定义StringBuilder接收拼接字段
StringBuilder sql = new StringBuilder("insert into table_name (col1,col2,col3) values('");
sql.append(info[0]).append("','").append(info[1]).append("','").append(info[2]).append("')");
sql.toString();
3.循环数组拼接
String sql= "insert into table_name values( ";
for(int i =0;i<list.size();i++)
{
String[] str = (String[])list.get(i);
for(int k=0;k<str.length;k++)
{
if(k==(str.length-1))
{
sql+="'"+str[k]+"'";
}
else
{
sql+="'"+str[k]+"',";
}
}
}
sql+=");";
4.Statement stmt = conn.createStatement();
int[] rows;
for(int i=0; i<employees.length;i++)
{
stmt.addBatch("UPDATE EMPLOYEES SET SALARY=" +
employees[i].salary +
"WHERE ID=" +
employee[i].id);
}
rows = stmt.executeBatch();
5.触发器:
触发器是一种特殊的存储过程。它在插入、删除或修改特定表中的数据时触发执行,它比数据库本身标准的功能有更精细和更复杂的数据控制能力。
与存储过程相同,触发器也存储在数据库中,使用SQL和PL/SQL语句编写。存储过程和触发器最主要的区别在于它们运行的方式不同。存储过程由用户、应用程序或触发器显式调用,而触发器则是当触发事件发生时由系统触发执行。
触发器按照所触发动作的间隔尺寸可以分为语句级触发器和行级触发器,CREATE TRIGGER语句的FOR EACH子句定义了触发动作的间隔尺寸,它既可以是FOR EACH STATEMENT,也可以是FOR EACH ROW。