JDBC1

JDBC1
1.JDBC是什么?
      JDBC(java database connectivity)Java数据库连接。是Java语言中用来规范客户端程序如何来访问数据库[关系型数据库]的应用程序接口,提供了诸如查询和更新数据库中数据的方法。

      我们通常说的JDBC是面向关系型数据库的。

2.JDBC访问数据库需要用到的类、接口、方法?
      2.1 java.sql包DriverManager类--负责加载各种不同驱动程序(Driver),并根据不同的请求,向调用者返回相应的数据库连接。 驱动程序,会将自身加载到DriverManager中去。

            2.1.1数据驱动程序(Driver)--- 根据所连接的数据库不同需要下载对应数据库的驱动程序。

                  例如:MySQL数据库----https://downloads.mysql.com/archives/c-j/

                  mysql-connector-java-5.1.38-bin.jar

                  通过java的反射机制,来给DriverManager,提供被加载的数据库驱动名称。

                  Class.forName(“数据库驱动名称【包名+类名】”);

                  数据库驱动名称来自mysql-connector-java-5.1.38-bin.jar中Driver的java类的全名称。

                  Class.forName(“com.mysql.jdbc.Deiver”);

            2.1.2向调用者返回相应的数据库连接

                  DriverManager类中的静态方法getConnection(url,username,password)向调用者返回相应的数据库连接

                  static  Connection   getConnection(url,username,password)

                  参数url---指定被连接的数据库位置

                  【jdbc:mysql://数据库服务器IP:端口/数据库名称】

                  参数username---登陆数据库服务器的用户名

                  参数password----登陆数据库服务器的密码

      2.2 java.sql包Connection接口---数据库连接,负责与进行数据库间通讯,SQL执行以及事务处理都是在某个特定Connection环境中进行的。可以产生用以执行SQL的Statement。

          1.产生用以执行SQL的Statement。

               [用以执行SQL查询和更新(针对静态SQL语句和单次执行)]

               Statement  createStatement()

               select   * from  t_user  where uid=12;[拼接字符串]

          2.产生用以执行SQL的PreparedStatement。

               [用以执行包含动态参数的SQL查询和更新(在服务器端编译,允许重复执行以提高效率)]

               PreparedStatement  prepartatement(Sql)

               参数sql---包含动态参数的SQL语句

               select   * from  t_user  where uid=?;【需要给sql动态传递参数值】

               ?---占位符

      2.3 java.sql包Statement接口---用以执行SQL查询和更新(针对静态SQL语句和单次执行)

            以执行SQL更新【insert / update /delete】

            int executeUpdate(SQL)

            参数SQL---[insert / update /delete]字符串类型的sql语句。

            以执行SQL查询【select】

            ResultSet    executeQuery(SQL)

            参数SQL---[select]字符串类型的sql语句。

      2.4 java.sql包PreparedStatement接口--用以执行包含动态参数的SQL查询和更新(在服务器端编译,允许重复执行以提高效率)

            以执行SQL更新【insert / update /delete】

            int executeUpdate()

            以执行SQL查询【select】

            ResultSet    executeQuery()

            注意:PreparedStatement需要执行的sql语句

                 1.sql语句是在创建PreparedStatement对象的时候传入执行,不是在调用executeUpdate()/executeQuery()的时候传入。

                 2.PreparedStatement对象所执行的sql语句中有“?【占位符】”

            有一组填补sql语句占位符的方法

           setInt(参数1,参数2)  int--int

           setLong(参数1,参数2)  long---bigint

           setDouble(参数1,参数2) double--double

           setString(参数1,参数2)  String--varchar/char

           .....................

           参数1---SQL语句中“?”的位置【从1开始】

           参数2---SQL语句中“?”具体数据值

      2.5.java.sql包ResultSet接口 --- 数据库结果集的数据表,通常通过执行查询数据库的语句生成。

            ResultSet 对象具有指向其当前数据行的指针。最初,指针被置于第一行之前。next 方法将指针移动到下一行;因为该方法在 ResultSet 对象中没有下一行时返回 false,所以可以在 while 循环中使用它来迭代结果集。

            默认的 ResultSet 对象不可更新,仅有一个向前移动的指针。因此,只能迭代它一次,并且只能按从第一行到最后一行的顺序进行。

            boolean  next()--将指针移动到下一行;因为该方法在 ResultSet 对象中没有下一行时返回 false。在 while 循环中使用它来迭代结果集。

            由于通过next方法将指针移动到下一行,我们现在就可以取出指针指向的当前行的数据值。要获取当前行中保存的数据值,就需要一列一列的取出数据值,所以ResultSet会有一组获取指定列数据的方法。

            getXXXX(int colindex)---int colindex[当前需要获取数据值的列在当前行中的位置【从1开始】]

            getXXXX(String colname)--String colname[当前需要获取数据值的列名称]

1 [int]--[id]

Zhangsan  [varchar]--[name]

23 [int]--[age]

2[int]--[id]

Lisi  [varchar]--[name]

24  [int]--[age]

3[int]--[id]

Wangwu  [varchar]--[name]

25  [int]--[age]

            通过ResultSet对象得到第一行数据值

            int  id=ResultSet对象.getInt(1);

            int  id=ResultSet对象.getInt(“id”);

            //id==1

            String name=ResultSet对象.getString(2);

            String name=ResultSet对象.getString(“name”);

            //name==zhangsan

            int  age=ResultSet对象.getInt(3);

            int  age=ResultSet对象.getInt(“age”);

            //age==23

 3.JDBC访问数据库的流程

测试基于Statement接口的数据库访问

1、创建数据库表

create table t_user(
t_id int primary key auto_increment,
t_name char(20),
t_age int,
t_address char(20)
);

2、创建java项目,导入数据库启动包

3、创建保存用户信息的java类

package com.wangxing.jdbcdemo1.bean;
/**
 * 保存用户信息的java类
 * @author Administrator
 *
 */
public class UserBean {
    private int id;
    private String name;
    private int age;
    private String address;
    public int getId(){
        return id;
    }
    public void setId(int id){
        this.id=id;
    }
    public String getname(){
        return name;
    }
    public void setname(String name){
        this.name=name;
    }
    public int getAge(){
        return age;
    }
    public void setAge(int age){
        this.age=age;
    }
    public String getAddress(){
        return address;
    }
    public void setAddress(String address){
        this.address=address;
    }
}

4、创建数据库驱动管理类

package com.wangxing.jdbcdemo1.bean;
 
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
 
/**
 * 数据库驱动管理类---加载数据库驱动,得到数据库连接
 * @author Administrator
 *
 */
public class DBConnection {
    //定义数据库表驱动名称
    private static final String DRIVERNAME="com.mysql.jdbc.Driver";
    //定义数据库的url
    //jdbc:mysql://数据库服务器IP:端口/数据库名称
    private static final String URL="jdbc:mysql://127.0.0.1:3306/jdbc";
    //定义数据库的登录名
    private static final String USERNAME="root";
    //定义数据库的登录密码
    private static final String PASSWORD="200120";
    //加载数据库驱动[静代码块]
    static{
        try{
            Class.forName(DRIVERNAME);
        }catch(Exception e){
            System.out.println("数据库驱动加载失败");
            e.printStackTrace();
        }
    }
    /**
     * 得到数据库连接对象
     */
    public static Connection getMyConnection(){
        Connection connection=null;
        try {
            connection=DriverManager.getConnection(URL, USERNAME, PASSWORD);
        } catch (SQLException e) {
            System.out.println("数据库连接获取失败");
            e.printStackTrace();
        }
        return connection;
    }
}
5.创建数据库用户表信息的访问类

package com.wangxing.jdbcdemo1.bean;
 
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.List;
 
/**
 * 用户数据表的访问对象
 * @author Administrator
 *
 */
public class UserDaoObject {
    //添加用户信息
    public void insertUser(UserBean userBean){
        Connection conn=null;
        Statement statement=null;
        try {
            //得到数据库连接
            conn=DBConnection.getMyConnection();
            //创建添加数据的sql语句
            String insert="insert into t_user values(null,'"+userBean.getname()+"',"+userBean.getAge()+",'"+userBean.getAddress()+"');";
            System.out.println(insert);
            //创建Statement对象
            statement=conn.createStatement();
            //执行添加sql
            int temp=statement.executeUpdate(insert);
            if(temp>0){
                System.out.println("添加信息成功");
            }
        } catch (SQLException e) {
            System.out.println("添加信息失败");
            e.printStackTrace();
        }finally{
            if(statement!=null && conn!=null){
                try {
                    statement.close();
                    conn.close();
                } catch (SQLException e) {
                    e.printStackTrace();
                }
            }
        }
        
    }
    //根据用户id修改用户信息
    public void updataUser(UserBean userBean){
        Connection conn=null;
        Statement statement=null;
        try {
            //得到数据库连接
            conn=DBConnection.getMyConnection();
            //创建修改数据的sql语句
            String updat="update t_user set t_name='" + userBean.getname() + "',t_age=" + userBean.getAge()
                + ",t_address='" + userBean.getAddress() + "' where t_id=" + userBean.getId() + ";";
            System.out.println(updat);
            //创建Statement对象
            statement=conn.createStatement();
            //执行修改sql
            int temp= statement.executeUpdate(updat);
            System.out.println(temp);
            if(temp>0){
                System.out.println("修改信息成功");
            }
        } catch (SQLException e) {
            System.out.println("修改信息失败");
            // TODO Auto-generated catch block
            e.printStackTrace();
        } finally{
            if(statement!=null && conn!=null){
                try{
                    statement.close();
                    conn.close();
                }catch(Exception e){
                    e.printStackTrace();
                }
            }
        }
    }
    //根据id查询用户信息
    public UserBean selectUserById(int userid){
        UserBean userbean=null;
        Connection conn=null;
        Statement statement=null;
        ResultSet resultset=null;
        //得到数据库连接
        conn=DBConnection.getMyConnection();
        //创建根据用户id查询用户信息的sql语句
        String select="select * from t_user where t_id="+userid+";";
        System.out.println(select);
        try {
            //创建Statement对象
            statement=conn.createStatement();
            //执行查询sql语句
            resultset=statement.executeQuery(select);
            if(resultset.next()){
                int id=resultset.getInt("t_id");
                String name=resultset.getString("t_name");
                int age=resultset.getInt("t_age");
                String address=resultset.getString("t_address");
                userbean=new UserBean();
                userbean.setId(id);
                userbean.setname(name);
                userbean.setAge(age);
                userbean.setAddress(address);
            }
        } catch (SQLException e) {
            System.out.println("查询信息失败");
            // TODO Auto-generated catch block
            e.printStackTrace();
        } finally{
            if(resultset!=null && statement!=null && conn !=null){
                try{
                    resultset.close();
                    statement.close();
                    conn.close();
                }catch(Exception e){
                    e.printStackTrace();
                }
                
            }
        }
        return userbean;
    }
    //查询所有用户信息
    public List<UserBean> selectUser(){
        List<UserBean> list=new ArrayList<UserBean>();
        Connection conn=null;
        Statement statement=null;
        ResultSet resultset=null;
        //得到数据库连接
        conn=DBConnection.getMyConnection();
        //创建查询所有用户信息的sql语句
        String select="select * from t_user;";
        try {
            //得到Statement对象
            statement=conn.createStatement();
            //执行查询sql语句
            resultset=statement.executeQuery(select);
            while(resultset.next()){
                int id=resultset.getInt("t_id");
                String name =resultset.getString("t_name");
                int age=resultset.getInt("t_age");
                String address=resultset.getString("t_address");
                UserBean userbean=new UserBean();
                userbean.setId(id);
                userbean.setname(name);
                userbean.setAge(age);
                userbean.setAddress(address);
                list.add(userbean);
            }
        } catch (SQLException e) {
            System.out.println("查询信息失败");
            // TODO Auto-generated catch block
            e.printStackTrace();
        }finally{
            if(resultset!=null && statement!=null && conn!=null){
                try{
                    resultset.close();
                    conn.close();
                    statement.close();
                }catch(Exception e){
                    e.printStackTrace();
                }
            }
        }
        return list;
    }
    
    //根据id删除信息
    public void deleteUserById(int userid){
        Connection conn=null;
        Statement statement=null;
        //获取数据库连接
        conn=DBConnection.getMyConnection();
        //创建根据id删除信息的sql语句
        String delete="delete from t_user where t_id="+userid+";";
        System.out.println(delete);
        try {
            //获取Statement对象
            statement=conn.createStatement();
            //执行删除sql语句
            int temp=statement.executeUpdate(delete);
            if(temp>0){
                System.out.println("删除信息成功");
            }
        } catch (SQLException e) {
            System.out.println("删除信息失败");
            // TODO Auto-generated catch block
            e.printStackTrace();
        }finally{
            if(statement!=null && conn!=null){
                try{
                    statement.close();
                    conn.close();
                }catch(Exception e){
                    e.printStackTrace();
                }
            }
        }
    }
}

测试

package com.wangxing.jdbcdemo1.bean;
 
import java.util.ArrayList;
import java.util.List;
 
public class TestMain {
    public static void main(String args[]){
        //测试添加数据 
//        UserBean userbean=new UserBean();
//        userbean.setname("zhangsan");
//        userbean.setAge(23);
//        userbean.setAddress("西安");
//        UserDaoObject userDao=new UserDaoObject();
//        userDao.insertUser(userbean);
        
        //测试修改数据
//        UserBean userbean=new UserBean();
//        userbean.setId(1);
//        userbean.setname("wangwu");
//        userbean.setAge(55);
//        userbean.setAddress("上海");
//        UserDaoObject userDao=new UserDaoObject();
//        userDao.updataUser(userbean);
        
        //测试根据id查询用户信息
//        UserDaoObject userDao=new UserDaoObject();
//        UserBean user=userDao.selectUserById(2);
//        if(user!=null){
//            System.out.println(user.getId()+"\t"+user.getname()+"\t"+user.getAge()+"\t"+user.getAddress());
//        }
        
        //测试查询所有用户信息
//        UserDaoObject userDao=new UserDaoObject();
//        List<UserBean> list=new ArrayList<UserBean>();
//        list=userDao.selectUser();
//        if(list.size()>0){
//            for(UserBean user:list){
//                System.out.println(user.getId()+"\t"+user.getname()+"\t"+user.getAge()+"\t"+user.getAddress());
//            }
//        }
        
        //测试根据id删除用户信息
        UserDaoObject userDao=new UserDaoObject();
        userDao.deleteUserById(1);
    }
}

ttps://blog.csdn.net/m0_49935332/article/details/113620361

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值