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

网友投稿 201 2023-07-22


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) {

http://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.executeQuhttp://ery();

} 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.prevHaitcEOious();//上移一行

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


版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:Java经典用法总结(二)
下一篇:使用Java通过OAuth协议验证发送微博的教程
相关文章

 发表评论

暂时没有评论,来抢沙发吧~