JDBC连接并使用mysql数据库

数据库在开发过程中是非常容易使用到的,在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接口利用通配符的方式,之后设置字段值实现预想的要求。

  • 3
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值