package database;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
public class DbUtils {
//driver
public final static String DRIVER="com.mysql.jdbc.Driver";
public final static String URL="jdbc:mysql:127.0.0.1:3306/labtask_db";
public final static String USER="root";
public final static String PASSWORD="root";
/**
* 获取连接
* @return
*/
public Connection getConn(){
Connection conn=null; //数据库连接
try{
//加载驱动:在静态初始化器中已经注册,所以调用JDBC的时候只需Class.forName(XXX);
Class.forName(DRIVER);
//通过驱动管理的DriverManager中的getConnection方法获得连接对象:建立数据库连接池
conn=DriverManager.getConnection(URL, USER, PASSWORD);
}catch(Exception e){
//e.getMessage:获得具体的异常名称
//e.printStackTrace():获得详细异常,异常名称、具体位置等
System.out.println("连接失败"+e.getMessage());
}
return conn; //连接数据库返回值不能为空
}
/**
* 创建执行SQL命令的Statement对象
* @param conn
* @return
*/
//Statement是一个接口,没有具体实现,通过conn.createStatement()创建具体对象
public Statement createStatement(Connection conn){
Statement stmt=null; //数据库操作
try{
//由当前数据库连接生成一个数据操作对象stmt,不可new,所有操作都经过操作对象传达给数据库服务器
stmt=conn.createStatement();
}catch(SQLException e){
System.out.println("创建执行SQL命令的Statement对象!"+e.getMessage());
}
return stmt;
}
/**
*
* @param conn
* @param sql
* @return
*/
//PreparedStatement:预编译语句,相同SQL语句执行多次就使用
//prepareStatement会先初始化SQL,先把这个SQL提交到数据库中进行预处理,多次使用可提高效率
//createStatement不会初始化,没有预处理,没次都是从0开始执行SQL
public PreparedStatement creaPreparedStatement(Connection conn,String sql){
PreparedStatement stmt=null; //申明一个为PreparedStatement的对象
try{
stmt=conn.prepareStatement(sql);
}catch(SQLException e){
e.printStackTrace();
}
return stmt;
}
/**
*
* @param conn
* @param stmt
* @param sql
* @return
*/
//执行SQL语句,返回的是单个ResultSet对象
public ResultSet executeQuery(Connection conn,Statement stmt,String sql){
ResultSet rs=null;
try{
rs=stmt.executeQuery(sql);
}catch(SQLException e){
e.printStackTrace();
}
return rs;
}
/**
*
* @param sql
* @return
*/
//执行给定SQL语句,返回值是更新的数据记录量
public int executeUpdate(String sql){
Connection conn=null;
Statement stmt=null;
int c=0;
try{
conn=getConn();
//用这个stmt数据操作对象进行数据更新
stmt=createStatement(conn);
c=stmt.executeUpdate(sql);
}catch(SQLException e){
}finally{//异常发生,方法返回之前,总是要执行的代码
closeConnAndStmt(conn,stmt,null); //关闭连接
}
return c;
}
/**
*
* @param conn
* @param stmt
* @param rs
*/
//关闭连接,避免占用资源
public void closeConnAndStmt(Connection conn,Statement stmt,ResultSet rs){
try{
if(rs!=null){
rs.close();
}
if(stmt!=null){
stmt.close(); //操作关闭
}
if(conn!=null){
conn.close(); //数据库关闭
}
}catch(SQLException e){
e.printStackTrace();
}
}
/**
* 测试
* @throws Exception
*/
public static void main(String[] args) throws Exception{
DbUtils dbUtils=new DbUtils();
Connection conn=dbUtils.getConn();
Statement stmt=dbUtils.createStatement(conn);
String stuNo="20120304";
String stuName="可可";
String sql="select * from t_student where 1=1";
ResultSet rs=dbUtils.executeQuery(conn, stmt, sql);
while(rs.next()){
String clumn=rs.getString(1);
System.out.println(clumn);
}
}
}
MyEclipse连接SQL
最新推荐文章于 2021-03-27 22:41:02 发布