zoukankan      html  css  js  c++  java
  • 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语句
    
  • 相关阅读:
    Codeforces 1045C Hyperspace Highways (看题解) 圆方树
    Codeforces 316E3 线段树 + 斐波那切数列 (看题解)
    Codeforces 803G Periodic RMQ Problem 线段树
    Codeforces 420D Cup Trick 平衡树
    Codeforces 295E Yaroslav and Points 线段树
    Codeforces 196E Opening Portals MST (看题解)
    Codeforces 653F Paper task SA
    Codeforces 542A Place Your Ad Here
    python基础 异常与返回
    mongodb 删除
  • 原文地址:https://www.cnblogs.com/zhz-8919/p/10673426.html
Copyright © 2011-2022 走看看