欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

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