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); } } }
原文地址:https://www.cnblogs.com/springxian/p/13606126.html