l 事务ACID
1、 START TRANSACTION //开始事务
2、 UPDATE //更新
3、 DELETE //删除
4、 SAVEPOINT S1; //设置一个保存点
5、 DELETE //删除
6、 ROLLBACK WORK TO SAVEPOINT S1; 回滚事务到保存点s1 ,所以第五条没用,被忽略(当事务回滚到某个保存点后,在该保存点之后设置的保存点将被删除)
7、 INSERT //更新
8、 COMMIT WORK; //结束事务
例如:(实例应用)
try {
conn=DriverManager.getConnection("jdbc:mysql://localhost/kcgl", "root","admin");
st = conn.createStatement();
conn.setAutoCommit(false);//关闭自动提交,打开事务
//1
String sql="update cj set score=score+1000 where scode=1";
st.executeUpdate(sql);
Savepoint sp = conn.setSavepoint(); //设置保存点
//2
sql = "update cj set score=score+1000 where scode=1";
st.executeUpdate(sql);
//3
sql = "update cj set score=score+1000 where scode=1";
st.executeUpdate(sql);
conn.rollback(sp);//回滚到保存点,2和3相当于没有执行
//4
sql = "update cj set score=score+1000 where scode=1";
st.executeUpdate(sql);
conn.commit();//提交事务}
l 分页的功能
MySQL提供了分页语法. 在查询语句后可使用LIMIT关键字完成分页功能, 例如:
select * from user limit 40,20
查询从user表中取出从第41条开始的20条记录. 第一个参数表示忽略前面多少个, 第二个参数代表取多少个.
l 获取插入的ID
MySQL的select last_insert_id()可以获取之前插入的记录的id, 但这只是MySQL才有的函数
只有对自增长的列发生自增长的赋值后才会导致一个key的产生,并且用getGereratedKeys()返回。例如:
conn.prepareStatement(sql, Statement.RETURN_GENERATED_KEYS);
ResultSet rs = ps.getGeneratedKeys();
if (rs.next())
user.setId(rs.getInt(1));
l 可更新结果集、敏感结果集
conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_UPDATABLE);
ResultSet.TYPE_SCROLL_SENSITIVE
表示获得ResultSet之后是敏感的, 随数据库更新的. 但MySQL没有支持这项功能
ResultSet.CONCUR_UPDATABLE
表示获得ResultSet之后是可更新的, 例如:
rs.next();
rs.updateString("name", "updateName");
rs.updateRow();
可以将当前行的name属性改为updateName.
l 反射
反射可以理解为在运行时获取对象类型信息的操作,可以访问、检测和修改其自身状态或行为的一种能力,它允许动态发现和绑定类、方法、字段,以及所有其他的由语言所产成的元素,不仅仅是简单地列举类、字段以及方法,通过反射还能够在运行时完成创建实例、调用方法以及访问字段的工作。
² class类
Ø 调用Object类的getClass()方法来得到Class对象
例如:
MyObject x = new MyObject();
Class c1 = x.getClass();
Ø 使用Class类的forName()静态方法获得与字符串对应的Class对象。
例如:
Class c2 = Class.forName(“java.lang.String”);
Ø 使用“类型名.class”获取该类型对应的Class对象。
例如:
Class c1 = Manager.class;
Class c2 = int.class;
Class c3 = double[].class;