sqlserver、mysql数据库连接

数据库连接

  • Sqlserver

 

 

 

 

 

 

 

 

 

 

 

 

图中BussinessObject是业务对象,是使用DAO模式的客户端;DataTransferObject数据传输对象,在应用程序不同层次之间传输对象,在一个分布式应用程序中,通常可以提高整理的性能;DataObjectAcces数据输入/输出对象封装了对数据源的一些基本操作;DataSource指的是数据源。可以从图中看出,DAO模式分离了业务逻辑和数据罗即将,是的编写的软件具有良好的层次式体系结构。本系统为了方便数据库的操作,主要使用DBContent的对象来接一个数据库(建立一个类DBContent),代码如下:

 

public DBContent(){

String CLASSFORNAME="com.microsoft.sqlserver.jdbc.SQLServerDriver";//连接数据库的驱动

String url="jdbc:sqlserver://localhost:1433;databaseName=db_wangba";

String user="sa";//连接数据库的用户名

String password="sa";//连接数据库的密码

try{

Class.forName(CLASSFORNAME);

con= DriverManager.getConnection(url,user,password);//加载数据库的驱动

stmt=con.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_UPDATABLE);

}

catch(Exception ex){

ex.printStackTrace();

}

}

在程序需要连接数据库的地方,只需要生成一个DBConnet的对象,就可以对数据库进行连接并操作。

二、mysql

package com.dao;

import java.sql.Connection;

import java.sql.DriverManager;

import java.sql.PreparedStatement;

import java.sql.ResultSet;

import java.sql.SQLException;

 

public class DB

{

private Connection con;

 

private PreparedStatement pstm;

 

private String user = "root";

 

private String password = "root";

 

private String className = "com.mysql.jdbc.Driver";

 

private String url = "jdbc:mysql://localhost:3306/db_wangba?useUnicode=true&characterEncoding=UTF-8";

 

public DB()

{

try

{

Class.forName(className);

} catch (ClassNotFoundException e)

{

System.out.println("加载数据库驱动失败!");

e.printStackTrace();

}

}

 

/** 创建数据库连接 */

public Connection getCon()

{

try

{

con = DriverManager.getConnection(url, user, password);

} catch (SQLException e)

{

System.out.println("创建数据库连接失败!");

con = null;

e.printStackTrace();

}

return con;

}

 

public void doPstm(String sql, Object[] params)

{

if (sql != null && !sql.equals(""))

{

if (params == null)

params = new Object[0];

 

getCon();

if (con != null)

{

try

{

System.out.println(sql);

pstm = con.prepareStatement(sql,

ResultSet.TYPE_SCROLL_INSENSITIVE,

ResultSet.CONCUR_READ_ONLY);

 

for (int i = 0; i < params.length; i++)

{

pstm.setObject(i + 1, params[i]);

}

pstm.execute();

} catch (SQLException e)

{

System.out.println("doPstm()方法出错!");

e.printStackTrace();

}

}

}

}

 

public ResultSet getRs() throws SQLException

{

return pstm.getResultSet();

}

 

public int getCount() throws SQLException

{

return pstm.getUpdateCount();

}

 

public void closed()

{

try

{

if (pstm != null)

pstm.close();

} catch (SQLException e)

{

System.out.println("关闭pstm对象失败!");

e.printStackTrace();

}

try

{

if (con != null)

{

con.close();

}

} catch (SQLException e)

{

System.out.println("关闭con对象失败!");

e.printStackTrace();

}

}

}

 

一些注释

参数 int type 

ResultSet.TYPE_FORWORD_ONLY 结果集的游标只能向下滚动。 

ResultSet.TYPE_SCROLL_INSENSITIVE 结果集的游标可以上下移动,当数据库变化时,当前结果集不变。 

ResultSet.TYPE_SCROLL_SENSITIVE 返回可滚动的结果集,当数据库变化时,当前结果集同步改变。 

参数 int concurrency 

ResultSet.CONCUR_READ_ONLY 不能用结果集更新数据库中的表。 

ResultSet.CONCUR_UPDATETABLE 能用结果集更新数据库中的表。 

 

 

查询语句 

ResultSet re=stmt.executeUpdate(SQL语句);用来更新数据库信息或插入数据 

ResultSet re=stmt.executeQuery(SQL语句);用来查询数据库信息 

当我们使用ResultSet re=stmt.executeQuery(SQL语句)查询后,我们可以使用下列方法获得信息: 

public boolean previous() 将游标向上移动,该方法返回boolean型数据,当移到结果集第一行之前时,返回false。 

public void beforeFirst 将游标移动到结果集的初始位置,即在第一行之前。 

public void afterLast() 将游标移到结果集最后一行之后。 

public void first() 将游标移到结果集的第一行。 

public void last() 将游标移到结果集的最后一行。 

public boolean isAfterLast() 判断游标是否在最后一行之后。 

public boolean isBeforeFirst() 判断游标是否在第一行之前。 

public boolean ifFirst() 判断游标是否指向结果集的第一行。 

public boolean isLast() 判断游标是否指向结果集的最后一行。 

public int getRow() 得到当前游标所指向行的行号,行号从1开始,如果结果集没有行,返回0。 

public boolean absolute(int row) 将游标移到参数row指定的行号。如果row取负值,就是倒数的行数,absolute(-1)表示移到最后一行,absolute(-2)表示移到倒数第2行。当移动到第一行前面或最后一行的后面时,该方法返回false 

 

JDBC中开启和结束事务

  1. 开始事务:con.setAutoConnitted(false); //false表示不自动提交
  2. 结束事务:
  1. con.connit();
  2. con.rollback();
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值