在学习制作jsp网站时,学习写了一份SQLHelper文档(静态调用),内容及其精简,考虑不周之处甚多,不过新手学习还是勉强可以用的。?
首先,看一下正常JDBC的使用过程.
//导入包
import java.sql.*;
//几个需要用到的字符串
static final String driver = "com.mysql.jdbc.Driver";
//第一项固定,第二项是地址和端口,第三项是数据库名
static final String url = "jdbc:mysql://localhost:3306/test";
//数据库名和密码
static final String user = "username";
static final String password = "password";
//第一步:打开驱动
Class.forName(driver);
//第二步:打开连接
Connection conn = DriverManager.getConnection(url,user,password);
//第三步:创建SQL语句和执行SQL语句
Statement stmt = conn.createStatement();
String sql= "SELECT id FROM Employees";
ResultSet rs = stmt.executeQuery(sql);
//第四步:处理返回的结果
while(rs.next()){
//获取结果
int id = rs.getInt("id");
//处理结果
System.out.print("ID: " + id);
}
//第五步:关闭连接
rs.close();
stmt.close();
conn.close();
现在开始,创建我们的SQLHelper。
这里SQLHelper文档为静态方法,直接调用,所以令其无法实例化。
1.首先要导入包,建立类
import java.sql.*;
public class SQLHelper {
private SQLHelper()
{
}
}
2.在连接JDBC的时候,我们会用到相对不变的一些字符串
这些字符串为静态的属性。
private static Connection conn=null;
private static Statement stm=null;
private static String driver="com.mysql.jdbc.Driver";
private static String url="jdbc:mysql://localhost:3306/test";
private static String user="username";
private static String password="password";
如果使用时会有使用不同数据库,或其他设置时,可以写个方法修改这些字符串。例如:public static void seturl(str){url=str;}
3.打开驱动和连接
private static Connection Getconn(){
try{
Class.forName(driver);
return DriverManager.getConnection(url,user,password);
}catch(Exception ex){
return null;
}
}
4.创建stm
private static Statement Getstatement(){
conn=Getconn();
if(conn==null)return null;
try {
return conn.createStatement();
} catch (SQLException e) {
return null;
}
}
5.执行sql语句返回结果
执行查询语句,返回结果集
public static ResultSet ExcueteQuery(String str){
stm=Getstatement();//包含创建conn和stm
ResultSet rs=null;
if(stm==null){Close();return rs;}//判断jdbc连接成功与否
try {
rs= stm.executeQuery(str);
} catch (SQLException e) {
rs= null;
Close();//关闭连接的函数,下文写
}
return rs;//返回函数结果
}
执行操作语句,返回受影响行数
public static int ExcueteNonQuery(String str){
stm=Getstatement();//包含创建conn和stm
int i=0;
if(stm==null){Close();return -1;}//判断jdbc连接成功与否
try {
i= stm.executeUpdate(str);
} catch (SQLException e) {
i= -1;
Close();//关闭连接的函数,下文写
}
return i;//返回函数结果
}
查询某个数据库的值
public static Object ExcueteScalar(String str){
stm=Getstatement();
Object obj="null";
if(stm==null){Close();return obj;}
try {
ResultSet rs=stm.executeQuery(str);//执行查询语句,返回第一行第一个结果
if(rs!=null){
rs.next();
obj=rs.getObject(1);
}
} catch (SQLException e) {
obj= "null";
Close();
}
return obj;//返回结果,函数类型也可以直接设置为String
}
此三个函数为外部类调用的接口方法,也是主要的查询方法,所以这三个方法为公有public类型,其他方法为私有private类型。调用如下:
//查询返回表
ResultSet rs=SQLHelper.ExcuteQuery(sql);
//插入、更新、删除数据
SQLHelper.ExcuteNonQuery(sql);
//查询某个值
String s=SQLHelper.ExcuteScalar(sql).ToString();
6.关闭连接
private static void Close(){
if(stm!=null){
try {
stm.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
if(conn!=null){
try {
conn.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
至此,简单的SQLHelper书写完成,它包括了三个接口用于执行SQL语句。(在执行查询时,因为在错误时返回了rs=null,因此外部类在查询时,先要判断一次结果是否为null)
思考: 1.连接不同的数据库,可以添加方法setURL()等修改原有字符串
2.错误提示,可以增加一个属性ErrorMessage,在出现不同异常时,向其中写入,最后提供一个getError();
3.仿照4.5,可以写PreparedStatement,CallableStatement类型的方法
4.多数据库连接,可以修改成实例化的SQLHelper文档,不同的实例连接不同数据库。