• Mysql--->JDBC


    第一种方式

    1、创建链接


    Connection conn = null;
    Class.forName("com.mysql.jdbc.Driver"); conn=DriverManager.getConnection("jdbc:mysql://127.0.0.1:3306/exam?characterEncoding=UTF-8","root", "123456");

    第二种方法 (加载配置文件)

    InputStream in= Test93.class.getClassLoader().getResourceAsStream("jdbc.properties");
            Properties ps = new Properties();
                ps.load(in);
                String url = ps.getProperty("url");
                String user = ps.getProperty("user");
                String password = ps.getProperty("password");
                Class.forName("com.mysql.cj.jdbc.Driver");
                Connection conn = DriverManager.getConnection(url, user, password);

    jdbc.properties

    url=jdbc:mysql://localhost:3306/testdb
    user=root
    password=123456

    2、操作数据库

    String sql="select * from test001";
    Statement statement=conn.createStatement();
    ResultSet resultSet = statement.executeQuery(sql);
    while(resultSet.next()){
    Emp emp = new Emp();
    emp.setId(resultSet.getInt(1));
    emp.setName(resultSet.getString(2));
    System.out.println(emp);

     第二种利用反射

      public static  <T> List <T> test01(Class<T> clazz,String sql,Object...o){
            Connection conn=getcon();
            List<T> list=new ArrayList<>();
            try {
                //prepareStatement对象防止sql注入的方式是把用户非法输入的单引号用反斜杠做了转义,从而达到了防止sql注入的目的
                PreparedStatement ps=conn.prepareStatement(sql);
                //设置SQL中的占位符内容
                for (int i = 0; i <o.length ; i++) {
                    ps.setObject(i+1,o[i]);
                }
                ResultSet result=ps.executeQuery();
                //获取result的元数据
                ResultSetMetaData metaData=result.getMetaData();
                while (result.next()){
                    //反射 创建实例
                    T t=clazz.newInstance();
                    //元数据中获取当前一个对象有多少列
                    for (int i = 0; i <metaData.getColumnCount() ; i++) {
                        //获取当前列的名字
                        String name = metaData.getColumnLabel(i + 1);
                        //获取当前属性的值
                        Object value=result.getObject(i+1);
                        //获取对应成员变量
                        Field field=clazz.getDeclaredField(name);
                        //设置私有属性可见
                        field.setAccessible(true);
                        //为对应属性赋值
                        field.set(t,value);
                    }
                    list.add(t);
                }
            } catch (Exception e) {
                e.printStackTrace();
            }
            return list;
        }
    public static void main(String[] args) {
            String sql="select * from test001 where id=?";
            try {
                List list=test01(Class.forName("com.xian.Emp"),sql,3);
                System.out.println(list);
            } catch (ClassNotFoundException e) {
                e.printStackTrace();
            }
        }

     三、通用代码

    import java.sql.*;
    
    public class TestJDBC {
        public static void main(String[] args) {
            try {
                select();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
    //获取链接
    public static Connection getcon(){ Connection conn = null; try {
            //Mysql8.0以上就需要com.Mysql.cj.jdbc.Driver 以前的版本不需要CJ Class.forName(
    "com.mysql.cj.jdbc.Driver");
            //数据库链接自己的,用户名,密码自己的 conn
    = DriverManager.getConnection("jdbc:mysql://127.0.0.1:3306/testdb?characterEncoding=UTF-8","root", "123456"); return conn; } catch (Exception e) { e.printStackTrace(); } return conn; } //执行SQL语句 public static void select() throws SQLException { Connection conn; conn=getcon(); String sql="select * from t_dept"; Statement statement=conn.createStatement(); ResultSet resultSet = statement.executeQuery(sql); while(resultSet.next()){
           //对应的类是自己数据对应的 User user
    = new User(); user.setId(resultSet.getInt(1)); user.setName(resultSet.getString(2)); System.out.println(user); } } }
  • 相关阅读:
    JS中的prototype与面向对象
    机电传动控制第二周学习笔记
    第三周作业
    机电传动控制第四周作业
    第五周学习笔记
    机电传动控制第一周学习笔记
    个人项目图书管理系统登陆功能模拟
    GITHUB使用及入门总结
    我的github地址
    工作压力改变了我?
  • 原文地址:https://www.cnblogs.com/springxian/p/13606126.html
Copyright © 2020-2023  润新知