MySQL-2
1.PreparedStatement
例子:PreparedStatement ps = c.prepareStatement(sql);
ps.setString(1,"提莫");
ps.setFloat(2,313.0f);
ps.setInt(3,50);
ps.execute();
优点:
1.可读性好,不易犯错
2.性能比Statement更快
3.防止SQL注入式攻击
注:ResultSet rs = s.executeQuery(sql);
二、execute与executeUpdate
不同1:
execute可以执行查询语句
然后通过getResultSet,把结果集取出来
executeUpdate不能执行查询语句
不同2:
execute返回boolean类型,true表示执行的是查询语句,false表示执行的是insert,delete,update等等
executeUpdate返回的是int,表示有多少条数据受到了影响
获取自增长id
PreparedStatement ps = c.prepareStatement(sql, Statement.RETURN_GENERATED_KEYS);
获取元数据概念:与数据库服务器相关的数据
DatabaseMetaData dbmd = c.getMetaData();              // 获取数据库服务器产品名称            System.out.println("数据库产品名称:\t"+dbmd.getDatabaseProductName());            // 获取数据库服务器产品版本号            System.out.println("数据库产品版本:\t"+dbmd.getDatabaseProductVersion());            // 获取数据库服务器用作类别和表名之间的分隔符 如test.user            System.out.println("数据库和表分隔符:\t"+dbmd.getCatalogSeparator());            // 获取驱动版本            System.out.println("驱动版本:\t"+dbmd.getDriverVersion());              System.out.println("可用的数据库列表:");            // 获取数据库名称            ResultSet rs = dbmd.getCatalogs();三、事务
            c.setAutoCommit(false);
              // 加血的SQL            String sql1 = "update hero set hp = hp +1 where id = 22";            s.execute(sql1);              // 减血的SQL            // 不小心写错写成了 updata(而非update)              String sql2 = "updata hero set hp = hp -1 where id = 22";            s.execute(sql2);              // 手动提交            c.commit();在事务中的多个操作,要么都成功,要么都失败
通过 c.setAutoCommit(false);关闭自动提交
使用 c.commit();进行手动提交
通过 c.setAutoCommit(false);关闭自动提交
使用 c.commit();进行手动提交
前提:
在Mysql中,只有当表的类型是INNODB的时候,才支持事务,所以需要把表的类型设置为INNODB,否则无法观察到事务.
修改表的类型为INNODB的SQL:
 
 
修改表的类型为INNODB的SQL:
alter table hero ENGINE  = innodb;
四、ORM = Object RelationShip Database Mapping
一个对象,对应数据库里的一条记录
package jdbc;   import java.sql.Connection;import java.sql.DriverManager;import java.sql.ResultSet;import java.sql.SQLException;import java.sql.Statement;  import charactor.Hero;   public class TestJDBC {       public static Hero get(int id) {        Hero hero = null;        try {            Class.forName("com.mysql.jdbc.Driver");        } catch (ClassNotFoundException e) {            e.printStackTrace();        }        try (Connection c = DriverManager.getConnection("jdbc:mysql://127.0.0.1:3306/how2java?characterEncoding=UTF-8","root", "admin");            Statement s = c.createStatement();) {            String sql = "select * from hero where id = " + id;               ResultSet rs = s.executeQuery(sql);               // 因为id是唯一的,ResultSet最多只能有一条记录            // 所以使用if代替while            if (rs.next()) {                hero = new Hero();                String name = rs.getString(2);                float hp = rs.getFloat("hp");                int damage = rs.getInt(4);                hero.name = name;                hero.hp = hp;                hero.damage = damage;                hero.id = id;            }           } catch (SQLException e) {            // TODO Auto-generated catch block            e.printStackTrace();        }        return hero;       }       public static void main(String[] args) {                   Hero h = get(22);        System.out.println(h.name);       }}三、DAO
Data Access Object
数据库访问对象
 也就是专门用一个类进行封装
ackage jdbc;import java.sql.Connection;import java.sql.DriverManager;import java.sql.PreparedStatement;import java.sql.ResultSet;import java.sql.SQLException;import java.sql.Statement;import java.util.ArrayList;import java.util.List;import property.Item;public class ItemDAO {public ItemDAO() {    try {        Class.forName("com.mysql.jdbc.Driver");    } catch (ClassNotFoundException e) {        e.printStackTrace();    }}    public Connection getConnection() throws SQLException {        return DriverManager.getConnection("jdbc:mysql://127.0.0.1:3306/how2java?characterEncoding=UTF-8","root",                "admin");    }    public int getTotal() {        int total = 0;        try (Connection c = getConnection(); Statement s = c.createStatement();) {            String sql = "select count(*) from item";            ResultSet rs = s.executeQuery(sql);            while (rs.next()) {                total = rs.getInt(1);            }            System.out.println("total:" + total);        } catch (SQLException e) {            e.printStackTrace();        }        return total;    }    public void add(Item item) {        String sql = "insert into item values(null,?,?)";        try (Connection c = getConnection(); PreparedStatement ps = c.prepareStatement(sql);) {            ps.setString(1, item.name);            ps.setInt(2, item.price);            ps.execute();            ResultSet rs = ps.getGeneratedKeys();            if (rs.next()) {                int id = rs.getInt(1);                item.id = id;            }        } catch (SQLException e) {            e.printStackTrace();        }    }    public void update(Item item) {        String sql = "update item set name= ?, price = ?  where id = ?";        try (Connection c = getConnection(); PreparedStatement ps = c.prepareStatement(sql);) {            ps.setString(1, item.name);            ps.setInt(2, item.price);            ps.setInt(3, item.id);            ps.execute();        } catch (SQLException e) {            e.printStackTrace();        }    }    public void delete(int id) {        try (Connection c = getConnection(); Statement s = c.createStatement();) {            String sql = "delete from item where id = " + id;            s.execute(sql);        } catch (SQLException e) {            e.printStackTrace();        }    }    public Item get(int id) {        Item item = null;        try (Connection c = getConnection(); Statement s = c.createStatement();) {            String sql = "select * from item where id = " + id;            ResultSet rs = s.executeQuery(sql);            if (rs.next()) {                item = new Item();                String name = rs.getString(2);                int price = rs.getInt(3);                item.name = name;                item.price = price;                item.id = id;            }        } catch (SQLException e) {            e.printStackTrace();        }        return item;    }    public List<Item> list() {        return list(0, Short.MAX_VALUE);    }    public List<Item> list(int start, int count) {        List<Item> items = new ArrayList<Item>();        String sql = "select * from item order by id desc limit ?,? ";        try (Connection c = getConnection(); PreparedStatement ps = c.prepareStatement(sql);) {            ps.setInt(1, start);            ps.setInt(2, count);            ResultSet rs = ps.executeQuery();            while (rs.next()) {                Item item = new Item();                int id = rs.getInt(1);                String name = rs.getString(2);                int price = rs.getInt(3);                item.name = name;                item.price = price;                item.id = id;                                 items.add(item);            }        } catch (SQLException e) {            e.printStackTrace();        }        return items;    }}其他:数据库连接池
 
                    
                     
                    
                 
                    
                
 
                
            
         
         浙公网安备 33010602011771号
浙公网安备 33010602011771号