• jdbc连接数据库


    必要流程

    package database;
    
    import java.sql.Connection;
    import java.sql.DriverManager;
    import java.sql.ResultSet;
    import java.sql.Statement;
    
    /**
     * jdbc 操作数据库的标准流程
     * @author Administrator
     *
     */
    public class JdbcDemo01 {
    	private static String DATABASE = "jdbc:mysql://localhost:3306/jdbc_practice";
    	private static String USER = "root";
    	private static String PWD = "000110";
    	
    	public static void main(String[] args) throws Exception{
    
    		Class.forName("com.mysql.jdbc.Driver");
    		// 注册驱动,需要导入驱动jdbc驱动包
    		Connection conn = DriverManager.getConnection(DATABASE,USER,PWD);
    		// 获取connection连接
    		Statement stmt = conn.createStatement();
    		// 得到执行sql的语句的对象
                    // stmt.executeQuery(sql) //增删改查不创建result对象,执行该语句返回大于零表示数据库操作成功
    		ResultSet rs = stmt.executeQuery("select * from emp");
    		// 执行语句得到结果
    		while (rs.next()) {
    			System.out.println(rs.getObject("ename"));
    		}		
    		rs.close();
    		stmt.close();
    		conn.close();	
    	}
    }
    
    

    关闭资源的正确方式

    使用JDK7新特性自动关闭IO操作

    public static void jdbc_insertAutoClose(){
    		/**
    		 * 使用jdk7新特性自动关闭资源
    		 */
    		try {
    			Class.forName("com.mysql.jdbc.Driver");
    		} catch (ClassNotFoundException e) {
    			// TODO Auto-generated catch block
    			e.printStackTrace();
    		}
    
    		try (Connection conn = DriverManager.getConnection(DATABASE,USER,PWD);
    			Statement stmt = conn.createStatement()){// 自动关闭资源,把IO对象都定义到try后面的()里面,末尾不加';'
    			int flag = stmt.executeUpdate("update emp set empno = 7777 where empno = 6666");
    			stmt.executeUpdate("insert into emp (empno,ename,sal) values (1235,'kkkk',2222)");
    			if (flag >0)
    				System.out.println("插入成功");
    			else
    				System.out.println("插入失败");
    		} catch (SQLException e) {
    			// TODO Auto-generated catch block
    			e.printStackTrace();
    		}
    	
    	}
    

    配置文件properties的使用方法

    • 在工程目录下创建后缀名为.properties的文件
    • 编辑要配置的键值对,等于两边不要加空格,换行不要加分号
    • 在需要使用配置参数的类使用以下方法读取配置文件到内存中
    ResourceBundle db = ResourceBundle.getBundle("database/db");
    		DB_URL = db.getString("db_url");
    		DB_USER = db.getString("db_user");
    		DB_PWD = db.getString("db_pwd");
    		DB_CLASS_DRIVER = db.getString("db_driverclass");
    

    注意读取路径

    重写类toString()方法可以自定义List对象的输出格式

    在处理sql查询结果的时候,可以自定义一个类集合用于保存结果,以便于后期处理
    自定义类:

    package database;
    
    public class User {
    	private String name;
    	private String job;
    	private int id;
    	private double sal;
    	
    	public void setId(int id) {
    		this.id = id;
    	}
    	
    	public int getId() {
    		return this.id;
    	}
    	
    	public void setName(String name) {
    		this.name = name;
    	}
    	
    	public String getName() {
    		return name;
    	}
    	
    	@Override
    	public String toString() {
    		return "User [id=" + id + ", name=" + name + "]";
    	}// 定义输出格式
    
    }
    

    创建自定义对象集合,每一条查询结果为一个新的对象

    conn = DriverManager.getConnection(DATABASE, USER, PWD);
    			// 创建连接数据库对象
    			stmt = conn.createStatement();
    			// 创建执行sql语句对象
    			rs = stmt.executeQuery("select * from emp");
    			// 创建结果对象,存入执行结果,增删改没有这一条
    			List<User> userList = new ArrayList<>();// 自定义输出对象
    			while (rs.next()) {
    				User user = new User();
    				user.setId(rs.getInt("EMPNO"));
    				user.setName(rs.getString("ENAME"));
    				userList.add(user);
    			}
    			System.out.println(userList.toString());// 自定义对象输出格式,在类里面重写toString()方法
    

    因为重写了toString()方法,所以可以直接打印集合

    使用PreparedStatement防止SQL注入

    String sql = "select * from login_db where user=? and pwd=?";// 使用占位符填充要查询的关键字
    		// 使用preparestatement防止sql注入
    		try (	Connection conn = DBUtil.getConnection();
    				PreparedStatement stmt = conn.prepareStatement(sql)){// 自动关闭io操作
                                    // 使用PreparedStatement代替Statement
    	
    			stmt.setString(1, user);// sql语句赋值
    			stmt.setString(2, pwd);
    			try(ResultSet rs = stmt.executeQuery()) {// 执行语句的时候不需要加sql语句
    
  • 相关阅读:
    HTML学习笔记
    JSP与Servlet的跳转及得到路径方法整理(转)
    Servlet 学习笔记6:Cookie
    工作=娱乐=爱[龙]
    幸福的方法[龙]
    10张海报,激励人生[龙]
    8个方法让你安然度过低效率的日子[龙]
    使用空余时间的20个有效途径
    人生三点钟
    2013计划
  • 原文地址:https://www.cnblogs.com/zhz-8919/p/10673426.html
Copyright © 2020-2023  润新知