mybatis系统化学习--手写JDBC

准备工作

mysql创建demo库:
简单建个表:

CREATE TABLE `user` (
  `id` int NOT NULL AUTO_INCREMENT,
  `name` varchar(255) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8;

搭建maven项目,引入mysql-connector-java

<properties>
        <mysql.version>8.0.20</mysql.version>
    </properties>

    <dependencies>
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>${mysql.version}</version>
        </dependency>
    </dependencies>

jdbc四步曲

加载驱动

Class.forName(driver);

建立连接

connection = DriverManager.getConnection(url,username,password);

执行sql

statement = connection.prepareStatement(sql);
// int res = statement.executeUpdate();    //增删改
 ResultSet resultSet = statement.executeQuery(); //查询

关闭资源

resultSet.close();
statement.close();
connection.close();

demo


public class RunDemo {

    private static String driver = "com.mysql.cj.jdbc.Driver";
    private static String url = "jdbc:mysql://localhost:3306/demo?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=Hongkong";
    private static String username = "root";
    private static String password = "123456";
    static {
        try {
            Class.forName(driver);
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        }
    }

    public static void main(String[] args) {
//        String sql = "insert into user (name) values ('张三')";
        String sql = "select * from user";
        Connection connection = null;
        PreparedStatement statement = null;
        ResultSet resultSet =null;
        try {
            connection = DriverManager.getConnection(url,username,password);
            statement = connection.prepareStatement(sql);

//            int res = statement.executeUpdate();    //增删改
//            System.out.println("执行成功,改变行数:"+res);
            ResultSetMetaData resultSetMetaData = statement.getMetaData();
            int columnCount = resultSetMetaData.getColumnCount();
            resultSet = statement.executeQuery(); //查询
            List<Map<String,Object>> res = new ArrayList<>();
            while(resultSet.next()){
                Map<String,Object> objmap = new HashMap<>();
                //这个地方比较坑,resultSetMetaData和resultSet的下标居然是从1开始的
                for(int i=1;i<=columnCount;i++){
                    objmap.put(resultSetMetaData.getColumnName(i),resultSet.getObject(i));
                }
                res.add(objmap);
            }
            System.out.println(res.get(0));
        } catch (SQLException e) {
            e.printStackTrace();
        }finally {
            if(resultSet!=null){
                try {
                    resultSet.close();
                } catch (SQLException e) {
                    e.printStackTrace();
                }
            }
            if(statement!=null){
                try {
                    statement.close();
                } catch (SQLException e) {
                    e.printStackTrace();
                }
            }
            if(connection!=null){
                try {
                    connection.close();
                } catch (SQLException e) {
                    e.printStackTrace();
                }
            }
        }

    }
}

猜你喜欢

转载自blog.csdn.net/qq1049545450/article/details/111869208