📄 basedao.java
字号:
package db;
import java.sql.*;
import java.util.List;
import java.sql.PreparedStatement;
import java.util.ArrayList; //预状态通道(预编译)
/**
* <p>Title:操作数据库的通用类 </p>
* <p>Description: </p>
* <p>Copyright: Copyright (c) 2006</p>
* <p>Company: </p>
* @author not attributable
* @version 1.0
*/
public class Basedao implements DBRes
{
private Connection conn;
private Statement st;
private ResultSet rs;
private PreparedStatement ps;
// private String url="jdbc:microsoft:sqlserver://192.168.0.8:1433;DatabaseName=netoa";
// private String username="sa";
// private String password="";
public Basedao()
{
}
//负责建立到数据库的连接
public void getConnection()
{
try{
conn = DriverManager.getConnection(url, username, password);
//如果是access数据库,下面这句话要去掉
//conn.setAutoCommit(false);//设定手动提交
}catch (SQLException ex){
ex.printStackTrace();
}
}
//负责在连接的基础上建立状态通道
public void getStatement()
{
try{
if(conn==null||conn.isClosed())
{
getConnection();
}
st = conn.createStatement();
}catch(SQLException ex){
ex.printStackTrace();
}
}
//负责执行查询
public ResultSet doQuery(String sql)
{
try{
this.getStatement(); //这个地方执行该方法表示每执行一个操作之前要重新创建一个通道
rs = st.executeQuery(sql);
//st.execute(sql);
//rs=st.getResultSet();
}catch (SQLException ex){
ex.printStackTrace();
}
//this.Close();//在内部把关闭rs了
return rs;
}
//负责执行新增(可以执行增删改) insert into dept values(1,'财务部',3,'财务相关工作');
public boolean doInsert(String sql)
{
boolean isCorrect=false;//新增成败的标示
try{
this.getStatement(); //这个地方执行该方法表示没执行一个操作之前要重新创建一个通道
boolean is=st.execute(sql); //execute可以执行增删改查sql,当执行查询的sql时,该方法返回的是true;如果执行的是增删改,那么返回的false
// if(is)
// {
// rs=st.getResultSet();
// while(rs.next())
// {
// System.out.println(rs.getInt(1)+"---"+rs.getString(2)+"---"+rs.getString(3)+"----"+rs.getInt(4));
// }
// }
System.out.println(is);
isCorrect=true;
conn.commit();
}catch(Exception e){
e.printStackTrace();
conn.rollback();
}finally{
this.Close();
return isCorrect;
}
}
//负责执行修改和删除
public boolean doUpdateOrDelete(String sql)
{
boolean isCorrect=false;//修改和删除成败的标示
try{
this.getStatement(); //这个地方执行该方法表示没执行一个操作之前要重新创建一个通道
int i=st.executeUpdate(sql); //executeUpdate可以执行增删改,但不能执行查,该方法返回的是int
System.out.println(i);
isCorrect=true;
conn.commit();
}catch(Exception e){
e.printStackTrace();
conn.rollback();
}finally{
this.Close();
return isCorrect;
}
}
public List getCols(String sql)
{
List colslist=new ArrayList();
rs=doQuery(sql);
try{
ResultSetMetaData md=rs.getMetaData();
int colscount=md.getColumnCount();
while(rs.next())
{
for(int i=1;i<=colscount;i++)
{
String value=rs.getString(i);
colslist.add(value);
}
}
}catch (SQLException ex){
ex.printStackTrace();
}
return colslist;
}
//sql批处理(局限于增删改)
public boolean doBatch(List list)
{
boolean isCorrect=false;
getStatement(); //这个地方执行该方法表示没执行一个操作之前要重新创建一个通道
try{
for(int i = 0; i < list.size(); i++)
{
st.addBatch(list.get(i).toString());
}
int[] effects = st.executeBatch();
for(int i=0;i<effects.length;i++)
{
System.out.println(effects[i]);
}
conn.commit();
isCorrect=true;
}catch(Exception e){
e.printStackTrace();
conn.rollback();
}finally{
this.Close();
return isCorrect;
}
// this.Close();
// return isCorrect;
}
//select yhmc from xtyhb where yhbh=1--select count(*) from xtyhb
//通用得到某个表中总记录数
//select count(*) from dept
//select max(deptid) from dept
public int getIntValue(String sql)
{
int count=0;
try{
rs=doQuery(sql);
rs.next();
count=rs.getInt(1);
}catch(Exception e){
e.printStackTrace();
}
this.Close();
return count;
}
public String getValue(String sql)
{
String value=null;
try{
rs=this.doQuery(sql);
if(rs.next())
{
value=rs.getString(1);
}
}catch(Exception e){
e.printStackTrace();
}
this.Close();
return value;
}
//得到主键值select max(yhbh) from xtyhb
public int getPK(String sql)
{
int max=0;
rs=doQuery(sql);
try{
if(rs.next())
{
max=rs.getInt(1);
}
}catch(Exception e){
e.printStackTrace();
}
this.Close();
return max+1;
}
//得到记录字段的值按顺序放到容器中
public List getColsList(String sql)
{
List colslist=new ArrayList();
ResultSet rs=doQuery(sql);
try{
ResultSetMetaData rsmd = rs.getMetaData();//只取相关的数据
int count=rsmd.getColumnCount();//执行的sql中有几个字段
while(rs.next())
{
for(int i=1;i<=count;i++)
{
colslist.add(rs.getString(i));
}
}
}catch(SQLException ex){
ex.printStackTrace();
}
Close();
return colslist;
}
/********************************************************preparedstatement*******************************************/
public boolean preWrite(String sql,String[] values)
{
boolean isCorrect=false;
try{
if(conn==null||conn.isClosed())
this.getConnection();
ps=conn.prepareStatement(sql);
for(int i=0;i<values.length;i++)
{
ps.setString(i+1,values[i]);
}
ps.execute();
isCorrect=true;
conn.commit();
}catch(Exception e){
e.printStackTrace();
conn.rollback();
}finally{
Close();
return isCorrect;
}
}
public ResultSet preQuery(String sql,String[] values)
{
try{
if(conn==null||conn.isClosed())
this.getConnection();
ps=conn.prepareStatement(sql);
for(int i=0;i<values.length;i++)
{
ps.setString(i+1,values[i]);
}
//ResultSet rs=ps.executeQuery();//错误
rs=ps.executeQuery();
}catch(Exception e){
e.printStackTrace();
}
return rs;
}
public void testPreparedStatment()
{
try{
if(conn==null||conn.isClosed())
this.getConnection();
ps=conn.prepareStatement("insert into xtyhb values(?,?,?,?)");
ps.setString(1,"2");
ps.setString(2,"ee");
ps.setString(3,"123456");
ps.setString(4,"2");
boolean is=ps.execute(); //可以执行增删改查
conn.commit();
}catch(SQLException ex){
ex.printStackTrace();
try{
conn.rollback();
}catch (SQLException ex1){
ex1.printStackTrace();
}
}
}
//关闭资源
public void Close()
{
try{
if(rs!=null)
rs.close();//回收资源
if(st!=null)
st.close();
if(ps!=null)
ps.close();
if(conn!=null&&!conn.isClosed())
conn.close();
}catch (SQLException ex){
ex.printStackTrace();//
System.out.println(ex.getMessage());
}
}
static{
try{
Class.forName(driver).newInstance();
}catch(Exception e){
e.printStackTrace();
}
}
public static void main(String[] args) throws Exception{
Basedao bc = new Basedao();
ResultSet rs =bc.doQuery("select * from userinfo");
while(rs.next())
{
System.out.println(rs.getString(1)+"\t" +rs.getString(2));
}
bc.Close();
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -