• 欢迎访问搞代码网站,推荐使用最新版火狐浏览器和Chrome浏览器访问本网站!
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏搞代码吧

Java连接Sql数据库经常用到的操作

java 搞代码 4年前 (2022-01-05) 20次浏览 已收录 0个评论

这篇文章主要介绍了Java连接Sql数据库经常用到的操作的相关资料,需要的朋友可以参考下

废话不多说了,直接给大家分享java操作sql数据库常见的连接问题。

1.连接,查询,更新,关闭

这几个数据基础操作,所以放到一起,写成一个工具类的模式,也就是model2模式的sql工具.这里本想把其他操作都加进去,比如事务处理,但是目前还没想到比较完美的方法,具体看代码吧,注释很详细

 import java.sql.*; import java.util.Iterator; import java.util.Map; import java.util.Set; /** * Created by nl101 on 2016/1/29. */ public class SQLBean { //初始化操作都写在前面 Connection conn = null; PreparedStatement ps =null; ResultSet rs = null; String driverName = "oracle.jdbc.driver.OracleDriver"; String url = "jdbc:oracle:thin:@localhost:1521:orcl"; String userName = "SCOTT"; String passWord = "123456"; /** * 初始化连接,获得conn */ public SQLBean(){ try { Class.forName(driverName); conn = DriverManager.getConnection(url,userName,passWord); } catch (ClassNotFoundException e) { e.printStackTrace(); System.err.println("数据库链接异常"); } catch (SQLException e) { e.printStackTrace(); System.err.println("数据库链接异常"); } } /* 处理事务的函数欠缺 */ /** * 创建数据库更新函数 * @param sql 对应的更新sql语句 * @param params 需要附加的参数 * @return true更新成功 false更新失败 */ public boolean update(String sql,String[] params){ int k = 0; try { ps = conn.prepareStatement(sql); for (int i = 0; i 0?true:false; } /** * 数据库查询函数 * @param sql 要查询的qsl语句 * @param params 附加参数 * @return 查询结果集 */ public ResultSet query(String sql,String[] params){ try { ps = conn.prepareStatement(sql); for (int i = 0; i <params.length; i++) { ps.setString(i+1,params[i]); } rs = ps.executeQuery(); } catc<strong style="color:transparent">来源gaodai#ma#com搞@代~码网</strong>h (SQLException e) { e.printStackTrace(); System.err.println("数据库查询异常"); } return rs; } /** * 关闭数据库语句 */ public void close(){ try { if (rs!=null) rs.close(); rs = null; if (ps!=null) ps.close(); ps = null; if (conn!=null) conn.close(); conn = null; } catch (SQLException e) { e.printStackTrace(); } } }

写成这样,其他类调用的话可以按照下面方法.

 SQLBean sqlBean = new SQLBean(); String[] params={};//如果有参数则写进去 ResultSet rs = sqlBean.query("select ename from emp",params);//sql语句 //循环取出 try { while(rs.next()){ System.out.println(rs.getString(1)); } } catch (SQLException e) { e.printStackTrace(); sqlBean.close();//异常则关闭连接 } sqlBean.close();//关闭数据库连接

2.事务的处理

事务的处理,总是先取消自动提交,然后执行命令,最后提交,然后发生异常则回滚,至于怎么写成一个方法,暂时还没想到好办法

 import bean.SQLBean; import java.sql.*; /** * Created by nl101 on 2016/1/29. */ public class test { public static void main(String[] args) { Connection conn = null; Statement ps =null; String driverName = "oracle.jdbc.driver.OracleDriver"; String url = "jdbc:oracle:thin:@localhost:1521:orcl"; String userName = "SCOTT"; String passWord = "7946521"; try { Class.forName(driverName); conn = DriverManager.getConnection(url,userName,passWord); conn.setAutoCommit(false);//首先取消自动提交 ps = conn.createStatement(); ps.addBatch("需要操作的语句1"); ps.addBatch("需要操作的语句2"); ps.addBatch("需要操作的语句3"); ps.addBatch("需要操作的语句4"); ps.executeBatch();//提交上面的命令 conn.commit();//提交事务 conn.setAutoCommit(true);//开启自动提交 } catch (ClassNotFoundException e) { e.printStackTrace(); System.err.println("数据库链接异常"); } catch (SQLException e) { e.printStackTrace(); System.err.println("事务处理异常"); try { if (conn!=null){ conn.rollback();//回滚操作 conn.setAutoCommit(true); } } catch (SQLException e1) { e1.printStackTrace(); } }finally {//最后关闭数据库 try { if (rs != null) rs.close(); rs = null; if (ps != null) ps.close(); ps = null; if (conn != null) conn.close(); conn = null; } catch (SQLException e) { e.printStackTrace(); } } } }

3.调用存储过程

 call = ct.prepareCall("{call sp_pro4(?,?,?,?,?,?)}"); //设置输入参数 call.setString(1, "emp"); call.setInt(2, 4); call.setInt(3, 1); //设置输出参数 call.registerOutParameter(4, OracleTypes.NUMBER); call.registerOutParameter(5, OracleTypes.NUMBER); call.registerOutParameter(6, OracleTypes.CURSOR); //执行 call.execute(); //输出总数和总页数 System.out.println("总记录数"+call.getInt(4) +"--总页数"+call.getInt(5)); //循环取出表 ResultSet rs = (ResultSet) call.getObject(6); while(rs.next()){ for (int i = 0; i <7; i++) { System.out.print(rs.getString(i+1)+" "); } System.out.println(); }

4.可移动的结果集

sun只是提供了接口.具体能不能操作,这个要看你引用的JDBC驱动是否支持

 import java.sql.*; public class TestScroll { public static void main(String args[]) { try { new oracle.jdbc.driver.OracleDriver(); String url = "jdbc:oracle:thin:@192.168.0.1:1521:SXT"; Connection conn = DriverManager .getConnection(url, "scott", "tiger"); Statement stmt = conn.createStatement( ResultSet.TYPE_SCROLL_INSENSITIVE,//设置该rs可以滚动 ResultSet.CONCUR_READ_ONLY);//设置该rs为只读 ResultSet rs = stmt .executeQuery("select * from emp order by sal"); rs.next();//正常下移一行 System.out.println(rs.getInt(1)); rs.last();//指向最后一行 System.out.println(rs.getString(1)); System.out.println(rs.isLast()); System.out.println(rs.isAfterLast()); System.out.println(rs.getRow()); rs.previous();//上移一行 System.out.println(rs.getString(1)); rs.absolute(6);//该方法直接定位到行号 System.out.println(rs.getString(1)); rs.close(); stmt.close(); conn.close(); } catch (SQLException e) { e.printStackTrace(); } } }

5.可更新的结果集

 import java.sql.*; public class TestUpdataRs { public static void main(String args[]){ try{ new oracle.jdbc.driver.OracleDriver(); String url="jdbc:oracle:thin:@192.168.0.1:1521:SXT"; Connection conn=DriverManager.getConnection(url,"scott","tiger"); Statement stmt=conn.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_UPDATABLE); ResultSet rs=stmt.executeQuery("select * from emp2"); rs.next(); //更新一行数据 rs.updateString("ename","AAAA"); rs.updateRow(); //插入新行 rs.moveToInsertRow(); rs.updateInt(1, 9999); rs.updateString("ename","AAAA"); rs.updateInt("mgr", 7839); rs.updateDouble("sal", 99.99); rs.insertRow(); //将光标移动到新建的行 rs.moveToCurrentRow(); //删除行 rs.absolute(5); rs.deleteRow(); //取消更新 //rs.cancelRowUpdates(); }catch(SQLException e){ e.printStackTrace(); } } }

以上所述是小编给大家分享的Java连接Sql数据库经常用到的操作,希望对大家有所帮助。

以上就是Java连接Sql数据库经常用到的操作的详细内容,更多请关注gaodaima搞代码网其它相关文章!


搞代码网(gaodaima.com)提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发送到邮箱[email protected],我们会在看到邮件的第一时间内为您处理,或直接联系QQ:872152909。本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:Java连接Sql数据库经常用到的操作

喜欢 (0)
[搞代码]
分享 (0)
发表我的评论
取消评论

表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址