实训14 2018.4.8

本文详细介绍如何通过JDBC在Eclipse中连接MySQL数据库,并演示基本的增删改查操作,包括注册驱动、获取连接、执行SQL语句及处理结果等步骤。

 JDBC的连接与操作

连接:

  准备工作

    从mysql官网下载连接mysql所需的jar包——https://dev.mysql.com/downloads/connector/j/,选择第二个(.zip)下载并解压,得到一个jar包。

 

  第一步:

    打开eclipse(或myeclipse),在需要的项目里新建一个文件夹,把这个jar包复制粘贴到这个文件夹下。

  第二步:

    在这个jar包上右击—>Build Path—>Add to Build Path,即添加到路径之中。

     添加之后会自动产生一个Referenced Libraries。

  至此,eclipse与mysql的连接外围工作已经结束了!

下面就是使用语句与mysql进行交互。

 操作:

  基本流程:

    0.下面用到的包都来自java.sql之下,所以直接使用import java.sql.*; 不要导错包!

    1.注册驱动:

       forName()方法中要把地址和类名写完整。

Class.forName("com.mysql.jdbc.Driver");

    2.获得链接:

Connection conn=DriverManager.getConnection("jdbc:mysql://127.0.0.1:3306/demo_jdbc?characterEncoding=utf-8","root","123456");
//127.0.0.1即localhost
或者
Connection conn=DriverManager.getConnection("jdbc:mysql://localhost:3306/demo_jdbc?characterEncoding=utf-8","root","123456");

      jdbc:mysql://localhost/端口号/数据库名是固定格式。characterEncoding是设置字符编码(可选内容),“root”是数据库的用户名(user),“123456”是该用户的登录密码(password).

    3.获得语句的执行平台

//Statement
Statement st=conn.createStatement();
//PreparedStatement
PreparedStatement pst=conn.prepareStatement("update sort set sprice=? where sid=?");

 pst.setString(1, "3000");
 pst.setString(2, "4");

      Statement和PreparedStatement书写时的区别是:Statement此时不传参,sql语句在下一步传入;PreparedStatement在创建时就传入参数,并使用占位符(?)(使用setXXX()传入参数,其中XXX表示String,Double,Int...等一系列方法,setXXX()的第一个参数是指第一个占位符(也就是第一个问号),第二个参数是需要接收的值)。

      Statement和PreparedStatement的功能区别在于:PreparedStatement可以防止sql注入。(在下一篇随笔之中,会阐述这个问题)

    4.执行sql语句:

      对于增删改,使用executeUpdate();对于查找操作,使用executeQuery()。

例:
//
Statement ResultSet rs=st.executeQuery("SELECT * FROM sort WHERE sid=1;"); //PreparedStatement ResultSet rs=pst.executeQuery();
//(其它内容见下面完整代码)

      这个地方在使用Statement和PreparedStatement时也有区别,区别在于Statement需要在这两个方法中传入sql语句,而PreparedStatement由于在前一步已经传入,所以这里使用这两个方法时不需要传参。

    5.处理结果集:

      这一步一般针对查询语句,即显示查询到的结果。

      

while(rs.next()){
            System.out.println(rs.getString("sid")+" "+rs.getString("sname"));
        }

      而对于增删改,可以显示一下其返回值

int i=statement.executeUpdate("UPDATE store SET size=13 WHERE sid=3");
print(i);

      这个i的值其实是执行该sql代码对几行数据造成影响,也就是下图中的这个值:

    6.释放资源

      原则:先创建的后释放;

      

rs.close();//如果用到的话
st.close();或pst.close();
conn.close();

 

完整代码:

//demo01.java
//Statement增删改
package
demo01; import java.sql.*;//导的都是java.sql里面的包 public class demo01 { public static void main(String[] args) throws ClassNotFoundException, SQLException { //1.注册驱动 Class.forName("com.mysql.jdbc.Driver");//写完整的类名 //2.获得链接 Connection conn=DriverManager.getConnection("jdbc:mysql://127.0.0.1:3306/demo_jdbc","root","123456"); //3.获得语句执行平台 Statement st=conn.createStatement(); //4.执行sql语句 返回值int为“共几行受到影响” String sql="INSERT INTO sort(sname,sprice,syear) VALUES('电视',4000,6)"; int row=st.executeUpdate(sql); //5.处理结果集 System.out.println(row); //6.释放资源(先创建的后释放) st.close(); conn.close(); } }
//demo01.java

//Statement查找
package demo01;

import java.sql.*;//导的都是java.sql里面的包

public class demo01 {

    public static void main(String[] args) throws  ClassNotFoundException, SQLException {
        //1.注册驱动
        Class.forName("com.mysql.jdbc.Driver");//这是反射的概念 //写完整的类名
        //2.获得链接
        Connection conn=DriverManager.getConnection("jdbc:mysql://127.0.0.1:3306/demo_jdbc","root","123456");
        //3.获得语句执行平台
        Statement st=conn.createStatement();
        //4.执行sql语句 返回值int为“共几行受到影响”
        String sql="select * from sort";
        ResultSet rs=st.executeQuery(sql);
        //5.处理结果集
        while(rs.next()){
            System.out.println(rs.getString("sid")+" "+rs.getString("sname"));
        }
        //6.释放资源(先创建的后释放)
        rs.close();
        st.close();
        conn.close();
    }

}
//demo03.java
//PreparedStatement增删改

package demo01;

import java.sql.*;

public class demo03 {

    public static void main(String[] args) throws ClassNotFoundException, SQLException {
        Class.forName("com.mysql.jdbc.Driver");
        Connection conn=DriverManager.getConnection("jdbc:mysql://127.0.0.1:3306/demo_jdbc","root","123456");
        PreparedStatement pst=conn.prepareStatement("update sort set sprice=? where sid=?");
        pst.setString(1, "3000");
        pst.setString(2, "4");
        pst.executeUpdate();
        
        pst.close();
        conn.close();
    }

}
//demo02.java
//PreparedStatement查找
package demo01;

import java.sql.*;

public class demo02 {
    public static void main(String[] args) throws ClassNotFoundException, SQLException {
        Class.forName("com.mysql.jdbc.Driver");
        Connection conn=DriverManager.getConnection("jdbc:mysql://localhost:3306/demo_jdbc","root","123456");
        
        String sql="select * from sort where sid=?;";//?为占位符
        PreparedStatement pst=conn.prepareStatement(sql);
        pst.setString(1,"2");//给第一个占位符(?)赋以"2"
        
        ResultSet rs=pst.executeQuery();//里面没有参数
        
        while(rs.next()){
            System.out.println(rs.getString("sid"));
        }
        
        rs.close();
        pst.close();
        conn.close();
    }
}
            

注:连接数据库会抛出各种异常,所以都要进行捕获。

 

转载于:https://www.cnblogs.com/goxxiv/p/8746521.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值