JDBC代码

JDBC(Java DataBase Connectivity)是Java和数据库之间的一个桥梁,是一个规范而不是一个实现,能够执行SQL语句。它由一组用Java语言编写的类和接口组成。各种不同类型的数据库都有相应的实现,本文中的代码都是针对MySQL数据库实现的。
在Windows的IDEA工程里连接虚拟机里的MySQL.

一、进行查询操作

class App:

package cn.kb10.jdbc;

import java.sql.*;

public class App
{
    public static void main( String[] args ) throws Exception {
    
        //驱动
        final String DRIVER = "com.mysql.jdbc.Driver";
        
        //连接字符串(用jdbc连接MySQL服务、mysql默认端口号3306、)
        final String URL = "jdbc:mysql://192.168.95.138:3306/kb06mysqltestdb?useUnicode=true&characterEncoding=utf8&useSSL=true";
        //如不写这一行,可以运行,但会报警告。Unicode:编码;characterEncoding:字符集; SSL:安全连接
        
        //账号密码
        final String USERNAME = "root";
        final String PASSWORD = "javakb10";

        //注册驱动
        Class.forName(DRIVER);

        //连接数据库
        Connection con = DriverManager.getConnection(URL,USERNAME,PASSWORD);

        //创建sql指令
        String sql = "select* from class";

        //创建执行对象(这条命令执行到数据库里,需要一个执行对象。执行对象是挂在连接上带过去的con)
        Statement sta = con.createStatement();

        //执行SQL查询指令返回结果集(带着数据库查询的集合回来的)
        ResultSet rst = sta.executeQuery(sql);

        //********************************
        //通过结果集获取列数(可以通过实际查询得到的结果集,去解析表结构,再通过表结构,去解析它的对应结构信息)
	      ResultSetMetaData md = rst.getMetaData();
//        int columnCount = md.getColumnCount();				columnCount:列数(列的编号从1开始)
//        for (int i = 1; i <columnCount ; i++) {
//            System.out.println(md.getCatalogName(i));			库名
//			  System.out.println(md.getTableName(i));			表名
//            System.out.println(md.getColumnClassName(i));		数据库里面的这一列对应的java类型
//            System.out.println(md.getColumnDisplaySize(i));	最大长度(展示长度)
//            System.out.println(md.getColumnLabel(i));			别名
//            System.out.println(md.getColumnName(1));			数据库表中原本的名称
//            System.out.println(md.getColumnType(i));			java.sql.Types
//
//        }


        //提取结果集中的数据信息(有点像迭代器、)
        while(rst.next()){
            for(int i = 1; i<=md.getColumnCount() ; i++){
            System.out.print(rst.getString(i)+"\t");
            }
            System.out.println();
        }
		//先开的先释放
        rst.close();
        sta.close();
        con.close();




    }
}

二、进行增删改操作

class BaseDao

package cn.kb10.jdbc;

import java.sql.*;
import java.util.ArrayList;
import java.util.List;

//被调用的属性
public class BaseDao {
    private String driver;
    private String url;
    private String username;
    private String password;

//BaseDao的构造方法为了加载驱动Class.forName(driver)、
    public BaseDao(String driver, String url, String username, String password)
            throws ClassNotFoundException {
        this.driver = driver;
        Class.forName(driver);
        this.url = url;
        this.username = username;
        this.password = password;
    }

//获取连接对象
    private Connection getCon() throws SQLException {
        return DriverManager.getConnection(url,username,password);
    }

//PreparedStatement预编译执行器(是executeQuery普通执行器的升级版,普通执行器里有sql注入的本身风险。PreparedStatement传进来来的只能是参数,当成字符串来看待)
//创建执行对象要有连接对象Connection con,因为要松耦合,所提创建Connection con
//Object...params:因参数类型数量未知,所以用可以向下兼容的Object的动态参数
    private PreparedStatement getPst(Connection con,String sql,Object...params) throws SQLException {
        PreparedStatement pst = con.prepareStatement(sql);
        for (int i = 0; i < params.length; i++) {
        //setObject的第一个参数parameterIndex就是参数的位置从1开始的,i从0开始的,所以是i+1
        //setObject的第二个参数是参数的值,值在数组里,数组的下标从0开始的,所以是params[i]
            pst.setObject(i+1,params[i]);
        }
        return pst;
    }



    private void close(AutoCloseable...acs)                                                                                                                                                                                       {
        for (AutoCloseable ac : acs) {
            if(null != ac){
                try {
                    ac.close();
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        }
    }

    public int exeNonQuery(String sql,Object...params){
        Connection con = null;
        PreparedStatement pst = null;
        try {
            con = getCon();
            pst = getPst(con,sql,params);
            return pst.executeUpdate();
        } catch (SQLException e) {
            return -1;
        }finally {
            close(pst,con);
        }
    }

    public List<List<String>> exeQuery(String sql,Object...params){
        Connection con = null;
        PreparedStatement pst = null;
        ResultSet rst = null;
        try{
            con = getCon();
            pst = getPst(con,sql,params);
            rst = pst.executeQuery();
            final int COL_COUNT = rst.getMetaData().getColumnCount();
            List<List<String>> result = new ArrayList<>();
            while(rst.next()){
                List<String> row = new ArrayList<>(COL_COUNT);
                for (int i = 1; i <COL_COUNT ; i++) {
                    row.add(rst.getString(i));
                }
                result.add(row);
            }
            return result;
        }catch(Exception e){
            return null;
        }finally {
            close(rst,pst,con);
        }
    }
}

class AppTest

public class AppTest 
{
    /**
     * Rigorous Test :-)
     */
    @Test
    public void shouldAnswerWithTrue()
    {
        assertTrue( true );
    }

    @Test
    public void seal() throws ClassNotFoundException {
        //驱动
        final String DRIVER = "com.mysql.jdbc.Driver";
        //连接字符串
        final String URL = "jdbc:mysql://192.168.95.138:3306/kb06mysqltestdb?useUnicode=true&characterEncoding=utf8&useSSL=true";
        //账号密码
        final String USERNAME = "root";
        final String PASSWORD = "javakb10";


        BaseDao dao = new BaseDao(DRIVER,URL,USERNAME,PASSWORD);

        //非查询操作(增、删、改)
        String sql ="";
        System.out.println(dao.exeNonQuery(sql));

        //查询操作
//        String sql = "select * from class";
//        List<List<String>> rows = dao.exeQuery(sql);
//        for (List<String> item : rows) {
//            System.out.println(item+"\t");
//        }
//        System.out.println();
    }

    @Test
    public void jdbcReflect() throws Exception{
        BaseDao2 dao = new BaseDao2();
        String sql = "select sid id, sname name, gender,class_id classId from student";
        List<Student> stus = dao.exeQuery(Student.class, sql);
        for (Student stu : stus) {
            System.out.println(stu);
        }
    }
}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值