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数据库经常用到的操作,希望对大家有所帮助。