JDBC

来源:互联网 发布:矩阵和行列式的转换 编辑:程序博客网 时间:2024/05/16 09:40

简介

JDBC:全称是Java Database Connectivity,java数据库连接,从名字就可以看出来它的作用是用Java语言与数据库进行连接,从而执行一系列SQL语句,实现对数据库的操作。
步骤:
1. 加载数据库驱动:可以针对不同的数据库加载不同的驱动,从而为多种数据库提供访问。
2. 建立数据库连接:需要传递三个参数,即url、user和password,其中url中指定了数据库、host、端口号以及具体操作的那个数据库的名字,当在mysql workbench中新建一个数据库连接时可以看到这些信息,如下:
这里写图片描述
3. 执行SQL语句:推荐使用PreparedStatement接口(见下面PreparedStatement和Statement的区别)。
4. 处理返回结果:即获取返回结果中的某个字段值或者输出显示等等。
5. 关闭资源:一定不要漏掉哦,否则容易造内存泄漏。

例子(mysql版本)

在https://mvnrepository.com/获取mysql的配置代码粘贴到pom.xml文件中。
1. DBUtil类(这个类主要用于与数据建立连接,并返回一个Connection对象):

import java.sql.Connection;import java.sql.DriverManager;public class DBUtil {    private static final String driveName="com.mysql.jdbc.Driver";    private static final String URL="jdbc:mysql://127.0.0.1:3306/News";    private static final String USER="root";    private static final String PASSWORD="123456";    public DBUtil(){}    public static Connection connectToDb()throws Exception{        //加载驱动        Class.forName(driveName);        //获得数据库的连接        Connection con= DriverManager.getConnection(URL, USER, PASSWORD);        return con;    }}

2.ExcuteSQL类(这个类主要用于执行一系列SQL语句,这里写了两个类方法用于servlet中调用):

import com.alibaba.fastjson.JSONObject;import java.sql.Connection;import java.sql.PreparedStatement;import java.sql.ResultSet;import java.util.ArrayList;public class ExecuteSQL {    //返回查询结果    public static ArrayList<JSONObject> getNewsInfo(int pageNumber, int pageSize)throws Exception{        //获取数据库连接        Connection con = DBUtil.connectToDb();        //查询数据        PreparedStatement ps;        String sql = "SELECT * FROM News limit "+(pageNumber-1)*pageSize+","+pageSize;        ps = con.prepareStatement(sql);        ResultSet res = ps.executeQuery();        ArrayList<JSONObject> list = new ArrayList<JSONObject>();        //保存在list中        while(res.next()){            JSONObject job = new JSONObject();            job.put("id",res.getString("id"));            job.put("title",res.getString("title"));            job.put("key_word",res.getString("key_word"));            job.put("content",res.getString("content"));            job.put("url",res.getString("url"));            job.put("reply",res.getString("reply"));            job.put("source",res.getString("source"));            job.put("postdate",res.getString("postdate"));            list.add(job);        }        res.close();        con.close();        return list;    }    //返回数据条数    public static int getCount()throws Exception{        int count = 0;        //获取数据库连接        Connection con = DBUtil.connectToDb();        //查询数据条数        PreparedStatement ps;        ps = con.prepareStatement("select count(*) from News");        ResultSet res = ps.executeQuery();        while(res.next()){            count=res.getInt(1);        }        System.out.println("数据条数: "+count);        res.close();        con.close();        return count;    } }

PrepareStatement和Statement的区别:
PrepareStatement接口继承了Statement接口,但是相比于Statement具有以下优点:
1. PreparedStatement是预编译的,效率高。
2. 代码可读性和可维护性高。
3. 安全性好,可有效防止SQL注入攻击。
SQL注入攻击:由于web应用程序对用户输入数据的合法性没有判断,攻击者通过在web程序中添加一些额外的SQL语句,欺骗服务器执行一些恶意操纵。

原创粉丝点击