javaweb之mysql数据库与jdbc(1)


---恢复内容开始---

  我之前一直想在自己搭建的博客上记录自己的学习历程,由于知识的欠缺,这条路没了尽头最准决定注册一个博客,记录自己的学习历程,以便于以后复习,也可以通过博客和更多的人交流,共同进步。这也是我第一次写博客,有不足之处望指正。(之前学过的有关于Java的知识会后期补充上来)

MySql与JDBC

JDBC

 a、JDBC(Java DataBase Connectivity):SUN公司提供的一种数据库访问规则、规范, 由于数据库种类较多,并且java语言使用比较广泛,sun公司就提供了一种规范,让其他的数据库提供商去实现底层的访问规则。 我们的java程序只要使用sun公司提供的jdbc驱动即可。

 b、使用JDBC的基本步骤(掌握):

(1)注册驱动:

DriverManager.registerDriver(new com.mysql.jdbc.Driver());
View Code

(2)建立连接:

    //DriverManager.getConnection("jdbc:mysql://localhost/test?user=monty&password=greatsqldb");(第一种方法)

           conn = DriverManager.getConnection("jdbc:mysql://localhost/student", "root", "root");(第二种方法)

    注:localhost:表示本机;
           student:数据库名;
           root依次为:用户名、密码
View Code

(3)创建statement:

st = conn.createStatement();
View Code

(4)执行sql 语句,得到ResultSet:

String sql = "select * from t_stu";
rs = st.executeQuery(sql);
    注:t_stu为数据库中的表名
View Code

(5)遍历每一条记录:

while(rs.next()){
               int id = rs.getInt("id");
               String name = rs.getString("name");
               int age = rs.getInt("age");
               System.out.println("id="+id + "===name="+name+"==age="+age);
               
View Code

(6)释放内存:

if (rs != null) {
            try {
                rs.close();
            } catch (SQLException sqlEx) { } // ignore 
            rs = null;
        }
View Code

    完整代码实例:

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;

public class demo2 {
    /**
     * @param args
     *JDBC入门事例
     */
    public static void main(String[] args) {
        Connection conn =null;
        Statement st = null;
        ResultSet rs = null;
        try {
            //1、注册驱动
            //DriverManager.registerDriver(new com.mysql.jdbc.Driver());//在mysql4.0之后可以不用注册驱动
            //2、建立连接
            conn = DriverManager.getConnection("jdbc:mysql://localhost/student", "root", "12345");
            //3、声明Statement
            st = conn.createStatement();
            //4、创建ResultSet
            String sql  = "select * from info";
            rs = st.executeQuery(sql);
            //5、遍历结果
            while(rs.next()){
                int id = rs.getInt("id");
                String name = rs.getString("name");
                int age = rs.getInt("age");
                System.out.println("id:"+id+"name:"+name+"age"+age);
            }
        } catch (SQLException e) {
            e.printStackTrace();
        }finally{
            //6、释放资源
            if(rs !=null)
            {
                try {
                    rs.close();
                } catch (SQLException e) {
                    e.printStackTrace();
                }
            }
            if(st !=null)
            {
                try {
                    st.close();
                } catch (SQLException e) {
                    e.printStackTrace();
                }
            }
            if(st !=null)
            {
                try {
                    conn.close();
                } catch (SQLException e) {
                    e.printStackTrace();
                }
            }    
        }
    }
}

以上代码实现了java连接mysql数据库的功能,为了提高代码的复用性,需要对代码进行优化吗,生成一个工具类,减少代码冗余,方便以后调用。

优化后的代码:(该类对数据库的连接做了一个简单的封装)

package java_jdbc_util;

import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.Properties;//注意导入的包

@SuppressWarnings("unused")
public class JdbcUtil {
    static String driverClass = null;
    static String url = null;
    static String name = null;
    static String passwd= null;
    //创建静态代码块,当类加载完成时读取配置文件
    static {
        try {
            Properties properties = new Properties();
            //InputStream is = new FileInputStream("jdbc.properties");//当配置文件放在项目根目录时使用方法读取
            //使用类加载器,去读取src底下的资源文件。 
            InputStream is = JdbcUtil.class.getClassLoader().getResourceAsStream("jdbc.properties");
            try {
                properties.load(is);
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
            //读取属性
            driverClass = properties.getProperty("driverClass");
            url = properties.getProperty("url");
            name = properties.getProperty("username");
            passwd = properties.getProperty("passwd");
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
    //创建连接数据库方法,返回Connection对象
    public static Connection getConn(){
        Connection conn = null;
        try {    
            Class.forName(driverClass);
            //DriverManager.registerDriver(driverClass);//加载mysql驱动
            conn = DriverManager.getConnection(url, name, passwd);
            
        } catch (Exception e) {
            e.printStackTrace();
        }
        return conn;
    }
    //对外提供一个public方法,调用三个私有方法
    public static void relase(ResultSet rs,Connection conn,Statement st){
        rsClose(rs);
        stClose(st);
        connClose(conn);
    }
    //方法重载
    public static void relase(Connection conn,Statement st){
        stClose(st);
        connClose(conn);
    }
    //创建三个私有的方法,用于释放资源
    
    private static void rsClose(ResultSet rs){
        try{
            if(rs != null)
            {
                rs.close();
            }
        }catch(Exception e){
            e.printStackTrace();
        }finally{
            rs = null;
        }
    }
    private static void stClose(Statement st){
        try{
            if(st != null)
            {
                st.close();
            }
        }catch(Exception e){
            e.printStackTrace();
        }finally{
            st = null;
        }
    }
    private static void connClose(Connection conn){
        try{
            if(conn != null)
            {
                conn.close();
            }
        }catch(Exception e){
            e.printStackTrace();
        }finally
        {
            conn = null;
        }
    }
    
}
View Code

 调用封装的工具类连接数据库

package java_jdbc_connectivity;

import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java_jdbc_util.JdbcUtil;
public class demo1 {
    /**
     * @param args
     * JDBC入门
     * @throws SQLException 
     */
    public static void main(String[] args) throws SQLException {
        Connection  conn = null;
        Statement st = null;
        ResultSet rs = null;
       
        try
        {
            conn = JdbcUtil.getConn();
            //3、创建staw,一定要创建这个对象
            st = conn.createStatement();
            //4、执行查询,得到结果
            String sql = "select * from info";
            rs = st.executeQuery(sql);
            while(rs.next())
            {
                int id = rs.getInt("id");
                String name = rs.getString("name");
                int age = rs.getInt("age");
                System.out.println("id="+id+"==name="+name+"---age"+age);
            }
        }
        catch(Exception e)
        {
            e.printStackTrace();//输出异常
        }
        finally{
            JdbcUtil.relase(rs, conn, st);
        }
    }

}
View Code

配置文件XXX.properties中存放连接数据库的相关信息,如用户名、密码等,通过加载配置文件将这些信息加载到程序里,通过修改数据库名来连接不同的数据库,该配置文件可以存放在src或项目根目录下,对应有不同的加载方式

     

优质内容筛选与推荐>>
1、C#添加编译时间
2、day16 Python 特殊成员
3、纯 CSS写的下拉菜单
4、通过字符串导入、调用
5、nginx反向代理配置


长按二维码向我转账

受苹果公司新规定影响,微信 iOS 版的赞赏功能被关闭,可通过二维码转账支持公众号。

    阅读
    好看
    已推荐到看一看
    你的朋友可以在“发现”-“看一看”看到你认为好看的文章。
    已取消,“好看”想法已同步删除
    已推荐到看一看 和朋友分享想法
    最多200字,当前共 发送

    已发送

    朋友将在看一看看到

    确定
    分享你的想法...
    取消

    分享想法到看一看

    确定
    最多200字,当前共

    发送中

    网络异常,请稍后重试

    微信扫一扫
    关注该公众号





    联系我们

    欢迎来到TinyMind。

    关于TinyMind的内容或商务合作、网站建议,举报不良信息等均可联系我们。

    TinyMind客服邮箱:support@tinymind.net.cn