JDBC开发步骤

JAVA 访问数据库的技术:

Jdbc是一种Java连接数据库技术(Java database connectity), 它是 Java 提供的一些接口,这些接口大部分是数据库厂商提供的(jar包),我们要做的,是连接数据库以后,如何使用Java代码从数据库中存取数据!

 

 

1. 引包:

2. 开启MySQL服务,

如何没有开启会报错:

3.准备好数据库

4.进入开发阶段

4.1注册数据库驱动

MySQL驱动固定写法!注意是”MySQL数据库的驱动”

注册数据库驱动:

try {
    Class.forName("com.mysql.jdbc.Driver");
} catch (ClassNotFoundException e) {
    e.printStackTrace();
}

4.2和数据库建立连接

连接数据库必要的参数:

URL: 访问数据库的地址:写法:

jdbc:mysql://数据库所在Ip地址:数据库端口/数据库的名字

name : 要连接的数据库的账户名

password : 要连接数据库的用户密码

//找到本机的数据库应用,3306是数据库的默认端口 8080是tomkat的默认端口
 

String url = "jdbc:mysql://localhost:3306/student";

String name = "root";//将要连接数据库的账户

String password = "root";//将要连接数据库的密码

Connection connection = DriverManager.getConnection(url,name,password);

这个可以解决乱码问题,在url后面可以设置编码,这里设的是utf-8:

url = "jdbc:mysql://localhost:3306/yunlian??autoReconnect=true&autoReconnectForPools=true&useUnicode=true&characterEncoding=utf-8";

建立数据库连接的代码:

 public static Connection getConnection() {
    Connection connection = null;
    try {
        connection = DriverManager.getConnection(URL,NAME,PASSWORD);
    } catch (SQLException e) {
        e.printStackTrace();
    }
    return connection;
}

将Connection(数据库连接对象),和Ststement(SQL语句执行对象)断开连接

public static void releaseRseource(Connection conn, Statement sat){
    try {
        sat.close();
        conn.close();
    } catch (SQLException e) {
        e.printStackTrace();
    }
}

将Connection(数据库连接对象),和Statement(SQL语句执行对象),和ResultSet(数据库返回结果集)断开连接

public static void releaseRseource(Connection conn, Statement sat, ResultSet res){
    try {
        sat.close();
        conn.close();
        res.close();
    } catch (SQLException e) {
        e.printStackTrace();
    }
}

 

 

在连接数据库时,如果数据库不存在,或者用户名、密码错误,会出现连接数据库失败的异常

用户名或者密码错误:

当我们的url中的数据库不存在的时候:

当URL中的IP或者主机连不上的时候,就会出现连接超时的异常:

当数据库端口号写错的时候,会出现连接被拒绝:

 

4.3获得执行sql语句的对象

用于执行SQL语句

PreparedStatement接口继承了Statement,
Statement(固定),和 PreparedStatement(可变参数) 是SQL语句的两种执行方式

 

1.在遇到要执行的SQL语句是带可变参数的时候,就用PreparedStatement对象,应为PreparedStatement可以用占位符将SQL语句加入可变参数!:

String sql = "insert into user(sno,name,age)values(?,?,?)";//定义一个要执行的SQL语句

PreparedStatement ps = connection.prepareStatement(sql);

ps.setString(1,student.getSno());//设置SQL语句的第一个参数

ps.setString(2,student.getName());//设置SQL语句的第二个参数

ps.setInt(3,student.getAge());//设置SQL语句的第三个参数

2.当要执行的SQL语句的是不带可变参数的时(就是SQL语句不变时!):

String sql = "SELECT * FROM user";

Statement statement = connection.createStatement();//sql语句的执行对象

ResultSet row = statement.executeQuery(sql);//执行SQL语句

PreparedStatement 和Statement的区别:

PreparedStatement:用户通过你系统输入变量时,变量将加入你的SQL语句,这样就能在不知道你的用户输入的情况下,获取信息

根据比较结果可知,我们需要选用PreparedStatement更好、更快速、更安全。因此,在以后的JDBC操作中,建议使用PreparedStatement

 

4.4执行SQL语句

两种语句:

  1).不用返回数据库信息: 增,删,改

exexuteUpdate() 方法 : 返回一个整形(对数据库影响的行数)

2).需要返回数据库信息: 查

代码:

​

查看:
/**
 * 查看表
 * @return
 */
private static List get() {
    String sql="select*from stu";
    Connection conn=DButil.getConnection();
    try {
        PreparedStatement ps=conn.prepareStatement(sql);
        ResultSet rs=ps.executeQuery();
        List stus=new ArrayList();
        while (rs.next()){
            Stu stu=new Stu();
            stu.setCardid(rs.getString("cardid"));
            stu.setName(rs.getString("name"));
            stu.setPhone(rs.getString("phone"));
            stu.setSex(rs.getByte("sex"));
            stus.add(stu);
        }
        return stus;
    }catch (SQLException e){
        e.printStackTrace();
    }
    return null;
}

添加:
/**
 * 添加用户
 * @param stu 待添加的用户
 * @return 受影响的行数
 */
public static int add(Stu stu){
    String sql="insert into user values(?,?,?,?)";
    Connection conn= DButil.getConnection();
    try {
        PreparedStatement ps=conn.prepareStatement(sql);
        ps.setString(1,stu.getCardid());
        ps.setString(2,stu.getName());
        ps.setString(3,stu.getPhone());
        ps.setByte(4,stu.getSex());
        return ps.executeUpdate();
    } catch (SQLException e) {
        e.printStackTrace();
    }
    return -1;
}

删除:
/**
 * 删除用户
 * @param cardid 待删除用户的身份证号
 * @return 是否成功
 */
public static int del(String cardid) throws SQLException {
    String sql="delete from stu where cardid=?";
    Connection conn=DButil.getConnection();
    try {
        PreparedStatement ps = conn.prepareStatement(sql);
        ps.setString(1,cardid);
        return ps.executeUpdate();
    }catch (SQLException e){
        e.printStackTrace();
    }
    return -1;
}

修改:
/**
 * 修改用户
 * @param stu 待修改的用户
 * @return 是否成功
 */
public static int modify(Stu stu) throws SQLException {
    String sql="update stu set(?,?,?,?)";
    Connection conn=DButil.getConnection();
    try{
        PreparedStatement ps=conn.prepareStatement(sql);
        ps.setString(1,stu.getName());
        ps.setString(2,stu.getPhone());
        ps.setByte(3,stu.getSex());
        ps.setString(4,stu.getCardid());
        return ps.executeUpdate();
    }catch (SQLException e){
        e.printStackTrace();
    }
    return -1;
}

[点击并拖拽以移动]
​

exexuteQuery() 方法 : 返回一个结果集对象(Resultest 在数据库中查到的一条数据)

读取返回对象集中的数据的方法: (就是集合的迭代器)

Resultest.next()能够返回给你还有没有记录,

getObjeck方法,读取一条记录里面字段所对应的值 

 

4.5处理执行后的结果

调用Dao的方法后返回一个结果给servlet 让servlet进行处理!:如:

int row = UserDAD.insert(student);

if (row==1){

jsonObject.put("code",1);

jsonObject.put("msg","添加成功");

jsonObject.put("data",student);

}else {

jsonObject.put("code",2);

jsonObject.put("msg","添加失败");

}

 

4.6 释放资源

将用到的传输有关的对象再传输完成后统统释放!  如:

ps.close();

connection.close();

 

你可能感兴趣的:(java,MySQL数据库连接,JDBC,JDBC开发步骤)