JDBC连接并使用mysql数据库

来源:互联网 发布:男尊女卑 日本 知乎 编辑:程序博客网 时间:2024/06/14 10:18

数据库在开发过程中是非常容易使用到的,在java的开发中也有一套工具方便我们对于数据库的连接和操作,那就是jdbc。
jdbc是一套连接数据库的工具,在使用时,通常包括以下步骤:

  1. 加载数据库驱动程序——jdbc作为工具并不包含在jdk中,我们在使用前需要去加载该类
  2. 获取数据库连接对象——如同访问网站一样,我们需要建立与数据库的链接
  3. 构造sql语句——sql语句为字符串,如同在sql客户端执行的语句是相同的
  4. 构造Statement实例——Statement实例是sql语句的载体
  5. 执行sql语句——sql语句由数据库执行,需要通过Statement载体发送给数据库再去执行
  6. 关闭连接——关闭Statement实例连接,关闭数据库连接对象的连接

下面是一段数据库插入操作的源码:

/**     * 插入操作     */    public static void insert(){        try {            //加载数据库驱动程序            Class.forName(Driver);            //获取数据库连接对象            Connection conn = DriverManager.getConnection(URL, USERNAME, PASSWD);            //构造sql语句            String sql = " insert into person(name, age, description) values('测试', 20, '测试1');";            //构造statment实例(用来发送SQL语句的载体)            Statement stat = conn.createStatement();            //执行sql语句(发送给数据库)            int num = stat.executeUpdate(sql);            System.out.println(num);            //关闭连接            stat.close();            conn.close();        } catch (ClassNotFoundException e) {            e.printStackTrace();        } catch (SQLException e) {            e.printStackTrace();        }    }

需要注意的是,在建立Mysql链接使用的URL中,为了防止字符集不匹配的情况,我们需要指定字符集,方式如下:

public final static String URL = "jdbc:mysql://localhost:3306/test?characterEncoding=utf-8";

其中localhost:3306为数据库服务器地址,test为要使用的数据库,在其之后的characterEncoding=utf-8是指定的字符集。




上面是一个简单的插入操作,插入的是一个纯粹的字符串组成的sql语句,在实际应用中,我们可能不能确定将要插入的字符,所以我们需要通过预先编译的sql语句将即将要执行的sql语句(不含字段值)存储起来,然后在执行前给预先编译好的sql语句进行设置值操作,如下,通过实现PreparedStatement接口进行操作:

package JdbcConnect;import java.sql.Connection;import java.sql.DriverManager;import java.sql.PreparedStatement;import java.sql.SQLException;/** * Created by zhuxinquan on 16-2-5. */public class PreparedStatementDemo {    public final static String URL = "jdbc:mysql://localhost:3306/test?characterEncoding=utf-8";    public final static String USERNAME = "root";    public final static String PASSWD = "××××××××";    public final static String Driver = "com.mysql.jdbc.Driver";    public static void insert(Person p){        try {            Class.forName(Driver);            Connection conn = DriverManager.getConnection(URL, USERNAME, PASSWD);            String sql = "insert into person(name, age, description) values(?, ?, ?)";            PreparedStatement ps = conn.prepareStatement(sql);            //设置字段值            ps.setString(1, p.getName());            ps.setInt(2, p.getAge());            ps.setString(3, p.getDescription());            ps.executeUpdate();            ps.close();            conn.close();        } catch (ClassNotFoundException e) {            e.printStackTrace();        } catch (SQLException e) {            e.printStackTrace();        }    }    public static void main(String[] args) {        Person p = new Person("测试3", 23, "ceshi 3");        insert(p);    }}


在上面这段代码中并没有将字段的具体值写入字符串中,而是通过PreparedStatement类去设置之前通过通配符表示的字段值。进而去执行已经预编译好的sql语句。

更新操作完成后的sql语句返回影响的行数,而查询操作完成后返回的是ResultSet结果集,我们需要对其结果进行处理才能得到我们想要的结果,如下例就是一个简单的查询操作:

package JdbcConnect;import java.sql.*;/** * Created by zhuxinquan on 16-2-4. */public class JdbaQueryDemo {    public final static String URL = "jdbc:mysql://localhost:3306/test?characterEncoding=utf-8";    public final static String USERNAME = "root";    public final static String PASSWD = "××××××××";    public final static String Driver = "com.mysql.jdbc.Driver";    public static void query(){        try {            Class.forName(Driver);            Connection conn = DriverManager.getConnection(URL, USERNAME, PASSWD);            String sql = "select id, name, age, description from person";            Statement state = conn.createStatement();            //返回查询的结果集            ResultSet rs = state.executeQuery(sql);            while (rs.next()){                int id = rs.getInt(1);                System.out.println(id);            }            rs.close();            state.close();            conn.close();        } catch (ClassNotFoundException e) {            e.printStackTrace();        } catch (SQLException e) {            e.printStackTrace();        }    }    public static void main(String[] args) {        query();    }}


同样当我们要查询的条件不确定时,我们也可以通过使用PreparedStatement接口利用通配符的方式,之后设置字段值实现预想的要求。

1 0