db连接类
db就是database(数据库),下面我讲演示如何通过java语言通过jdbc的方式来连接到你所要的数据库,本例中以oracle为参考。
代码实现
首先我们先创造几个等会会用到的对象
- 创造一个数据库连接对象(Connection对象,代表与数据源进行的唯一会话。)。
- 创建编译语句对象(Statement对象,建立了到特定数据库的连接之后,就可用该连接发送 SQL 语句。)。
- 创建预编译语句对象(PreparedStatement对象, 实例包含已编译的 SQL 语句。这就是使语句“准备好”)。
- 创建结果集对象(ResultSet对象, 结果集(ResultSet)是数据中查询结果返回的一种对象,可以说结果集是一个存储查询结果的对象,但是结果集并不仅仅具有存储的功能,他同时还具有操纵数据的功能,可能完成对数据的更新等.)
ps:结果集对象在oracle中如果是查询会返回一个resultset,但是当插入,删除和更新值的时候返回的是被影响的行数,所以这时候需要用int类型来接收这个值。
// 创建一个数据库连接
Connection connection = null;
// 创建编译语句对象
Statement stat =null;
// 创建预编译语句对象
PreparedStatement pstat = null;
// 创建结果集对象
ResultSet rs1 = null;
int rs2 ;
接着我们编写我们的第一个连接方法,这是整个db数据库连接类的基础。
我们需要4个参数:
- driverName,这个是你驱动的名称。
- URL,你数据库的地址,比如我jdbc:oracle:thin:@localhost:1521:stulibrary中,localhost表示在本机,1521表示数据库的端口号,stulibrary表示数据库的名称。
- userName,表示你的数据库登录名。
- pwd,表示登录名的登录密码
//驱动名称
private static final String driverName="oracle.jdbc.driver.OracleDriver";
//数据库的地址(通过端口和SID找到对应的数据库)
private static final String URL="jdbc:oracle:thin:@localhost:1521:stulibrary";
//数据库登录用户名
private static final String userName="ADMIN";
//数据库登录密码
private static final String pwd="123456";
下面是具体的连接类,定义好变量之后我们的操作将会很简单。
这个类返回的是connetion对象,这是整个连接类最基础的对象,所有操作都要围绕这个对象展开。我们需要传入刚才定义的驱动,URL,用户名和密码,如果连接成功将会在命令行输出连接成功。(如果想测试记得写主类哦,或者在JUNIT内测试也可行,建议后者)
public Connection getConnection(){
try {
//加载oracle驱动
Class.forName(driverName);
//通过驱动获取数据库的连接
connection = DriverManager.getConnection(URL,userName,pwd);
System.out.println("连接成功");
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return connection;
}
下面我们来写具体的操作的方法
查询
在查询方法中要求输入的sql语句,这个是用String类型定义的数据库PL/SQL语句。
executeQuery(sql)方法就是用来用sql查询的。
public ResultSet query(String sql){
try {
//通过刚才的getConnection方法获得一个连接的对象。
connection = getConnection();
//向数据库中发送你的sql语句
stat = connection.createStatement();
//获得所查询的结果,返回的是Resultset对象
rs1 = stat.executeQuery(sql);
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return rs1;
}
更新
executeUpdate(sql)可以用来插入,删除和更新值。
其他操作与查询相同,见查询注释
public int update(String sql){
try {
connection = getConnection();
stat = connection.createStatement();
rs2 = stat.executeUpdate(sql);
}
catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return rs2;
}
替换
替换类中需要sql语句和一个字符串。
prepareStatement时sql语句可以这样写
UPDATE COFFEES SET SALES = ? WHERE COF_NAME LIKE ?
用问号代替所需要填入的值,然后通过pstat.setString方法再把值赋给它,具体实现是pstat.setString(?的位置),需要替换的字符串值)。
ps:需要注意的是?的位置从第一个开始,不是第0个,比如上条语句需要给第一个?赋值1时就需要这样写pstat.setString(1,“1”);
public void update(String sql, String[] args){
try {
connection = getConnection();
pstat = connection.prepareStatement(sql);
System.out.println(sql);
System.out.println(args.length);
for (int i = 0; i < args.length; i++) {
pstat.setString(i+1, args[i]);
System.out.println(pstat);
}
pstat.executeUpdate();
connection.commit();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
删除
值得注意的是,这里就是我刚才所讲的,返回的受影响的行数,所以这里人返回的是int类型的rs2。在之后的编写中可以通过这个rs2判断是否删除成功。
public int delete(String sql){
try {
connection = getConnection();
stat = connection.createStatement();
rs2 = stat.executeUpdate(sql);
return rs2;
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return 0;
}
最后很重要的一步,关闭数据库连接,释放资源
public void close(){
try {
if(rs1!=null) {
rs1.close();
}
if(stat!=null) {
rs1.close();
}
if(pstat!=null) {
rs1.close();
}
if(connection!=null) {
rs1.close();
}
} catch (SQLException e) {
// TODO: handle exception
}
}
至此这个db数据库连接类就完成了,你可以通过更换中间连接类所讲的一些变量来适应你的数据库,这样一个万能的数据库连接类就完成了。
最后注意
请先保证你的数据库可正常连接,并且一些驱动及URL地址等信息填写正确,不然就会出现连接不上的问题。