Java连接Sql数据库经常用到的操作
程序员文章站
2024-03-09 10:52:05
废话不多说了,直接给大家分享java操作sql数据库常见的连接问题。
1.连接,查询,更新,关闭
这几个数据基础操作,所以放到一起,写成一个工具类的模式,也就是mode...
废话不多说了,直接给大家分享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 < params.length; i++) { //这里是从1开始设置参数的 ps.setstring(i+1,params[i]); } k = ps.executeupdate(); } catch (sqlexception e) { e.printstacktrace(); system.err.println("数据库更新异常"); } return k>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(); } catch (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数据库经常用到的操作,希望对大家有所帮助。