现在的位置: 首页 > 综合 > 正文

12-1-28进步一小点

2018年01月11日 ⁄ 综合 ⁄ 共 1331字 ⁄ 字号 评论关闭

1,关于数据库的操作

在j2se,连接数据库中 有个Statement类 通过产生该类的对象,我们可以进而执行相应的sql语句

一般我们如果要进行增加一条语句到table中,例如String sql="insert into pet values(nameid,sex,owner)";

这里的nameid,sex,owner均是我们自己从其他地方动态获取的数据,

例如stmt.executeUpdate(sql)是绝对出问题的,因为我们的sql里面的格式严重有问题,必须要自己利用+配合 添加相应的' ' 这种单引号,否则传进去语法报错。

这里我们引入Statement的子类,PreparedStatement;,再进行相应的数据库操作就变的简单一点

代码如下:pstmt=conn.preparedStatement("insert into pet values (?,?,?)");//里面就是我们的sql语句

pstmt.setInt(1,nameid);//设定第一个问号为int  其值为nameid

pstmt.setString(2,sex);

pstmt.setString(3,owner);

pstmt.executeUpdate();

这样就避免了我的sql字符串中的单引号的,之类的很繁琐的操作

2关于数据库中的transaction

在关于sql语句执行的过程中,肯定会遇到  一个数据从一个表提取出来,在存在另一个表中,这里需要保持他们的一致性,我们称为transaction

一旦其中某个操作有问题,则不会进行下个操作。这样就是成功操作的前提的两个操作必须都是成功操作

而我们在jdbc中如何用代码实现:在他的代码中有个方法setAutoCommit(true)是自动commit,为此我们必须认为的设置为false, 等我们的sql语句就位后 集中提交,一旦出现exception方便处理。

代码如下: cnn.setAutoCommit(false);
stmt=cnn.createStatement();
stmt.addBatch(sql);
stmt.addBatch(sql);
stmt.executeBatch();
cnn.commit();
cnn.setAutoCommit(true);

通过上面的操作,我们人工的集中commit(),然后给jdbc复原他本什么的自动提交策略。

在集中提交过程中,一旦出现任何异常,try{
if(cnn!=null){
cnn.rollback();
cnn.setAutoCommit(true);
}
}catch(SQLException e1){
e1.printStackTrace();
}

3关于点取数据库的某条记录,在传统的ResultSet 中,我们一般调用next()方法,从上到下逐条提取。

这里,我们通过在stmt=conn.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_READ_ONLY);

第一个参数是对滚动不敏感,第二个参数是并发的时候 只读。

rs=stmt.executeQuery(sql);  通过设置好了语句对象,在结果集中可以秒取任意行记录了。

抱歉!评论已关闭.