原生的JDBC生产工厂连接数据库

一、代码结构

二、JDBCFactory.java

package com.test;

import java.io.IOException;
import java.io.InputStream;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.Properties;

public class JDBCFactory {
    //定义静态属性
    private static String DRIVER;
    private static String URL;
    private static String USERNAME;
    private static String PASSWORD;
    
    //静态代码块,用来加载资源文件中的信息,且只会加载一次
    static{
        //1、加载数据配置文件(资源对象)
        Properties pro=new Properties();
        //2、将资源读取成字节输入流
        InputStream is=JDBCFactory.class.getResourceAsStream("jdbc.sqlserver.properties");
        try {
            //3、通过资源对象加载字节输入流
            pro.load(is);
            //4、资源对象通过key来获取对应的文件中的value
            DRIVER=pro.getProperty("jdbc.driver");
            URL=pro.getProperty("jdbc.url");
            USERNAME=pro.getProperty("jdbc.username");
            PASSWORD=pro.getProperty("jdbc.password");
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }
    
    /**建立数据库连接的静态方法
     * @return 如果有异常,则会返回null
     */
    public static Connection getConn(){
        Connection ct=null;
        try {
            //1、加载驱动
            Class.forName(DRIVER);
            //2、得到连接
            ct=DriverManager.getConnection(URL,USERNAME,PASSWORD);
        } catch (Exception e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        return ct;
    }
    
    /**
     * 静态方法,用来关闭资源,注意关闭顺序,否则可能报错
     */
    public static void closeAll(Connection ct,Statement st,ResultSet rs){
        if(rs!=null){
            try {
                rs.close();
            } catch (SQLException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }
        if(st!=null){
            try {
                st.close();
            } catch (SQLException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }
        if(ct!=null){
            try {
                ct.close();
            } catch (SQLException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }
    }

}

三、jdbc.sqlserver.properties

jdbc.driver=com.microsoft.jdbc.sqlserver.SQLServerDriver
jdbc.url=jdbc:microsoft:sqlserver://127.0.0.1:1433;databaseName=spdb1
jdbc.username=sa
jdbc.password=m123

四、TestClass.java

package com.test;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Timestamp;


public class TestClass {
    Connection ct;
    PreparedStatement ps=null;
    ResultSet rs;
    
    public static void main(String[] args) {
        TestClass tc=new TestClass();
        tc.ct=JDBCFactory.getConn();
        String sql="insert into student_table(stuname,stuage,stusex,stubirth,stusubj) values(?,?,?,?,?)";
        try {
            tc.ps=tc.ct.prepareStatement(sql);
            tc.ps.setString(1, "哈哈");
            tc.ps.setInt(2, 20);
            tc.ps.setString(3, "男");
            tc.ps.setTimestamp(4, null);
            tc.ps.setString(5, "呵呵");
            tc.ps.executeUpdate();
        } catch (SQLException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }finally{
            JDBCFactory.closeAll(tc.ct, tc.ps, null);
        }
    }
}

五、说明

jbdc的常用API:
1.Connection:数据库的链接对象
2.statement:数据库sql执行对象
3.preparedStatment:sql的预编译处理对象,是statement子接口
4.resultset:返回查询的结果集

jdbc开发步骤:
1.在项目中加入驱动jar包
2.写jdbc链接代码

preparedStatment 预编译sql命令接口:
1.会对sql语句进行编译检查,可以用参数占位符的方式编写sql语句
2.作用:比普通statement接口执行效率更高。可以防止sql注入的侵入

猜你喜欢

转载自www.cnblogs.com/wlxslsb/p/9787651.html