在学习制作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 classSQLHelper {privateSQLHelper()
{
}
}
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 staticConnection Getconn(){try{
Class.forName(driver);returnDriverManager.getConnection(url,user,password);
}catch(Exception ex){return null;
}
}
4.创建stm
private staticStatement Getstatement(){
conn=Getconn();if(conn==null)return null;try{returnconn.createStatement();
}catch(SQLException e) {return null;
}
}
5.执行sql语句返回结果
执行查询语句,返回结果集
public staticResultSet 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 intExcueteNonQuery(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 staticObject ExcueteScalar(String str){
stm=Getstatement();
Object obj="null";if(stm==null){Close();returnobj;}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 voidClose(){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文档,不同的实例连接不同数据库。