Java连接Sql数据库经常用到的操作
废话不多说了,直接给大家分享java操作sql数据库常见的连接问题。
1.连接,查询,更新,关闭
这几个数据基础操作,所以放到一起,写成一个工具类的模式,也就是model2模式的sql工具.这里本想把其他操作都加进去,比如事务处理,但是目前还没想到比较完美的方法,具体看代码吧,注释很详细
importjava.sql.*; importjava.util.Iterator; importjava.util.Map; importjava.util.Set; /** *Createdbynl101on2016/1/29. */ publicclassSQLBean{ //初始化操作都写在前面 Connectionconn=null; PreparedStatementps=null; ResultSetrs=null; StringdriverName="oracle.jdbc.driver.OracleDriver"; Stringurl="jdbc:oracle:thin:@localhost:1521:orcl"; StringuserName="SCOTT"; StringpassWord="123456"; /** *初始化连接,获得conn */ publicSQLBean(){ try{ Class.forName(driverName); conn=DriverManager.getConnection(url,userName,passWord); }catch(ClassNotFoundExceptione){ e.printStackTrace(); System.err.println("数据库链接异常"); }catch(SQLExceptione){ e.printStackTrace(); System.err.println("数据库链接异常"); } } /* 处理事务的函数欠缺 */ /** *创建数据库更新函数 *@paramsql对应的更新sql语句 *@paramparams需要附加的参数 *@returntrue更新成功false更新失败 */ publicbooleanupdate(Stringsql,String[]params){ intk=0; try{ ps=conn.prepareStatement(sql); for(inti=0;i<params.length;i++){ //这里是从1开始设置参数的 ps.setString(i+1,params[i]); } k=ps.executeUpdate(); }catch(SQLExceptione){ e.printStackTrace(); System.err.println("数据库更新异常"); } returnk>0?true:false; } /** *数据库查询函数 *@paramsql要查询的qsl语句 *@paramparams附加参数 *@return查询结果集 */ publicResultSetquery(Stringsql,String[]params){ try{ ps=conn.prepareStatement(sql); for(inti=0;i<params.length;i++){ ps.setString(i+1,params[i]); } rs=ps.executeQuery(); }catch(SQLExceptione){ e.printStackTrace(); System.err.println("数据库查询异常"); } returnrs; } /** *关闭数据库语句 */ publicvoidclose(){ try{ if(rs!=null)rs.close();rs=null; if(ps!=null)ps.close();ps=null; if(conn!=null)conn.close();conn=null; }catch(SQLExceptione){ e.printStackTrace(); } } }
写成这样,其他类调用的话可以按照下面方法.
SQLBeansqlBean=newSQLBean(); String[]params={};//如果有参数则写进去 ResultSetrs=sqlBean.query("selectenamefromemp",params);//sql语句 //循环取出 try{ while(rs.next()){ System.out.println(rs.getString(1)); } }catch(SQLExceptione){ e.printStackTrace(); sqlBean.close();//异常则关闭连接 } sqlBean.close();//关闭数据库连接
2.事务的处理
事务的处理,总是先取消自动提交,然后执行命令,最后提交,然后发生异常则回滚,至于怎么写成一个方法,暂时还没想到好办法
importbean.SQLBean; importjava.sql.*; /** *Createdbynl101on2016/1/29. */ publicclasstest{ publicstaticvoidmain(String[]args){ Connectionconn=null; Statementps=null; StringdriverName="oracle.jdbc.driver.OracleDriver"; Stringurl="jdbc:oracle:thin:@localhost:1521:orcl"; StringuserName="SCOTT"; StringpassWord="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(ClassNotFoundExceptione){ e.printStackTrace(); System.err.println("数据库链接异常"); }catch(SQLExceptione){ e.printStackTrace(); System.err.println("事务处理异常"); try{ if(conn!=null){ conn.rollback();//回滚操作 conn.setAutoCommit(true); } }catch(SQLExceptione1){ 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(SQLExceptione){ e.printStackTrace(); } } } }
3.调用存储过程
call=ct.prepareCall("{callsp_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)); //循环取出表 ResultSetrs=(ResultSet)call.getObject(6); while(rs.next()){ for(inti=0;i<7;i++){ System.out.print(rs.getString(i+1)+""); } System.out.println(); }
4.可移动的结果集
sun只是提供了接口.具体能不能操作,这个要看你引用的JDBC驱动是否支持
importjava.sql.*; publicclassTestScroll{ publicstaticvoidmain(Stringargs[]){ try{ neworacle.jdbc.driver.OracleDriver(); Stringurl="jdbc:oracle:thin:@192.168.0.1:1521:SXT"; Connectionconn=DriverManager .getConnection(url,"scott","tiger"); Statementstmt=conn.createStatement( ResultSet.TYPE_SCROLL_INSENSITIVE,//设置该rs可以滚动 ResultSet.CONCUR_READ_ONLY);//设置该rs为只读 ResultSetrs=stmt .executeQuery("select*fromemporderbysal"); 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(SQLExceptione){ e.printStackTrace(); } } }
5.可更新的结果集
importjava.sql.*; publicclassTestUpdataRs{ publicstaticvoidmain(Stringargs[]){ try{ neworacle.jdbc.driver.OracleDriver(); Stringurl="jdbc:oracle:thin:@192.168.0.1:1521:SXT"; Connectionconn=DriverManager.getConnection(url,"scott","tiger"); Statementstmt=conn.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_UPDATABLE); ResultSetrs=stmt.executeQuery("select*fromemp2"); 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(SQLExceptione){ e.printStackTrace(); } } }
以上所述是小编给大家分享的Java连接Sql数据库经常用到的操作,希望对大家有所帮助。